码迷,mamicode.com
首页 > 其他好文 > 详细

scrapy 集成 selenium

时间:2020-04-12 20:51:32      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:drive   一个   job   cep   start   源代码   rom   obj   orm   

在爬虫已启动,就打开一个 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 并不是异步的,所以效率会变差。

scrapy 集成 selenium

标签:drive   一个   job   cep   start   源代码   rom   obj   orm   

原文地址:https://www.cnblogs.com/kai-/p/12687160.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!