Scrapy爬虫框架抓取网易新闻

本文介绍了如何在Windows环境下通过Anaconda或直接使用pip安装Scrapy爬虫框架。接着展示了如何创建Scrapy项目和爬虫文件,以抓取网易新闻排行榜的新闻标题、正文、类别和来源等信息。文章详细阐述了目标站点分析、中间件、设置文件、爬虫实现和数据存储到MySQL数据库的过程。
摘要由CSDN通过智能技术生成

@scrapy

环境安装

Windows

scrapy的安装需要5个依赖库,先安装好这5个依赖库,然后在dos命令中利用pip install安装scrapy框架即可,首先要确保python的目录是添加到系统的环境变量中,否则会无法使用pip命令也进不去python目录。

  1. wheel库:直接在dos窗口中利用pip install wheel命令安装,wheel库用于安装一些wheel文件(.whl,Python的一种打包格式,包含PEP 376兼容安装(一种非常接近于磁盘上的格式)的所有文件),以便在后续的依赖库安装;
  2. lxml库:一个解析HTML文件的库,可以读取HTML标签解析HTML文档,方便在后续爬取过程中对requests库获取的HTML文档进行解析,支持Xpath解析方式。lxml库的下载链接https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml,下载对应的python和系统版本之后在dos命令中利用pip install + 文件目录(下载文件右键属性进入“安全”复制对象名称)的形式安装即可。
  3. PyOpenssl库:是封装了openssl的python模块,方便使用一些加密解密操作解析数字证书,在python中使用该模块来获取数字证书中的有用信息,PyOpenssl库的下载链接https://pypi.org/project/pyOpenSSL/#files(Downloads File中对应的whl文件),同lxml库的安装方式;
  4. Twisted库:是一个网络异步框架,其中一个功能就是发送异步请求并检测IO自动切换,是scrapy核心框架的基础框架。Twisted库下载链接https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted,下载对应python(cp36)和系统版本(win64),安装方式同lxml库,因为这三个库都是whl文件;
  5. Pywin32库:提供了很多访问Windows的API,python和win32在运行过程中兼容的一个库。Pywin32库(我下载的是Build 220)的下载链接https://sourceforge.net/projects/pywin32/files/pywin32/,自己选择合适版本下载后直接点击该exe文件运行安装;
  6. Scrapy库:在上述依赖库都安装完成之后,直接利用pip install scrapy命令安装scrapy爬虫框架即可,如此就完成了Windows下的python中scrapy安装。

Anaconda

安装最为简单,进入dos窗口,可以用conda查看自己的Anaconda版本以及利用conda list查看已安装的一些库,直接使用conda install scrapy提示需要安装的依赖库,直接yes等待安装完成即可。

dos命令新建项目

安装好环境之后我们就可以创建项目啦。

  1. 指定文件目录,然后利用命令scrapy startproject News(工程名),即创建一个名为News的项目,进入该目录可以看到其中生成的基础文件即为items、pipeline、middleware和settings文件,另外还有一个spiders文件夹,其中需要生成我们爬取的主要实现代码文件;
  2. 在项目目录下,利用命令scrapy genspider newscraped(爬虫文件名) news.163.com/rank/ (目标网址)生成一个爬虫文件,命名为newscraped的文件,主要的代码实现----新闻的html文档的爬取和新闻有效信息的提取等都是在这个文件中。

网易新闻爬取实战

基于之前分析过的新浪新闻和搜狐新闻,爬取内容包含标题、正文、类别、来源和相关新闻,另外还有评论部分的爬取存在一定难度未实现,这里我选择同样在正文中上述内容容易实现爬取的网易新闻排行榜,主页链接是https://news.163.com/rank/。接下来就是对网页中的信息进行分析。

目标站点分析

  1. 分析主页面:我们需要抓取所有的新闻url,然后在scrapy中利用自身回调函数实现对每个新闻的抓取和提取;
    主页可利用选择器进行查找对应的标签位置
  2. 目标内容:找到所有url所在的class标签,方便利用css选择器或是xpath进行解析提取,我们在主页中需要的就是url,可以发现其所在的class标签是red或者gray,那在解析的时候只需要锁定这个类标签即可;
    分析其中需要的内容只有url
    附:提取目标内容的标签,一定要查看在源码页面的“网络”中找到主要的ResponseHTML文档,并根据相应的标签确保在响应的HTML中有对应的目标内容,否则利用正则或是css选择器提取得到的内容都是空的。

实现部分

基本文件

我们在dos窗口中创建项目和爬虫的时候,相应地生成了有items、pipeline、middleware、settings和cfg等基本文件,可以在用Pycharm打开查看每个文件的具体代码。

  1. items.py:保存爬取数据的数据结构,比如标题、正文、来源和类别等变量的声明,这样在最后生成的item中会以字典形式呈现;
  2. middlewares.py:爬取过程中定义的中间件以及用来处理request、response和exception等操作,基本不需要改动;
  3. settings.py:定义配置信息和变量,其中我们需要打开pipeline中定义的管道,以及可以设置管道执行的优先级,另外有个ROBOTSTXT_OBEY在后续出现爬取失败的原因分析时可能是该协议的限制;
  4. pipeline.py:用来输出items,这里我们主要用于建立和MySQL的连接管道,实现item到数据库的存储;
  5. 爬虫文件:在dos界面生成的spider文件,抓取和解析代码的实现都在这个文件中。

爬虫

  1. item文件中的item结构设置,使用给定的声明方式name=scrapy.Field()声明我们最后需要生成的item中的结构,如新闻标题、正文、类别、来源和相关新闻的url等,因为在每个新闻的源码返回的Response中没有评论部分的内容,所以这里虽然设置了评论内容的item部分,但是爬取的结果中都是为空的。
# define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    content = scrapy
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值