Scrapy
Install
command: `pip install [name]`
lib:
lxml
解析库
pyOpenSSL
SSL协议库
Twisted
异步Web框架
main:
Scrapy
框架
Use
command:
创建项目
scrapy startproject [name]
编辑项目后, 启动爬虫脚本
scrapy crawl [scriptname]
结构分析:
在scrapy框架中.
执行新项目指令之后.例如: scrapy crawl newgrasp
会生成如下目录
└── newgrasp
├── newgrasp
│ ├── __init__.py
│ ├── items.py
│ ├── middlewares.py
│ ├── pipelines.py
│ ├── __pycache__
│ ├── settings.py
│ └── spiders
│ ├── __init__.py
│ └── __pycache__
└── scrapy.cfg
生成了一个项目名的根目录 newgrasp
一级目录下:
newgrasp
用来放置项目中各种重要组成部分, 以及爬虫文件.
scrapy.cfg
项目的设置文件, 主要确定
项目名
和项目设置文件
内容也很简单.
[settings]
default = newgrasp.settings
[deploy]
project = newgrasp
二级目录下(重点)
二级目录的newgrasp
中. 包含了scrapy最重要的处理流程.
items.py
用来放置抓取的内容, 一般是资源对应的url例如:
xxx.xxx.xxx.jpg
; 获得url之后,放入对应的ItemModel.后面框架会自动交给pipeline处理.
middlewares.py
在获取response响应的时候, 请求和返回的时候都要经过中间件.
pipelines.py
pipeline是用来处理item的, 能够将item保存的url直接交给scrapy的DOWNLOADER
组件,自动去下载对应资源.需要注意的是,其实response也是由该组件进行请求下载.同资源一样也有相对应的队列和pipeline, 唯一不同的是, 没有经过item.
settings.py
对scrapy进行一些设置调配.例如下载并行数, 下载目录设置等.
spiders
完成爬虫的逻辑,在scrapy中, 我们在其他模块中完成了请求, 和保存的动作. 在spider中, 唯一需要做的逻辑就是在Spider中设置开始抓取的页面,然后parse
方法, 找到相对应的页面元素,放入对应的item中的field中. 在获取元素方面, 直接使用xpath找到元素, 放入item中即可. 如果当需要爬取的网页为多级页面, 则需要针对不同的页面创建对应parse_x
方法. 在使用parse
分析一级页面, 然后使用Scrapy.Request
(需另导入),callback参数中调用子分析方法, 分析子页面. 仍有其他子页面或者分类的话, 就进行判断然后callback对应的parse函数.
需要导入
from scrapy import Request # 用来形成yield生成器, 接入pipeline, 并且调用对应的parse,形成多级抓取
from grasp.items import ImageItem # 导入对应的Item, 才能把需要获取的资源元素url放入在pipeline设置好的对应字段中.
调试
在使用scrapy的时候, 有的时候感觉命令行调用并不是很方便. 这个时候可以导入scrapy中内置的包, 直接再控制台运行该爬虫脚本
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
......
......
if __name__ == '__main__':
process = CrawlerProcess(get_project_settings())
process.crawl(对应的Scriper类)
process.start()