一、Scrapy 简介
一个快速、高层次的屏幕抓取和web抓取的Python框架,用于抓取web站点并从页面中提取结构化的数据,可以用于数据挖掘、监测和自动化测试,可根据具体需求个性化定制。
Scrapy架构图:
架构图.png
各组件介绍
ENGINE
引擎(engine)控制所有部件间的数据流,并在某些事件发生时触发事件
Scheduler
调度器(scheduler)接收来自引擎的request,并对它去重,放入到请队列中;并根据队列的取出规则,把请求按顺序返回给引擎
Downloader
下载器(Downloader)获取网页数据并返回给引擎
Spiders
爬虫(Spiders)用来解析response,提取出Items和新的Requests
Item Pipeline
对Items进行进一步的清洗,并持久化
Downloader middlewares
下载中间件可以勾住下载器和引擎之间的数据流,并对它们做一些处理,比如:
在request送到下载器之前对它做一些处理,可以添加User_Agent,修改IP等
对response做一些处理
Spider middlewares
爬虫中间件可以勾住爬虫和引擎之间的数据流,并对它们做一些处理
二、安装scrapy
pip install scrap
当我们满怀欢喜安装的时候,发现:
Command "/usr/bin/python2 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-L1Q1wb/Twisted/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-QWsI2y-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-L1Q1wb/Twisted/
You are using pip version 8.1.2, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
神马情况,好像是告诉我们需要使用:
pip install --upgrade pip
三、创建一个scrapy项目
在开始爬取之前,我们首先要创建一个scrapy项目,在命令行输入一下命令即可创建
scrapy startproject newspider
scrapy startproject这里是固定的,注意scrapy和startproject和newspider中间是有空格的!后面的:newspider是我们创建的爬虫名字,后面我们运行的时候用得到,你需要根据你的情况创建,比如你是想爬取京东你可以这样创建:
scrapy startproject jingdong
如果你输入命令之后,出现了下面的显示:
1571735704463.jpg
恭喜你成功了,我们用pycharm打开查看
1571735959675.jpg
然后只需要再来两条命令就可以了
1571735928435.jpgcd jingdong
scrape genspider jd www.jd.com
OK,成功的建好了一只爬虫
1571735976577.jpg
下面简单的配置下setting文件
ROBOTSTXT_OBEY = True 改为False
表示不需要遵守ROBOTS协议
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8',
'Accept-Language': 'en',
}
headers的配置就在这里写
ITEM_PIPELINES = {
'jingdong.pipelines.JingdongPipeline': 300,
}
pipeline中间件,指的是jingdong根目录下,pipelines文件,JingdongPipeline类,300是优先级,值越少优先级越高
其他的配置不需要太多的更改,默认就行了
网友评论