需求:爬取这国内、国际、军事、航空、无人机模块下的新闻信息

1.找到这五个板块对应的url

 2.进入每个模块请求新闻信息

我们可以明显发现‘’加载中‘’,因此我们判断新闻数据是动态加载出来的。

3.拿到新闻的标题和详情url

4.请求详情页 获取新闻内容

5.思路:思路已经很清晰了,请求五大板块拿到五大板块的详情页,获取每一个板块下的新闻标题和新闻详情页url,再对新闻详情页请求拿到新闻的内容。

需要注意的一点是,新闻都是动态加载出来的,因此我们用selenium来抓取新闻的数据。

6.代码实现

爬虫文件: wangyi.py

# -*- coding: utf-8 -*-
import scrapy
from selenium import webdriver
from wangYi.items import WangyiItem class WangyiSpider(scrapy.Spider):
name = 'wangyi'
# allowed_domains = ['www.xxx.com']
start_urls = ['https://news.163.com/']
urls = []
def __init__(self):
self.bro = webdriver.Chrome(executable_path='D:\OldBoy_Luffy\code_practice\chapter11\爬虫\scrapy框架\chromedriver.exe') def parse(self, response):
li_list = response.xpath('//*[@id="index2016_wrap"]/div[1]/div[2]/div[2]/div[2]/div[2]/div/ul/li')
# 五大模块所在li标签的索引
index_list = [3,4,6,7,8] # 获取五大模块的url
for index in index_list:
model_src = li_list[index].xpath('./a/@href').extract_first()
self.urls.append(model_src) # 发送请求
for url in self.urls:
yield scrapy.Request(url=url, callback=self.parse_model) def parse_model(self,response):
item = WangyiItem()
# 每条新闻所在的div标签
div_list = response.xpath('/html/body/div/div[3]/div[4]/div[1]/div/div/ul/li/div/div')
for div in div_list:
# 获取标题与详情页的url
title = div.xpath('./div/div[1]/h3/a/text()').extract_first()
detail_url = div.xpath('./div/div[1]/h3/a/@href').extract_first()
item['title'] = title
# 部分的新闻中可能会有广告信息 因此可能会匹配为空 跳过循环
if detail_url is None:
continue
# 请求详情页 请求传参
yield scrapy.Request(url=detail_url, callback=self.detail_parse,meta={'item':item}) def detail_parse(self,response):
item = response.meta['item']
# 获取新闻内容
content = response.xpath('//div[@id="endText"]//text()').extract()
content = ''.join(content)
item['content'] = content
# 存入管道
yield item def closed(self,spider): # 重写父类方法 爬虫结束时执行
self.bro.quit()

中间件middlewares.py

  def process_response(self, request, response, spider):  # spider就是爬虫文件中 爬虫类的实例化对象
# 拿到浏览器对象
bro = spider.bro
if request.url in spider.urls:
# 获取动态加载的数据
bro.get(request.url)
page_text = bro.page_source
# 封装成响应对象返回
new_response = HtmlResponse(url=request.url,body=page_text,encoding='utf-8',request=request)
return new_response
else:
return response

items.py

class WangyiItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field()
content = scrapy.Field()

pipelines.py

class WangyiPipeline:
def open_spider(self,spider):
self.fp = open('news.txt','w',encoding='utf-8')
print('爬取开始...') def process_item(self, item, spider):
title = item['title']
content = item['content']
if title is None:
title=''
if content is None:
content = ''
self.fp.write(title+'\n'+content)
return item def close_spider(self,spider):
self.fp.close()
print('爬取结束')

