PySpider 怎样爬一个已知的、不断生成的 URL 列表?

2016-08-31 03:38:40 +08:00
 PythonAnswer

情形:

现有一个固定格式的、大约 700w 条数据的 URL ,如 "http://example/item/%d" % (i)

我不想生成一个这么大的列表。最科学的方法应该是弄成一个生成器,生成 1000 个 url , yield 出来,再生成 1000 个...直到一直把活干完。

不知道 PySpider 怎样重写这个 url 。查看文档和源码,发现是用 BaseHandler 的 crawl 方法,读取一个 url 列表。

我现在想实现:

不知有没有老大有经验?

def urls(self):
    i=1
    while i<7000000:
        yield "http://example/item/%d" % (i)
        i += 1

@every(minutes=24 * 60)
def on_start(self):
    self.crawl(self.urls(), callback=self.index_page)
3726 次点击
所在节点    Python
6 条回复
binux
2016-08-31 06:23:11 +08:00
```
def on_start(self):
for i in range(10000):
self.crawl('data:,step%d' % i, callback=self.gen_url, save=i)

@config(priority=0)
def gen_url(self, respond):
for i in range(respond.save * 700, (respond.save + 1) * 700):
self.crawl("http://example/item/%d" % i, callback=self.parse_page)

@config(priority=1)
def parse_page(self, respond):
pass
```
PythonAnswer
2016-08-31 08:08:58 +08:00
@binux 好巧妙,有这个 save 参数。多谢!!

另请教老大一下,如果是个不断增长的 url 怎么办呢?现在 700w ,但是每天都在不断增长,我怎么追踪才好?

提前致谢
binux
2016-08-31 08:29:38 +08:00
@PythonAnswer 接着 self.crawl 提交就好了啊
PythonAnswer
2016-08-31 09:18:02 +08:00
多谢,我继续研究一下吧。认真看源码,发掘各种功能。

非常好用的软件~
figofuture
2016-08-31 09:53:43 +08:00
mark
ddzzhen
2018-12-29 09:55:50 +08:00
mark 很好的使用方法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/302813

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX