• 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 并不是异步的,所以效率会变差。

  • 相关阅读:
    面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?请根据自己的理解简明扼要的回答
    当下大部分互联网创业公司为什么都愿意采用增量模型来做开发?
    0
    计算机网络
    java基础
    java 多线程编程
    java类与对象,用程序解释
    修饰符的探讨
    java学习总结02
    java day1
  • 原文地址:https://www.cnblogs.com/kai-/p/12687160.html
Copyright © 2020-2023  润新知