zoukankan      html  css  js  c++  java
  • 【爬虫】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

  • 相关阅读:
    三层框架(原始版)
    Java虚拟机之内存区域
    JDK和JRE的区别
    cookie和session区别与联系
    DAO、Service、Controller及View层级结构梳理
    JavaWeb-四大域对象复习
    Mybatis-实现逆向代理
    Springboot-实现热部署
    排序算法-冒泡排序
    【ERROR 1064 (42000)】MySQL中使用mysqladmin或set修改root密码时提示语法错误
  • 原文地址:https://www.cnblogs.com/qingsheng/p/9202530.html
Copyright © 2011-2022 走看看