(六)基于Scrapy爬取网易新闻中的新闻数据的更多相关文章

  1. scrapy项目4:爬取当当网中机器学习的数据及价格(CrawlSpider类)

    scrapy项目3中已经对网页规律作出解析,这里用crawlspider类对其内容进行爬取: 项目结构与项目3中相同如下图,唯一不同的为book.py文件 crawlspider类的爬虫文件book的 ...

  2. scrapy项目3:爬取当当网中机器学习的数据及价格(spider类)

    1.网页解析 当当网中,人工智能数据的首页url如下为http://category.dangdang.com/cp01.54.12.00.00.00.html 点击下方的链接,一次观察各个页面的ur ...

  3. 1)③爬取网易It方面部分新闻

    __author__ = 'minmin' #coding:utf-8 import re,urllib,sgmllib,os #根据当前的url获取html def getHtml(url): pa ...

  4. Scrapy爬取豆瓣电影top250的电影数据、海报,MySQL存储

    从GitHub得到完整项目(https://github.com/daleyzou/douban.git) 1.成果展示 数据库 本地海报图片 2.环境 (1)已安装Scrapy的Pycharm (2 ...

  5. 用scrapy爬取京东的数据

    本文目的是使用scrapy爬取京东上所有的手机数据,并将数据保存到MongoDB中. 一.项目介绍 主要目标 1.使用scrapy爬取京东上所有的手机数据 2.将爬取的数据存储到MongoDB 环境 ...

  6. scrapy爬取海量数据并保存在MongoDB和MySQL数据库中

    前言 一般我们都会将数据爬取下来保存在临时文件或者控制台直接输出,但对于超大规模数据的快速读写,高并发场景的访问,用数据库管理无疑是不二之选.首先简单描述一下MySQL和MongoDB的区别:MySQ ...

  7. Python爬虫实战教程:爬取网易新闻

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: Amauri PS:如有需要Python学习资料的小伙伴可以加点击 ...

  8. 如何利用python爬取网易新闻

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: LSGOGroup PS:如有需要Python学习资料的小伙伴可以 ...

  9. Python爬虫实战教程:爬取网易新闻;爬虫精选 高手技巧

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. stars声明很多小伙伴学习Python过程中会遇到各种烦恼问题解决不了.为 ...

  10. 教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

    本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scr ...

随机推荐

  1. 通过Jenkins构建CI/CD实现全链路灰度

    简介: 本文介绍通过 Jenkins 构建流水线的方式实现全链路灰度功能. 作者:卜比   本文介绍通过 Jenkins 构建流水线的方式实现全链路灰度功能. 在发布过程中,为了整体稳定性,我们总是希 ...

  2. 全链路灰度新功能:MSE上线配置标签推送

    简介: 微服务场景下,全链路灰度作为一种低成本的新功能验证方式,得到了越来越广泛的应用.除了微服务实例和流量的灰度,微服务应用中的配置项也应该具备相应的灰度能力,以应对灰度应用对特殊配置的诉求. 为什 ...

  3. EventBridge 集成云服务实践

    ​简介:本篇文章主要向大家分享了通过 EventBridge 如何集成云产品事件源,如何集成云产品事件目标以及通过事件流如何集成消息产品. 作者:李凯(凯易) EvenBridge 集成概述 Even ...

  4. Android项目架构设计深入浅出

    ​简介:本文结合个人在架构设计上的思考和理解,介绍如何从0到1设计一个大型Android项目架构. ​ 作者 | 璞珂 来源 | 阿里技术公众号 前言:本文结合个人在架构设计上的思考和理解,介绍如何从 ...

  5. 阿里云全站加速DCDN重磅升级

    ​简介:相比传统CDN加速,全站加速DCDN具有更广阔的应用场景.在当下企业全面数字化的进程中,为了更全面地满足广大企业客户的个性化加速需求,全站加速DCDN从简单开通到个性化定制.从内容分发到安全防 ...

  6. dotnet Microsoft.Recognizers.Text 超强大的自然语言关键词提取库

    本文和大家介绍一个使用超级简单,但是功能特别强大的自然语言关键词提取库,可以根据输入的自然语言提取出里面的信息.例如我在一句话里面说了哪些数值变量或者说了手机号码等 先看看下图的一个效果,下图是尝试识 ...

  7. Ansible的yaml文件

    ansible提供的脚本,遵循规范yaml(一般用于写配置文件) 可用于配制文件的语言:yaml.xml.json - 冒号后面必须有空格 - 横线后面必须要空格 - 严格保持对齐 - 等号前面不能有 ...

  8. Haproxy+Nginx+Tomcat实现动静分离页面

    一.Haproxy概述: 二.Haproxy原理实现: 三.Nginx.LVS.Haproxy对比: 四.Haproxy配置文件讲解: 五.案例:Haproxy+Nginx+Tomcat搭建高可用集群 ...

  9. RocketMq开启安全认证ACL-解决服务器系统安全漏洞

    1.为什么要开启ACL 通过之前的文章我们已经知道怎么安装RocketMq了.如果你还不会安装RocketMq可以查看我的这篇文章:快速入门一篇搞定RocketMq-实现微服务实战落地 进行软件安装, ...

  10. MYSQL造数据占用临时表空间

    在MySQL中,临时表空间通常用于存储如ORDER BY.GROUP BY.DISTINCT.UNION.JOIN等操作中产生的临时数据.当这些操作的数据集太大而无法在内存中完成时,MySQL会使用磁 ...