写在前面的话: 最近重新学了一下scrapy框架,之前没学好,现在总结一下…以便以后重装不需要重新找资料
一. 安装
需要三个库 lxml, twist, pywin32 一般前两个都有
- pip install pypiwin32 (有whl文件)
如果有问题输入下面这句
- pip install -I cryptography
二. 文件类型
1. items.py
存放数据模型
三个方法最常用
open_spider(self, spider):
爬虫打开的时候执行process_item(self, item, spider):
当爬虫有item传过来的时候会被调用close_spider(self, spider):
爬虫关闭的时候执行
注意激活pipline,在 setting.py
中设置
2. middlewares.py
存放各种中间件的文件
3. pipelines.py
存储
4. setting.py
配置信息
- ROBOTSTXT_OBEY = False 肯定不服从呗
- headers 添加 User-Agent
- ITEM_PIPLINES
三. 流程
- scrapy startproject name 开始一个项目
- cd name 切换到项目文件夹
- scrapy genspider filename “域名”
response 是一个 HTMLResponse
对象,可以用 xpath
提取数据,提取出来需要用 get()
或 getall()
获取用 yield
返回,或者用 列表存储
再返回
四. 返回对象
1. JsonItemExporter
每次把数据添加到内存中,最后统一写到磁盘里。最后存储的是一个列表,满足json规则,可以直接转换为DataFrame类型进行数据分析,便于操作。劣势在于数据量越大,内存消耗越严重。
2. JsonLinesItemExporter
每次调用 export_item()
时存储item到硬盘,优势在于处理数据直接存储到硬盘,不占用内存,数据也较安全。劣势在于每个字典是一行,文件不满足json规则。
五. CrawlSpider
命令:scrapy startproject -t crawl name
需要使用 Rule
和 LinkExtracter
。决定爬虫的根本设置
- allow:设置规则的方法,限制想要的url, 用正则表达
- follow:爬取当前页面,满足allow,且设置为True则继续爬取, 否则设置为False
- callback:url对应页面知识为了获取更多url,并不需要具体数据
from scrapy.spiders import CrawlSpider
继承的是 CrawlSpider
这个类
可以方便的爬取正则规定的url。