파이썬에서 3 단계 웹 스크래핑을 수행해야합니다. 나는 처음에 긁어 모으는 몇 개의 기본 페이지를 가지고 있으며, 나는 그 페이지들로부터 몇 개의 선택 링크를 얻고 그들이 가리키는 페이지를 가져와 다시 한 번 더 반복해야한다. 트릭은 모든 비동기 적으로이 작업을 수행하여 모든 요청이 가능한 한 빨리 종료되도록하고 전체 요청이 단일 요청에서 차단되지 않도록하려는 것입니다. 어떻게하면 좋을까요? 이 시점까지 Python에서 다단계 동시 HTTP 요청
, 나는 다음과 같이eventlet
로 긁어 한 단계를 해왔 :
urls = ['http://example.com', '...']
def scrape_page(url):
"""Gets the data from the web page."""
body = eventlet.green.urllib2.urlopen(url).read()
# Do something with body
return data
pool = eventlet.GreenPool()
for data in pool.imap(screen_scrape, urls):
# Handle the data...
을 그러나, 나는이 기술을 확장하고 중첩 GreenPool.imap
루프를 포함하는 경우, 될 때까지 차단 모든 해당 그룹의 요청이 완료되면 응용 프로그램이 필요에 따라 더 많은 요청을 시작할 수 없습니다.
Twisted 또는 다른 비동기 서버에서이 작업을 수행 할 수 있다는 것을 알고 있지만 큰 라이브러리가 필요하지 않으며 가벼운 것을 사용하고 싶습니다. 나는 제안에 열리다.
정말 트위스트를보고하는 것이 좋습니다. 라이브러리가 크다는 것은 사실이지만이 작업을 수행하려면 http 클라이언트 부분 만 사용해야하며 유사한 작업을 두 가지 방법으로 시도한 경우 상위 수준 라이브러리 방법이 훨씬 쉽습니다. –