- Scrapyrt:为Scrapy提供了一个调度的HTTP接口,有了它就不需要再执行Scrapy命令,而是通过请求一个HTTP接口即可调度Scrapy任务
pip install scrapyrt # 安装 scrapyrt # 在任意一个Scrapy项目运行如下命令即可启动HTTP服务 scrapyrt -p 9081 # 更换运行端口
- 新建Scrapy项目,在项目目录下运行Scrapyrt,假设当前服务运行在9080端口上
- GET请求
- spider_name:Spider名称,字符串类型,必传参数;如果传递的Spider名称不存在,则返回404错误
- url:爬取链接,字符串类型,如果起始链接没有定义就必须要传递这个参数;如果传递了该参数,Scrapy会直接用该URL生成Request,而直接忽略start_requests()方法和start_urls属性的定义
- callback:回调函数名称,字符串类型,可选参数;如果传递了就会使用此回调函数处理,否则会默认使用Spider内定义的回调函数
- max_requests:最大请求数量,数值类型,可选参数。它定义了Scrapy执行请求的Request的最大限制,如定义为5,则表示最多只执行5次Request请求,其余的则会被忽略
- start_requests:代表是否要执行start_requests方法,布尔类型,可选参数;Scrapy项目中如果定义了start_requests()方法,那么项目启动时会默认调用该方法;但是在Scrapyrt中就不一样了,Scrapyrt默认不执行start_requests()方法,如果要执行,需要将start_requests参数设置为true
- 执行如下命令或者直接使用浏览器访问
curl http://localhost:9080/crawl.json?spider_name=quotes&url=http://quotes.toscrape.com/
- POST请求
- spider_name:Spider名称,字符串类型,必传参数;如果传递的Spider名称不存在,则返回404错误
- max_requests:最大请求数量,数值类型,可选参数;它定义了Scrapy执行请求的Request的最大限制,如定义为5,则表示最多只执行5次Request请求,其余的则会被忽略
- request:Request配置,JSON对象,必传参数;通过该参数可以定义Request的各个参数,必须指定url字段来指定爬取链接,其他字段可选
curl http://localhost:9080/crawl.json -d '{"request": {"url": "http://quotes.toscrape.com/", "dont_filter": "True", "callback": "parse", "cookies": {"foo": "bar"}}, "max_requests": 2, "spider_name": "quotes"}'
- 浏览器打不开网址,报错:builtins.AttributeError: 'int' object has no attribute 'splitlines'
- 解决方法:版本回退
pip install Twisted==18.9.0 # 需要通过安装whl文件进行安装 pip install redis==3.0.1 pip install Scrapy==1.6.0