利用scrapy框架爬取动态加载的数据

在爬取有些网站的是后,数据不一定全部是可视化界面的,当我们拖动滚动条时才会加载其他的数据,如果我们也想爬取这部分数据,就需要使用selenium模块,在scrapy里可以结合该模块修改返回对象

一、编写爬虫文件代码 

 1 import scrapy
 2 from selenium import webdriver
 3 from wangyi.items import WangyiItem
 4 
 5 
 6 class TestSpider(scrapy.Spider):
 7     name = 'test'
 8     # allowed_domains = ['www.xxx.com']
 9     start_urls = ['http://war.163.com/']
10 
11     def __init__(self):
12         self.bro = webdriver.Chrome(executable_path=r'F:\爬虫加数据\练习\第三天\chromedriver.exe')
13 
14     def parse(self, response):
15 
16         div_list = response.xpath('//div[@class="data_row news_article clearfix "]')
17         for div in div_list:
18             item = WangyiItem()
19             title = div.xpath('./div/div/h3/a/text()').extract_first()
20             time = div.xpath('./div/div[2]/span/text()').extract_first()
21             print(title)
22             item['title'] = title
23             item['time'] = time
24             yield item
25 
26     def closed(self, spider):
27         print('关闭浏览器对象!')
28         self.bro.quit()
注意,当创建完浏览器对象时,按照以前的写法,我们会直接的解析def parse 方法的返回值response来获取对象,很遗憾这里不是,因为我们要爬取的网页的数据是动态加载的,所有我们需要在middlewares.py文件改变他的返回对象response,所以说上面的response是我们改变之后的返回对象

二、修改response对象

  在中间件里有两个类,SpiderMiddleware 和 DownloaderMiddleware,这里修改的是 DownloaderMiddleware 下的 def process_response,具体原理可以看看 scrapy 的五大核心组件

  修改代码
  

 1 from scrapy.http import HtmlResponse    
 2 def process_response(self, request, response, spider):
 3         # Called with the response returned from the downloader.
 4 
 5         # Must either;
 6         # - return a Response object
 7         # - return a Request object
 8         # - or raise IgnoreRequest
 9         bro = spider.bro
10         bro.get(url=request.url)
11         sleep(3)
12         # 获取爬取的数据
13         page_text = bro.page_source
14         sleep(3)
15 
16         return HtmlResponse(url=spider.bro.current_url, body=page_text, encoding='utf8', request=request)

spider 是爬虫文件的对象,spider.bro是初始化创建的浏览器对象,request.url 是起始地址 和下面的spider.bro.current_url 是同一个地址,最终返回修改后的response

返回值后就可以对数据进行解析,获取对应的数据,

三、将获取的数据做持久化存储,

  在前几篇介绍过,这里不重复写

四、修改配置文件

DOWNLOADER_MIDDLEWARES = {
   'wangyi.middlewares.WangyiDownloaderMiddleware': 543,
}

 

转载于:https://www.cnblogs.com/liaopeng123/p/10467408.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值