前言

  • 需求:爬取网易新闻中的五大板块的新闻数据(标题和内容)

    • 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 scrapy​​class 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']=content​yield 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 response​return response

在setting中开启下载中间件,即可。

scrapy网易新闻数据爬取相关推荐

  1. 6.9 用Python操控数据库(批量删除,百度新闻数据爬取与存储,写入数据时进行去重处理,pandas读取sql数据)

    学习完MySQL数据库的基本操作后,下面来学习如何用Python连接数据库,并进行数据的插入.查找.删除等操作. 6.9.1 用PyMySQL库操控数据库 上一节在phpMyAdmin 中创建了数据库 ...

  2. (python爬虫)新浪新闻数据爬取与清洗+新浪新闻数据管理系统+MySQL

    新浪新闻数据爬取与清洗+新浪新闻数据管理系统 设计要求 新浪新闻数据爬取与清洗 基本要求:完成新浪新闻排行中文章的数据爬取,包括标题.媒体.时间.内容. 进阶要求:对最近一周出现次数最多的关键字排名并 ...

  3. Python网络爬虫实战1:百度新闻数据爬取

    目录 一.  获取网页源代码 1.  四行代码获取(有时不灵) 2. 五行代码获取(常用方法) 二.分析网页源代码信息 方法1:F12方法 方法2:右击选择"查看网页源代码" 方法 ...

  4. python爬百度新闻_13、web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息...

    crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息, ...

  5. 腾讯新闻评论数据爬取

    前言 鉴于最近在做观点挖掘的相关工作,观点的数据源是网络评论数据,于是第一个想到的就是新闻观点数据,一个热门的新闻可能一晚上就会有上万条评论,所以如何分析并利用好这些评论信息,将会是一件非常有意思的事 ...

  6. 16-爬虫之scrapy框架手动请求发送实现全站数据爬取03

    scrapy的手动请求发送实现全站数据爬取 yield scrapy.Reques(url,callback) 发起的get请求 callback指定解析函数用于解析数据 yield scrapy.F ...

  7. 用python进行多页数据爬取_Python Scrapy如何实现多页数据爬取?

    Python Scrapy如何实现多页数据爬取? 发布时间:2020-06-23 11:47:46 来源:亿速云 阅读:112 作者:清晨 这篇文章将为大家详细讲解有关Python Scrapy如何实 ...

  8. Python爬虫实战使用scrapy与selenium来爬取数据

    系列文章目录 实战使用scrapy与selenium来爬取数据 文章目录 系列文章目录 前言 一.前期准备 二.思路与运行程序 1.思路 2.运行程序 三.代码 1.代码下载 2.部分代码 总结 前言 ...

  9. 【EduCoder答案】Scrapy爬虫(二)热门网站数据爬取

    简介 答案查询的入口网页版 并不是所有的关卡都有答案,有些只有部分关卡有 不要直接复制答案哦 Scrapy爬虫(二)热门网站数据爬取 >>>查看 第1关:猫眼电影排行TOP100信息 ...

最新文章

  1. 分享一点python 编码设置的知识
  2. 哈夫曼编码和带权路径计算
  3. Python PyPI中国镜像
  4. spark 设置主类_最近Kafka这么火,聊一聊Kafka:Kafka与Spark的集成
  5. ICLR 2022 论文列表公布,接收率高达 32%
  6. Python os 标准库使用
  7. java jxl 复制单元格_如何用JAVA(如poi、jxl等)读取excel文件中的下拉框单元格的值。...
  8. 使用npm发布自己的npm组件包
  9. 粒子群算法(PSO) C
  10. 软件公司之间合作的保密协议范本
  11. esxi install DS3615XS
  12. 主流微信编辑器对比,最好用的竟然是它!
  13. 微信开发工具安装写入失败
  14. delphi 注册列表的学习
  15. 学计算机基础专业必备的书,大学计算机基础教程
  16. Java面试题之Redis的大坑
  17. 【随机优化】李雅普诺夫优化在通信与排队系统中的应用(第一章)-绪论
  18. ATEC | 蚂蚁金服技术出海,如何让人人享有平等的金融服务?
  19. 每日一学 | 2021-05-18 | Power BI 学习笔记00、01、02
  20. 关于 Android okhttp 使用 HTTPS 的学习记录

热门文章

  1. MySQL中文设置及远程连接
  2. 序号计算机软件工程协会网,序号
  3. 神经网络计算机定义,神经网络
  4. (happytime)Onvif Server端口占用 10013问题解决方法
  5. 云计算应用,需要满足哪些关键要求
  6. nested exception is org.apache.ibatis.binding.BindingException:
  7. Project 2007中的里程碑
  8. AB测试实战案例讲解及踩坑事项
  9. 1分钟学会PS污点修复
  10. 单元测试 easymock_使用EasyMock更轻松地测试