环境安装
Windows
scrapy的安装需要5个依赖库,先安装好这5个依赖库,然后在dos命令中利用pip install安装scrapy框架即可,首先要确保python的目录是添加到系统的环境变量中,否则会无法使用pip命令也进不去python目录。
- wheel库:直接在dos窗口中利用
pip install wheel
命令安装,wheel库用于安装一些wheel文件(.whl,Python的一种打包格式,包含PEP 376兼容安装(一种非常接近于磁盘上的格式)的所有文件),以便在后续的依赖库安装; - lxml库:一个解析HTML文件的库,可以读取HTML标签解析HTML文档,方便在后续爬取过程中对requests库获取的HTML文档进行解析,支持Xpath解析方式。lxml库的下载链接
https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
,下载对应的python和系统版本之后在dos命令中利用pip install + 文件目录
(下载文件右键属性进入“安全”复制对象名称)的形式安装即可。 - PyOpenssl库:是封装了openssl的python模块,方便使用一些加密解密操作解析数字证书,在python中使用该模块来获取数字证书中的有用信息,PyOpenssl库的下载链接
https://pypi.org/project/pyOpenSSL/#files
(Downloads File中对应的whl文件),同lxml库的安装方式; - Twisted库:是一个网络异步框架,其中一个功能就是发送异步请求并检测IO自动切换,是scrapy核心框架的基础框架。Twisted库下载链接https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted,下载对应python(cp36)和系统版本(win64),安装方式同lxml库,因为这三个库都是whl文件;
- Pywin32库:提供了很多访问Windows的API,python和win32在运行过程中兼容的一个库。Pywin32库(我下载的是Build 220)的下载链接
https://sourceforge.net/projects/pywin32/files/pywin32/
,自己选择合适版本下载后直接点击该exe文件运行安装; - Scrapy库:在上述依赖库都安装完成之后,直接利用
pip install scrapy
命令安装scrapy爬虫框架即可,如此就完成了Windows下的python中scrapy安装。
Anaconda
安装最为简单,进入dos窗口,可以用conda查看自己的Anaconda版本以及利用conda list
查看已安装的一些库,直接使用conda install scrapy
提示需要安装的依赖库,直接yes等待安装完成即可。
dos命令新建项目
安装好环境之后我们就可以创建项目啦。
- 指定文件目录,然后利用命令
scrapy startproject News(工程名)
,即创建一个名为News的项目,进入该目录可以看到其中生成的基础文件即为items、pipeline、middleware和settings文件,另外还有一个spiders文件夹,其中需要生成我们爬取的主要实现代码文件; - 在项目目录下,利用命令
scrapy genspider newscraped(爬虫文件名) news.163.com/rank/ (目标网址)
生成一个爬虫文件,命名为newscraped的文件,主要的代码实现----新闻的html文档的爬取和新闻有效信息的提取等都是在这个文件中。
网易新闻爬取实战
基于之前分析过的新浪新闻和搜狐新闻,爬取内容包含标题、正文、类别、来源和相关新闻,另外还有评论部分的爬取存在一定难度未实现,这里我选择同样在正文中上述内容容易实现爬取的网易新闻排行榜,主页链接是https://news.163.com/rank/。接下来就是对网页中的信息进行分析。
目标站点分析
- 分析主页面:我们需要抓取所有的新闻url,然后在scrapy中利用自身回调函数实现对每个新闻的抓取和提取;
- 目标内容:找到所有url所在的class标签,方便利用css选择器或是xpath进行解析提取,我们在主页中需要的就是url,可以发现其所在的class标签是red或者gray,那在解析的时候只需要锁定这个类标签即可;
附:提取目标内容的标签,一定要查看在源码页面的“网络”中找到主要的ResponseHTML文档,并根据相应的标签确保在响应的HTML中有对应的目标内容,否则利用正则或是css选择器提取得到的内容都是空的。
实现部分
基本文件
我们在dos窗口中创建项目和爬虫的时候,相应地生成了有items、pipeline、middleware、settings和cfg等基本文件,可以在用Pycharm打开查看每个文件的具体代码。
- items.py:保存爬取数据的数据结构,比如标题、正文、来源和类别等变量的声明,这样在最后生成的item中会以字典形式呈现;
- middlewares.py:爬取过程中定义的中间件以及用来处理request、response和exception等操作,基本不需要改动;
- settings.py:定义配置信息和变量,其中我们需要打开pipeline中定义的管道,以及可以设置管道执行的优先级,另外有个ROBOTSTXT_OBEY在后续出现爬取失败的原因分析时可能是该协议的限制;
- pipeline.py:用来输出items,这里我们主要用于建立和MySQL的连接管道,实现item到数据库的存储;
- 爬虫文件:在dos界面生成的spider文件,抓取和解析代码的实现都在这个文件中。
爬虫
- 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