2012-05-01 4 views
2

urllib 라이브러리를 사용하여 페이지를 가져옵니다. 일반적으로 최상위 도메인 이름이 &입니다. 해당 도메인 내의 모든 페이지에서 일부 정보를 추출하고 싶습니다. 따라서, 나는 xyz.com이있는 경우, 내가 xyz.com/about 등의 데이터를 가져 오기하려면 코드를 싶습니다 여기 내가 사용하고있는 작업은 다음과 같습니다도메인 내의 모든 페이지 읽기

import urllib,re 

htmlFile = urllib.urlopen("http://www.xyz.com/"+r"(.*)") 
html = htmlFile.read() 
............... 

이 암컷 그래도 나를 위해 트릭을 할 수 없습니다. 어떤 아이디어라도 감사합니다.

감사합니다. -T

+3

재귀 적 웹 페이지 다운로더 인'wget'을 사용하여 웹 페이지 및 해당 웹 페이지에서 링크 된 모든 웹 페이지와 이들 웹 페이지에서 링크 된 모든 웹 페이지 등을 다운로드하십시오. –

+1

또한 메모를 작성하여 가난한 사람의 웹 사이트에서 많은 양의 데이터를 가져와야하는지 확인하십시오. –

+0

도움이되는 힌트를 주신 Thanks @ Li-aung. – user818190

답변

0

@zigdon 외에도 scrapy 프레임 워크를 살펴 보는 것이 좋습니다.

CrawlSpider은 크롤링을 아주 쉽게 구현하는 데 도움이됩니다.

+0

이것은 완벽하다고 생각됩니다. 감사! – user818190

+0

나는 scrapy의 BaseSpider를 사용하는 것이 나의 필요를 위해 잘 작동하고 있음을 발견했다. 그러나 한 가지 문제가 남아 있습니다. 즉, scrapy는 그 아래의 start_url 및 1 수준에서 정보를 가져옵니다. 더 깊은 레벨에있는 정보는 누락됩니다. 사이트가 갈 수있는 것처럼 멀리 내 거미를 보게하려면 어떻게해야합니까? – user818190

+1

BaseSpider를 사용하면 스파이더를 수동으로 프로그래밍 할 수 있습니다. 로드 할 페이지, 추출 할 데이터 등을 알려줍니다. CrawlSpider는 모든 링크를 자동으로 추출 할 수 있습니다. 자세한 정보는 문서를 읽으십시오.더 구체적인 질문이 있으시면 부탁하십시오. – San4ez

1

웹 서버에서 정규 표현식을 사용하려고합니다. 웹 서버는 실제로 이러한 종류의 형식을 지원하지 않으므로 실패합니다.

당신이하려는 일을하기 위해서는 스파이더를 구현해야합니다. 페이지를 다운로드하고, 그 안에있는 모든 링크를 찾아서 따라야하는 프로그램을 결정하는 프로그램. 그런 다음 각 페이지를 다운로드하고 반복합니다.

루핑, 동일한 페이지를 가리키는 여러 링크, 도메인 외부로 나가는 링크, 웹 서버에서 요청을 1000s로 스팸으로 보내기를 금지하는 것에주의해야 할 몇 가지 사항이 있습니다.

3

나는 domain.com/(.*)이 왜 기대되는지 모르겠습니다. 해당 도메인 내에 모든 페이지 (동적 또는 정적)의 목록이 있어야합니다. 귀하의 파이썬 프로그램은 자동으로 그것을 알 수 없습니다. 이 지식은 다른 곳에서 구해야합니다. 링크를 따르거나 웹 사이트의 사이트 맵을보아야합니다.

각주처럼 근근이 살아가는 것이 약간 그늘진 사업입니다. 귀하가 고용하는 방법에 관계없이 이용 약관을 위반하지 않았는지 항상 확인하십시오.

0

Scrapy에는이 기능이 내장되어 있습니다. 링크를 재귀 적으로 수신하지 않습니다. 그것은 비동기 적으로 자동으로 모든 무거운 물건을 처리합니다. 도메인과 검색어 및 페이지에서 전체 사이트를 검색하는 데 필요한 깊이를 지정하십시오. http://doc.scrapy.org/en/latest/index.html

+0

Scrapy에 대한 헤드 업에 감사 드리며, 나는 그것을 간과했습니다. @ San4ez는 내가 먼저 시도 할 구체적인 예를 가지고 있습니다. – user818190