scrapy网易新闻数据爬取
前言
需求:爬取网易新闻中的五大板块的新闻数据(标题和内容)
1.通过网易新闻的首页解析出五大板块对应的详情页的url(没有动态加载)
2.每一个板块对应的新闻标题都是动态加载出来的(动态加载)
3.通过解析出每一条新闻详情页的url获取详情页的页面源码,解析出新闻内容
代码实现
先通过首页解析出五大板块对应详情页的url。
定义parse函数,对板块定位并发起请求。在首页打开开发者工具,定位到五大板块的标签,发现其各自在多个ul标签下的li标签中。我们的五大板块对应的li标签分别是3,4,6,7,8。因此从这几个li标签中提取各大板块对应的url。接下来对五个url发起请求。
def parse(self, response):li_list = response.xpath('//*[@id="index2016_wrap"]/div[1]/div[2]/div[2]/div[2]/div[2]/div/ul/li')alist = [3,4,6,7,8]for index in alist:model_url = li_list[index].xpath('./a/@href').extract_first()self.models_urls.append(model_url)#依次对每一个板块对应的页面进行请求for url in self.models_urls:#对每一个板块的url进行请求发送yield scrapy.Request(url,callback=self.parse_model)
定义parse_model函数,解析每一个板块页面中对应的新闻标题与新闻详情页的url,在板块页面中定位新闻标题,解析其标题与详情页url。
def parse_model(self,response):#解析每一个板块页面中对应新闻的标题和新闻详情页的urldiv_list=response.xpath('/html/body/div/div[3]/div[4]/div[1]/div[1]/div/ul/li/div/div')for div in div_list:title=div.xpath('./div/div[1]/h3/a/text()').extract_first()news_detail_url=div.xpath('./div/div[1]/h3/a/@href').extract_first()
解析出新闻标题title后,在items文件中定义一个WangyiproItem类,用来保存要提取的内容(title,content)。随后可通过scrapy.Field将其提交管道。
#items文件import scrapyclass WangyiproItem(scrapy.Item):title=scrapy.Field()content=scrapy.Field()item=WangyiproItem()item['title']=title
对新闻详情页url发起请求,需加上参数meta
yield scrapy.Request(url=news_detail_url,callback=self.parse_detail,meta={'item':item})
定义parse_detail函数解析新闻内容
def parse_detail(self,response):#解析新闻内容content=response.xpath('//*[@id="content"]/div[2]//text()').extract()content=''.join(content)item=response.meta['item']item['content']=contentyield item
关闭spider文件
def close(self, spider):self.driver.quit()
因为每个板块加载出来的标题是动态加载的,因此使用中间件进行拦截五大板块对应的响应对象,进行篡改。
定义process_response函数进行篡改
def process_response(self, request, response, spider):#spider表示的是爬虫对象driver=spider.driver#获取了爬虫类中定义的浏览器对象# 挑选出指定的响应对象进行篡改# 通过url指定request# 通过request指定responseif request.url in spider.models_urls:driver.get(request.url)#五个板块对应的url进行请求sleep(2)page_text=driver.page_source#包含了动态加载的新闻数据#response#五大板块所对应的响应对象#针对定位到的这些response进行篡改#实例化一个新的响应对象(符合需求:包含动态加载出的新闻数据),替换原来旧的响应对象#如何让获取动态加载出的新闻数据呢?#基于selenium便捷的获取动态加载数据new_response=HtmlResponse(url=request.url,body=page_text,encoding='utf-8',request=request)return new_responseelse:# response#其他请求对应的响应对象return responsereturn response
在setting中开启下载中间件,即可。
scrapy网易新闻数据爬取相关推荐
- 6.9 用Python操控数据库(批量删除,百度新闻数据爬取与存储,写入数据时进行去重处理,pandas读取sql数据)
学习完MySQL数据库的基本操作后,下面来学习如何用Python连接数据库,并进行数据的插入.查找.删除等操作. 6.9.1 用PyMySQL库操控数据库 上一节在phpMyAdmin 中创建了数据库 ...
- (python爬虫)新浪新闻数据爬取与清洗+新浪新闻数据管理系统+MySQL
新浪新闻数据爬取与清洗+新浪新闻数据管理系统 设计要求 新浪新闻数据爬取与清洗 基本要求:完成新浪新闻排行中文章的数据爬取,包括标题.媒体.时间.内容. 进阶要求:对最近一周出现次数最多的关键字排名并 ...
- Python网络爬虫实战1:百度新闻数据爬取
目录 一. 获取网页源代码 1. 四行代码获取(有时不灵) 2. 五行代码获取(常用方法) 二.分析网页源代码信息 方法1:F12方法 方法2:右击选择"查看网页源代码" 方法 ...
- python爬百度新闻_13、web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息...
crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息, ...
- 腾讯新闻评论数据爬取
前言 鉴于最近在做观点挖掘的相关工作,观点的数据源是网络评论数据,于是第一个想到的就是新闻观点数据,一个热门的新闻可能一晚上就会有上万条评论,所以如何分析并利用好这些评论信息,将会是一件非常有意思的事 ...
- 16-爬虫之scrapy框架手动请求发送实现全站数据爬取03
scrapy的手动请求发送实现全站数据爬取 yield scrapy.Reques(url,callback) 发起的get请求 callback指定解析函数用于解析数据 yield scrapy.F ...
- 用python进行多页数据爬取_Python Scrapy如何实现多页数据爬取?
Python Scrapy如何实现多页数据爬取? 发布时间:2020-06-23 11:47:46 来源:亿速云 阅读:112 作者:清晨 这篇文章将为大家详细讲解有关Python Scrapy如何实 ...
- Python爬虫实战使用scrapy与selenium来爬取数据
系列文章目录 实战使用scrapy与selenium来爬取数据 文章目录 系列文章目录 前言 一.前期准备 二.思路与运行程序 1.思路 2.运行程序 三.代码 1.代码下载 2.部分代码 总结 前言 ...
- 【EduCoder答案】Scrapy爬虫(二)热门网站数据爬取
简介 答案查询的入口网页版 并不是所有的关卡都有答案,有些只有部分关卡有 不要直接复制答案哦 Scrapy爬虫(二)热门网站数据爬取 >>>查看 第1关:猫眼电影排行TOP100信息 ...
最新文章
- 分享一点python 编码设置的知识
- 哈夫曼编码和带权路径计算
- Python PyPI中国镜像
- spark 设置主类_最近Kafka这么火,聊一聊Kafka:Kafka与Spark的集成
- ICLR 2022 论文列表公布,接收率高达 32%
- Python os 标准库使用
- java jxl 复制单元格_如何用JAVA(如poi、jxl等)读取excel文件中的下拉框单元格的值。...
- 使用npm发布自己的npm组件包
- 粒子群算法(PSO) C
- 软件公司之间合作的保密协议范本
- esxi install DS3615XS
- 主流微信编辑器对比,最好用的竟然是它!
- 微信开发工具安装写入失败
- delphi 注册列表的学习
- 学计算机基础专业必备的书,大学计算机基础教程
- Java面试题之Redis的大坑
- 【随机优化】李雅普诺夫优化在通信与排队系统中的应用(第一章)-绪论
- ATEC | 蚂蚁金服技术出海,如何让人人享有平等的金融服务?
- 每日一学 | 2021-05-18 | Power BI 学习笔记00、01、02
- 关于 Android okhttp 使用 HTTPS 的学习记录
热门文章
- MySQL中文设置及远程连接
- 序号计算机软件工程协会网,序号
- 神经网络计算机定义,神经网络
- (happytime)Onvif Server端口占用 10013问题解决方法
- 云计算应用,需要满足哪些关键要求
- nested exception is org.apache.ibatis.binding.BindingException:
- Project 2007中的里程碑
- AB测试实战案例讲解及踩坑事项
- 1分钟学会PS污点修复
- 单元测试 easymock_使用EasyMock更轻松地测试