前言
由于工作需要,学习一下爬虫框架,在网上看了别人的笔记和教学视频,想总结一下便于以后复习用,然后和大家分享一下。
我的总结大概分为四步:
scrapy的整体架构
使用Scrapy框架的一个完整流程
1、先从spiders发送一个请求,请求不会马上发送出去
2、发送给scheduler调度器,调度器把url生成一个request对象,存储到队列当中
3、engine引擎不断从调度器中取请求,拿到这个请求
4、将请求发送给Downloader下载器,下载器把数据下载下来,把数据返回给引擎
5、数据返回给spiders,进行一系列分析,提取出想要的数据,再把数据发送给引擎
6、引擎把数据发送给pipelines
在引擎和scheduler、引擎和Downloader之间可以使用中间件,可以在发送过程中间做一些操作。
关于中间件的详解后台回复scrapy中间件,可以获取。
Scrapy框架的安装
这里是在Windows下的安装:
需要安装4个依赖库分别是
pip3 install lxml 若没有报错,则安装成功,如果报错提示缺少libxml2 库,可以使用wheel文件进行安装 libxml2
libxml2 https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
需要在官网下载wheel文件 pyOpenssL
pyOpenssL https://pypi.org/project/pyOpenSSL/#files
下载后使用
pip3 install pyOpenSSL-17.2.0-py2.py3-none-any.whl
安装即可
同理,需要在官网下载wheel文件 Twisted,但是有一件事,一定要记得在控制台下输入python,查看你的电脑版本和python版本,然后在上面的地址中下载对应的wheel文件
Twisted https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
然后使用命令安装
pip3 install Twisted-17.5.0-cp36-cp36m-win_amd64.whl
在官网下载对应版本的安装包双击安装即可
pywin32 https://sourceforge.net/projects/pywin32/files/
在依赖包全部安装成功前提下安装Scrapy框架,使用pip命令
pip3 install Scrapy
使用Scrapy实现爬虫
创建scrapy命令:
创建项目:scrapy startproject xxx 进入项目:cd xxx #进入某个文件夹下 创建爬虫:scrapy genspider xxx(爬虫名) xxx.com (爬取域) 生成文件:scrapy crawl xxx -o xxx.json (生成某种类型的文件) 运行爬虫:scrapy crawl XXX 列出所有爬虫:scrapy list 获得配置信息:scrapy settings [options]
spiders:项目中的爬虫放在里边
items.py:所有爬取数据的模型,这样就不使用字典模型了,比如爬取的数据包括 作者、时间、内容,所有这些东西可以记录在这里。
middlewares:爬虫中间件
pipelines:用来处理爬取下来的数据的
setting.py:设置配置的,比如可以设置请求头,是否开启cookie,下载之前是否延迟等等。
scrapy.cfg: 项目的配置文件
容器(items)的定义,容器不一定是一开始全部都定义好的,可以跟随项目的更新一点点向里面添加。
一个入门爬虫栗子:
import scrapy
class DmozSpider(scrapy.Spider): # 继承Spider类
name = "dmoz" # 爬虫的唯一标识,不能重复,启动爬虫的时候要用
allowed_domains = ["dmoz.org"] # 限定域名,只爬取该域名下的网页
start_urls = [ # 开始爬取的链接
"https://www.baidu.com/"
]
def parse(self, response):
filename = response.url.split("/")[-2] # 获取url,用”/”分段,获去倒数第二个字段
with open(filename, 'a') as f:
f.write(response.body) # 把访问的得到的网页源码写入文件
代码中的parse方法有这么两个作用: 1.负责解析start_url下载的Response 对象,根据item提取数据(解析item数据的前提是parse里全部requests请求都被加入了爬取队列)。 2.如果有新的url则加入爬取队列,负责进一步处理,URL的Request 对象。