我想爬一个网站,大概10亿数据, url 是 http://xxx.com/id=xx 访问并提取其中的数据,存入数据库
其中url中的id参数 是可预测的, 是从 0-1000000000
所以我直接可以生成这10亿个网址
for i in range(0,1000000000):
yield Request(f"http://xxx.com/id={i}", self.parse)
但是只能在一台机器上运行,效率太低了
我打算接入 scrapy-redis,但我有几点疑问如下:
当我接入scrapy-redis,并打算用20台机器的情况下:
1.Master和Slaver是不是各司其职,Master负责生成网址放在redis,Slaver负责从redis取回网址并消费?如果不是,那么请问它是怎么一回事?
2.因为抓取结果我要存入数据库,那么是不是每台Slaver都要连接数据库?能不能让Slaver自己把数据存入数据库,因为我感觉如果把数据传回Master,让Master入库会浪费很多时间和流量
3.根据我目前在网上看到的文章,似乎并没有严格区分Master和Slaver,大家都是各做各的,只是每次做之前去redis问问,有没有别人做了这个id,但是这样会浪费很多时间去重, scrapy-redis难道不支持 我的问题1 各司其职 的功能吗
暂时就这3个问题, 谢谢
我来说下自己的看法,仅供参考: