利用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
利用scrapy框架爬取动态加载的数据相关推荐
- 教你用Python爬取动态加载的数据
例子1:爬取豆瓣电影中的电影详情数据 url:https://movie.douban.com/ 1.什么是动态加载的数据: 我们通过requests模块进行数据爬取无法每次都是可见即可得,有些数据是 ...
- 用Python爬取动态加载的诸如百度的图片
用Python爬取动态加载的诸如百度的图片 使用原因 代码如下 模块介绍 selenium模块 lxml解析模块 requests模块 去除重复 开启多线程 效果如下 留言 使用原因 学习Python ...
- python爬虫动态加载页面_Python+Selenium爬取动态加载页面(2)
注: 上一篇<Python+Selenium爬取动态加载页面(1)>讲了基本地如何获取动态页面的数据,这里再讲一个稍微复杂一点的数据获取全国水雨情网.数据的获取过程跟人手动获取过程类似,所 ...
- python爬虫利用Scrapy框架爬取汽车之家奔驰图片--实战
先看一下利用scrapy框架爬取汽车之家奔驰A级的效果图 1)进入cmd命令模式下,进入想要存取爬虫代码的文件,我这里是进入e盘下的python_spider文件夹内 C:\Users\15538&g ...
- 利用Scrapy框架爬取LOL皮肤站高清壁纸
利用Scrapy框架爬取LOL皮肤站高清壁纸 Lan 2020-03-06 21:22 81 人阅读 0 条评论 成品打包:点击进入 代码: 爬虫文件 # -*- coding: utf- ...
- 利用Scrapy框架爬取前途无忧招聘信息
利用Scrapy框架爬取前途无忧招聘信息 关于安装和命令使用可参考:https://docs.scrapy.org/en/1.7/intro/install.html 先创建项目和爬虫文件 分析网站 ...
- Scrapy框架爬取中国裁判文书网案件数据
Scrapy框架爬取中国裁判文书网案件数据 项目Github地址: https://github.com/Henryhaohao/Wenshu_Spider 中国裁判文书网 - http://wens ...
- Python爬取动态加载的壁纸网站(高清壁纸福利)
"静态网页"和"动态网页" "静态网页":一次性加载,爬虫可以爬到全部信息.关于静态网页的Demo "动态网页":分多次 ...
- python爬取js加载的数据_JS动态加载数据不会爬?老司机教你两个方法爬取想要的数据...
学习Python的人绝大部分都是在用Python做爬虫,毕竟对于爬虫而言Python是不二选. 但是一般简单的静态页面网站还是很好爬取的,对于很多动态加载的网站就不知道怎么办了,今天小编就给大家介绍两 ...
最新文章
- reactor线程模型_从TCP服务器到I/O模型,带你学习Netty
- View的绘制-draw流程详解
- 介绍最全的LVS负载均衡技术
- uselocale_Java扫描仪useLocale()方法与示例
- 更好地在云上:物联网,大数据和人工智能
- [VB.net]飞龙·网页及贴吧操作II
- 5.1 损坏联机日志的恢复方法
- React Native屏幕尺寸适配
- 根据ip获取经纬度_PHP使用百度地图获取指定地址坐标:创建AK(图文+视频)
- 自疫情暴发以来,99%的中国IT决策者认为数据变得更重要
- UITableView滚动到指定位置
- 规则引擎drools java,spring,spring-boot,drools使用案例
- 10分钟入门Shell脚本编程
- corpus iweb_BYU-Corpus杨百翰大学英语语料系列数据库(BYU)
- 书籍之 Head First HTML与CSS
- 夏普 Sharp MX-M260 32位系统安装驱动后乱码
- 电信光猫PT622 G开通ipv6
- 英文版权声明_传统文化 | 中国著名旅游景点的英文表达—上海
- 手机端和pc端浏览器兼容性问题
- 谷歌浏览器chrome长截图功能,不用工具轻松截图
热门文章
- [洛谷P3292] [SCOI2016]幸运数字
- Andrew Ng机器学习编程作业:K-means Clustering and Principal Component Analysis
- Spring框架第一天
- C# semaphore的使用
- python 常用内置函数
- JNI_Android项目中调用.so动态库实现详解【转】
- 《软件工程》课程改进意见
- poj3264Balanced Lineup(RMQ)
- PHP远程文件管理,可以给表格排序,遍历目录,时间排序
- Base64编码简介及在java中的使用