- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在构建一个 scrapy 项目,其中我有多个蜘蛛(每个域一个蜘蛛)。现在,要抓取的 url 动态地来自用户给定的查询。所以基本上我不需要做广泛的爬行,甚至不需要跟踪链接。会有一个接一个的 url,我只需要使用选择器提取。所以我在想,如果我可以将 URL 传递到 scrapy 蜘蛛可以从中使用的消息队列,我会没事的。但我无法弄清楚。我检查过
https://github.com/darkrho/scrapy-redis
但我觉得它不适合我的目的,因为我需要多个队列(每个蜘蛛一个队列)。正如我所了解的那样,一种方法似乎是覆盖蜘蛛中的 start_requests 方法。但是在这里我又不清楚该怎么做(python 和 scrapy 的新手)。我可以将其视为任何普通的 python 脚本并覆盖该方法以使用(任何)消息队列吗?此外,我需要 spider(s) 运行 24*7 并在队列中有请求时抓取。我想我应该使用信号并在某处引发 DontCloseSpider 异常。但是我该在哪里做呢?我很迷路。请帮忙。
这是我正在查看的场景:
User-> Query -> url from abc.com -> abc-spider
-> url from xyz.com -> xyz-spider
-> url from ghi.com -> ghi-spider
现在每个网址都有相同的东西要为每个网站抓取。所以我让选择器在每个蜘蛛中这样做。我需要的是,这只是一个单一的用户场景。当有多个用户时,会有多个不相关的 url 进入同一个蜘蛛。所以它会是这样的:
查询1,查询2,查询3
abc.com -> url_abc1,url_abc2,url_abc3
xyz.com -> url_xyz1、url_xyz2、url_xyz3
ghi.com -> url_ghi1、url_ghi2、url_ghi3
因此,对于每个网站,这些 URL 将动态出现,并将被推送到各自的消息队列中。现在每个针对该网站的蜘蛛都必须使用各自的队列,并在消息队列上有请求时将抓取的项目给我
最佳答案
这是将 scrapy 构建为数据管道一部分的非常常见且(IMO)极好的方法;我一直这样做。
你想覆盖蜘蛛的 start_requests()
方法是正确的。如果您定义了 start_requests() 以及 start_urls 变量,我不知道 scrapy 的行为如何,但如果您从动态源(如数据库)消费,我建议您只使用 start_requests()。
一些示例代码,未经测试,但应该会给你正确的想法。如果你需要更多信息,请告诉我。它还假定您的队列由另一个进程填充。
class ProfileSpider( scrapy.Spider ):
name = 'myspider'
def start_requests( self ):
while( True ):
yield self.make_requests_from_url(
self._pop_queue()
)
def _pop_queue( self ):
while( True ):
yield self.queue.read()
这会将您的队列公开为生成器。如果你想最小化空循环的数量(因为队列可能很多时候是空的),你可以在 _pop_queue 循环中添加一个 sleep 命令或指数退避。 (如果队列为空,则休眠几秒钟,然后再次尝试弹出。)
假设您的代码中没有发生 fatal error ,我相信这不应该因为循环/生成器的构造而终止。
关于python - 我怎样才能使 start_url 在 scrapy 中从消息队列中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25966941/
我需要将文本放在 中在一个 Div 中,在另一个 Div 中,在另一个 Div 中。所以这是它的样子: #document Change PIN
奇怪的事情发生了。 我有一个基本的 html 代码。 html,头部, body 。(因为我收到了一些反对票,这里是完整的代码) 这是我的CSS: html { backgroun
我正在尝试将 Assets 中的一组图像加载到 UICollectionview 中存在的 ImageView 中,但每当我运行应用程序时它都会显示错误。而且也没有显示图像。 我在ViewDidLoa
我需要根据带参数的 perl 脚本的输出更改一些环境变量。在 tcsh 中,我可以使用别名命令来评估 perl 脚本的输出。 tcsh: alias setsdk 'eval `/localhome/
我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!”来自右上方的以下 Ra
这是我的方法 void login(Event event);我想知道 Kotlin 中应该如何 最佳答案 在 Kotlin 中通配符运算符是 * 。它指示编译器它是未知的,但一旦知道,就不会有其他类
看下面的代码 for story in book if story.title.length < 140 - var story
我正在尝试用 C 语言学习字符串处理。我写了一个程序,它存储了一些音乐轨道,并帮助用户检查他/她想到的歌曲是否存在于存储的轨道中。这是通过要求用户输入一串字符来完成的。然后程序使用 strstr()
我正在学习 sscanf 并遇到如下格式字符串: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); 我理解 %[^:] 部分意味着扫描直到遇到 ':' 并将其分配给 a。:
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
我有一种情况,我想将文本文件中的现有行包含到一个新 block 中。 line 1 line 2 line in block line 3 line 4 应该变成 line 1 line 2 line
我有一个新项目,我正在尝试设置 Django 调试工具栏。首先,我尝试了快速设置,它只涉及将 'debug_toolbar' 添加到我的已安装应用程序列表中。有了这个,当我转到我的根 URL 时,调试
在 Matlab 中,如果我有一个函数 f,例如签名是 f(a,b,c),我可以创建一个只有一个变量 b 的函数,它将使用固定的 a=a1 和 c=c1 调用 f: g = @(b) f(a1, b,
我不明白为什么 ForEach 中的元素之间有多余的垂直间距在 VStack 里面在 ScrollView 里面使用 GeometryReader 时渲染自定义水平分隔线。 Scrol
我想知道,是否有关于何时使用 session 和 cookie 的指南或最佳实践? 什么应该和什么不应该存储在其中?谢谢! 最佳答案 这些文档很好地了解了 session cookie 的安全问题以及
我在 scipy/numpy 中有一个 Nx3 矩阵,我想用它制作一个 3 维条形图,其中 X 轴和 Y 轴由矩阵的第一列和第二列的值、高度确定每个条形的 是矩阵中的第三列,条形的数量由 N 确定。
假设我用两种不同的方式初始化信号量 sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) 现在, sem_wait(&randomsem) 在这两种情况下
我怀疑该值如何存储在“WORD”中,因为 PStr 包含实际输出。? 既然Pstr中存储的是小写到大写的字母,那么在printf中如何将其给出为“WORD”。有人可以吗?解释一下? #include
我有一个 3x3 数组: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; 并想获得它的第一个 2
我意识到您可以使用如下方式轻松检查焦点: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(win
我是一名优秀的程序员,十分优秀!