xianhu / PSpider

简单易用的Python爬虫框架,QQ交流群:597510560
https://github.com/xianhu/PSpider
BSD 2-Clause "Simplified" License
1.83k stars 504 forks source link

不太理解 set_start_url 中的 keys 与 deep 的作用 #12

Closed Jay54520 closed 7 years ago

Jay54520 commented 7 years ago

def set_start_url(self, url, keys=None, priority=0, deep=0) url 为 fetch 的目标 priority 用于 priorityQueue,从 queue 取出的优先级

那么 keys, deep 的作用分别是什么? deep 是 fetch url 的深度吗?如何与 self._max_deep = max_deep # default: 0, if -1, spider will not stop until all urls are fetched 一起起作用的?是如何实现 deep 的逻辑的?

keys 在 抓取豆瓣 中,通过 keys[0] 来区分抓取的是索引页面还是电影详情页

xianhu commented 7 years ago

deep是指当前你传入的页面的深度。默认为0。因为在解析的时候,你同时传入了一个max_deep,也就是说,如果当前页面的deep等于max_deep了,那么该页面就不会再去解析新的URL了。

keys的作用你理解对了,就是为了区分一些页面类型。当然这只是其中一种作用。有时候也可以用于在不同页面之间传递数据。比如你解析一个APP的列表页,每一项包含一个APP,但是当你进入APP详情页之后,有些APP的属性就不再显示,这时候就需要从列表页传递该属性过来。

Jay54520 commented 7 years ago

这样的话keys的类型由 tuple 改为 dict更合适吧。dict key 说明参数目的 在2017年02月27日 10:12,xianhu 写道:

deep是指当前你传入的页面的深度。默认为0。因为在解析的时候,你同时传入了一个max_deep,也就是说,如果当前页面的deep等于max_deep了,那么该页面就不会再去解析新的URL了。

keys的作用你理解对了,就是为了区分一些页面类型。当然这只是其中一种作用。有时候也可以用于在不同页面之间传递数据。比如你解析一个APP的列表页,每一项包含一个APP,但是当你进入APP详情页之后,有些APP的属性就不再显示,这时候就需要从列表页传递该属性过来。

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

xianhu commented 7 years ago

都可以,但我觉得tuple更省内存