【爬虫】selenium集成到scrapy中

在middlewares.py中定义一个class:

 1 from selenium.common.exceptions import TimeoutException
 2 from scrapy.http import HtmlResponse  #传递js加载后的源代码,不会返回给download
 3 class JSPageMiddleware(object):
 4     #通过chrome请求动态网页
 5     def process_request(self, request, spider):
 6         if spider.name == "JobBole":
 7             try:
 8                 spider.browser.get(request.url)
 9             except TimeoutException:
10                 print('30秒timeout之后,直接结束本页面')
11                 spider.browser.execute_script('window.stop()')
12             import time
13             time.sleep(3)
14             print("访问:{0}".format(request.url))
15 
16             return HtmlResponse(url=spider.browser.current_url, body=spider.browser.page_source, encoding="utf-8", request=request)
17             '''编码默认是unicode'''

spider中的代码:

 1 name = "JobBole"
 2     allowed_domains = ["jobbole.com"]
 3     start_urls = ['http://blog.jobbole.com/all-posts/']
 4 
 5     def __init__(self):
 6         '''chrome放在spider中,防止每打开一个url就跳出一个chrome'''
 7         self.browser=webdriver.Chrome(executable_path='E:/chromedriver.exe')
 8         self.browser.set_page_load_timeout(30)
 9         super(JobboleSpider, self).__init__()
10         dispatcher.connect(self.spider_close,signals.spider_closed)
11 
12     def spider_close(self,spider):
13         #当爬虫退出的时候关闭Chrome
14         print("spider closed")
15         self.browser.quit()

把selenium集成到scrapy中主要改变的就是这两处地方。

以上的在scrapy中嵌入selenium的chrome并不是异步的,所以效率会变差。

这里都是部分代码,完整代码链接:https://github.com/pujinxiao/jobbole_spider

转至http://www.cnblogs.com/jinxiao-pu/p/6815845.html

猜你喜欢

转载自www.cnblogs.com/qingsheng/p/9202530.html