Scrapy之"并行"爬虫
问题反馈
在使用中有任何问题,可以反馈给我,以下联系方式跟我交流
- Author: Leo
- Wechat: Leo-sunhailin
-
E-mail: 379978424@qq.com
-
开发环境
- Win10 x64
- Python 3.4.4
- Scrapy 1.4.0(目前最新版本,截至2017-11-29)
题目
示例
- 网上其实有很多参照官网给的例子跑的commands代码,但是多少都一些问题,你不信可以跑一下,很多都是能跑成功但是有报错。但是就是看着不舒服,所幸自己看着源码和官方示例写了一个。
- 其实讲回上面这点,官方也是很奇葩的,给了怎么并发爬虫,不告诉别人怎么运行,直接只是一个scrapy crawl不带参数的,实际上这样写不规范,但是那样也能跑,就是会有报错提示。这时候就要引出自定义命令了。
- 正确的写法和不会报错的写法请往下看~
- 创建一个Scrapy的项目. 对!就是一个普通项目,并没有什么特别的模板.
# 创建一个Scrapy项目 scrapy startproject multiple_spiders复制代码
-
生成的文件结构是这样的:
-
multiple_spiders
- multiple_spiders
- commands (一开始没有的,创建完项目后自行创建)
- <双下划线>init<双下划线>.py
- crawlall.py
- spiders (核心代码)
- <双下划线>init<双下划线>.py
- multiple.py
- <双下划线>init<双下划线>.py
- items.py
- middlewares.py
- pipelines.py
- settings.py
- commands (一开始没有的,创建完项目后自行创建)
- scrapy.cfg
- multiple_spiders
-
spiders/multiple.py的代码:
# -*- coding: UTF-8 -*- """ Created on 2017年11月8日 @author: Leo """
import scrapy
# 测试代码,功能是把网址的源代码保存到txt中 class MySpider1(scrapy.Spider): name = "spider-1" start_urls = ["<爬取的地址1>"]
def parse(self, response): filename = "./multiple_spiders/test-1.txt" with open(filename, 'wb') as f: f.write(response.body)
# 测试代码,功能是把网址的源代码保存到txt中 class MySpider2(scrapy.Spider): name = "spider-2" start_urls = ["<爬取的地址2>n"]
def parse(self, response): filename = "./multiple_spiders/test-2.txt" with open(filename, 'wb') as f: f.write(response.body)复制代码
-
创建commands文件夹,以及文件夹下的init.py文件
(init.py里面不用写东西) -
创建crawlall.py<名字可以自定义>
# -*- coding: utf-8 -*- """ Created on 2017年11月8日 @author: Leo """
from scrapy.commands import ScrapyCommand from scrapy.utils.project import get_project_settings from scrapy.crawler import CrawlerProcess
from multiple_spiders.spiders.multiple import MySpider1, MySpider2
class Command(ScrapyCommand): requires_project = True
def syntax(self): return '[options]'
def short_desc(self): return 'Runs all of the spiders'
def add_options(self, parser): ScrapyCommand.add_options(self, parser)
def process_options(self, args, opts): ScrapyCommand.process_options(self, args, opts)
def run(self, args, opts): settings = get_project_settings() one = MySpider1() two = MySpider2() process = CrawlerProcess(settings) process.crawl(one) process.crawl(two) process.start()复制代码
- settings.py中加一入一个代码:
COMMANDS_MODULE = 'multiple_spiders.commands'复制代码
- 最后就可以运行了
scrapy crawlall<名字和你commands文件夹的下的py文件名字对应即可>复制代码
-
至于不想同时启动两个爬虫,或者同时启动三个,或者有三个爬虫同时启动其中2个,过一段时间关闭其中一个再开启另外一个的这类需求。。动动脑子就好了。
-
最终还是去参考一下官方文档,毕竟Scrapy的文档还是比较丰富的。但有能力的可以直接去看源码,去研究启动的方式,比看文档容易理解一点。
- 具体要看哪些模块我大致提一下(CrawlProcess, CrawlerRunner, Command)
相关文章
- 开源潮涌,企业如何加速数字化转型?看红帽的三大赋能策略!
- [网络安全] 四十.WHUCTF (3)一道非常有趣的文件上传漏洞题(刀蝎剑详解)
- [网络安全] 四十一.WHUCTF (4)三道隐写基础题目(文字解密、图片解密、佛语解码)
- [网络安全] 四十二.WHUCTF (5)两道隐写和一道逆向基础题(冰蝎流量解密、动静态逆向)
- GitHub 换帅!任职三年后 Nat Friedman 宣布即将卸任
- 详解如何在数仓中管理元数据
- 强化学习AI能带你1打5吗?MIT新研究:AI并不是人类的最佳队友
- [网络安全] 四十三.强网杯CTF的Web Write-Up(上) 寻宝、赌徒、EasyWeb、pop_master
- [网络安全] 四十四.网络安全术语及Web渗透流程入门普及(1)
- [网络安全] 四十五.Windows安全基础、注册表和安全常用DOS命令(2)
- 最新最全 | 视觉 Transformer 综述
- linux shell:find命令批量删除文件夹或文件夹
- linux shell:字符串分割并反序输出
- 微软宣布推出Azure OpenAI服务 为开发者带来GPT-3机器学习模型
- 搜索算法,一触即达:GitHub上有个规模最大的开源算法库
- Kubernetes:Pod 端口映射
- 交大ACM班毕业生在Google的新工作:自动写Excel的表格公式
- 信息安全催生新型高薪数据人才
- 以AI和性能为重点英特尔更新Xe-HPG GPU
- 清华大学提出ACmix | 这才是Self-Attention与CNN正确的融合范式,性能速度全面提升