zoukankan      html  css  js  c++  java
  • scrapy 集成 selenium

    在爬虫已启动,就打开一个 chrom 浏览器,以后都用这一个浏览器来爬数据

    1 在爬虫中创建 bro 对象

    bro = webdriver.Chrome(executable_path='/Users/liuqingzheng/Desktop/crawl/cnblogs_crawl/cnblogs_crawl/chromedriver')
    

    在 middlewares.py 中定义一个 class:

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

    spider中的代码:

    下载中间件使用

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

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

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

  • 相关阅读:
    内存问题定位与解决
    CPU问题定位与解决
    数据库优化案例——————某市中心医院HIS系统
    系统隐形杀手——阻塞与等待
    SQL Server常见问题介绍及快速解决建议
    CVTE实习感想--2014.10秋招
    Spring AOP的理解
    一些Java面试问题
    举几个大数据的例子
    Java中乐观锁与悲观锁的实现
  • 原文地址:https://www.cnblogs.com/kai-/p/12687160.html
Copyright © 2011-2022 走看看