scrapy集成selenium的方法

scrapy集成selenium后即可在scrapy每次请求url时打开chrome浏览器,对于一些js加载的页面有很好的抓取效果下面介绍scarpy集成selenium的方法

1.建立JSPageMiddleawre中间件

在middlewares文件下

#首先导入webdirver和HtmlResponse方法
from selenium import webdriver
from scrapy.http import HtmlResponse

class JSPageMiddleawre(object):
    def __init__(self):
        self.browser = webdriver.Chrome(executable_path="C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe")
        super(JSPageMiddleawre,self).__init__()

    #通过chorme请求动态网页
    def process_request(self, request, spider):
    	#这里的XXXX即为我们的爬虫名,对不同的爬虫进行动态的修改
        if spider.name == "XXXX":
            self.browser.get(request.url)
            import time
            time.sleep(3)
            print('访问:{0}'.format(request.url))
         
            #这里直接retrun HtmlResponse的原因是我们已经通过模拟浏览器的方式访问过一遍网站了 不需要再次进入downloader下载一次所以直接return就好了
            return HtmlResponse(url=self.browser.current_url,body=self.browser.page_source,encoding='utf-8')

2.使用信号量的方式修改spider文件

在start_url之后,parse函数之前我们需要如下定义

from scrapy.xlib.pydispatch import dispatcher
from scrapy import signals


def __init__(self):
   self.browser = webdriver.Chrome(executable_path="C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe")
   super(JobboleSpider,self).__init__()
   dispatcher.connect(self.spider_closed,signals.spider_closed)

def spider_closed(self,spider):
    #当爬虫结束时候退出browser
    print("spider spider_closed")
    self.browser.quit()

3.最后不要忘记在settings中配置我们的中间件

DOWNLOADER_MIDDLEWARES = {
   'XXXX_crawl.middlewares.JSPageMiddleawre': 1,
}

好了以上都配置好 我们就可以在用scrapy中集成selenium更好的搞定js加载的网站了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值