• 【爬虫】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

  • 相关阅读:
    每周总结8.18
    每周总结7.28
    每周总结8.25
    每周总结7.21
    每周总结8.11
    每周总结8.4
    大道至简 读后感
    递归进行回文的判断
    课后作业1
    GoodBlogs Websites
  • 原文地址:https://www.cnblogs.com/qingsheng/p/9202530.html
Copyright © 2020-2023  润新知