简单的scrapy命令和中间件

创建爬虫
scrapy genspider 名字 xxx.com
运行爬虫
运行名为usnews的爬虫
scrapy crawl usnews

运行爬虫文件
scrapy runspider quote_spider.py

保存到json文件里
scrapy runspider quote_spider.py -o quotes.json

保存成csv文件
scrapy runspider quote_spider.py -o quotes.csv -t csv
调试爬虫
进入scrapy控制台,使用的是项目环境
scrapy shell

带一个url,将自动请求这个url,并在请求成功后进入控制台
scrapy shell http://xxx.com
进入到控制台以后可以使用一下函数(常用命令)
fetch(): 请求url或者Response对象
注意:请求成功以后会自动将当前作用域内的request和response对象重新赋值

view(): 用浏览器打开response对象的网页

shelp(): 打印出帮助信息

spider(): 相应的Spider类的实例

settings: 保存所有配置信息的Settings对象

crawler: 当前Crawler对象

中间件

process_request
在response对象传往downloader的过程中被调用。当返回不同类型的值的时候,行为也不一样。

返回值:None
行为:一切正常,继续执行其他中间件链

返回值:Response
行为:停止调用其他process_request和process_exception函数,也不再继续下载该请求,然后执行调用process_response的流程

返回值:Request
行为:不再继续调用其他process_request函数,交给调度器重新安排下载

返回值:IgnoreRequest
行为:process_exception函数被调用,如果没有此方法,则request.errback会被调用,如果errback也没有,则此异常会被忽略,甚至连日志都没有
process_response
在将下载结果返回给engine过程中

返回值:Response
行为:继续调用其他中间件的process_response

返回值:Request
行为:不再继续调用其他process_request函数,交给调度器重新安排下载

返回值:IgnoreRequest
行为:request.errback会被调用,如果errback也没有,则此异常会被忽略,甚至连日志都没有
process_exception
在下载过程中出现异常(DNS,timeout,网络连接不上等异常),或者在process_request中抛出IgnoreRequest异常的时候调用

返回值:None
行为:

返回值:Response
行为:继续调用其他中间件的process_response

返回值:Request
行为:不再继续调用其他process_request函数,交给调度器重新安排下载
from_crawler(cls, crawler)
如果存在该函数,则调用该函数创建中间件的实例。
如果要写这个函数,一定要返回一个中间件的对象。
这个函数作用:传递信号或者读取配置

 

 

 

猜你喜欢

转载自www.cnblogs.com/kenD/p/12243841.html