다음은 다운로드 핸들러 미들웨어에서 selenium 및 phantomjs headless webdriver를 사용하는 작동 예제입니다.
class JsDownload(object):
@check_spider_middleware
def process_request(self, request, spider):
driver = webdriver.PhantomJS(executable_path='D:\phantomjs.exe')
driver.get(request.url)
return HtmlResponse(request.url, encoding='utf-8', body=driver.page_source.encode('utf-8'))
는 나는이 래퍼를 구현하므로 사용할 미들웨어 다른 거미를 말할 수있는 능력을 원 :
def check_spider_middleware(method):
@functools.wraps(method)
def wrapper(self, request, spider):
msg = '%%s %s middleware step' % (self.__class__.__name__,)
if self.__class__ in spider.middleware:
spider.log(msg % 'executing', level=log.DEBUG)
return method(self, request, spider)
else:
spider.log(msg % 'skipping', level=log.DEBUG)
return None
return wrapper
settings.py : 모든 거미를 작동하는 랩퍼
DOWNLOADER_MIDDLEWARES = {'MyProj.middleware.MiddleWareModule.MiddleWareClass': 500}
해야 최소한 :
middleware = set([])
당신은 (거미) 요청 콜백이 구현 수도 있지만, 다음 HTTP 요청이 두 번 발생 될 수
middleware = set([MyProj.middleware.ModuleName.ClassName])
: 10
는 미들웨어를 포함합니다. 이것은 완전한 증거 솔루션은 아니지만 .ready()에로드되는 내용에 적용됩니다. 셀레늄을 읽는 데 시간을 할애하면 페이지 소스를 저장하기 전에 특정 이벤트가 트리거 될 때까지 기다릴 수 있습니다.
또 다른 예 : https://github.com/scrapinghub/scrapyjs
건배!
Scrapy는 브라우저의 "소스보기"명령에서 볼 수있는 것을 제공 할 것이며 브라우저 창에서 해석 한 내용이 아닌 것을 제공 할 것입니다. Scrapy는 자바 스크립트를 이해하지 못하므로 AJAX 호출이 아니고 jQuery 마술도 없다 ... 그래서 동적 인 데이터는 없다. 브라우저 개발자 도구에서 네트워크 활동을 살펴보고 새로운 Scrapy Request()를 사용하여 Javascript/AJAX 호출을 모방하여 추가 컨텐츠를 가져올 수 있지만 Scrapy를 사용하여 실제 브라우저를 모방하기가 어려울 수 있습니다. –
https : //github.com/scrapinghub/scrapyjs –