管道性能不佳

我目前正在将Scrapy用于个人项目,但在性能方面很挣扎。

当我不使用管道时,我的4个模拟爬网程序可以在30秒内爬网600页。

我已经实现了一个自定义管道来处理每个页面中的脚本,并将它们与5000个url列表进行比较,以检查该url是否存在于脚本代码中。

问题在于,这使我的爬网运行了110秒,而不是在不使用管道时运行了30秒。

我想知道如何优化代码,因为对于每个页面,我都会检查所有脚本中的每个链接。

下面是它的外观:

我们可以运行多线程以加快循环速度吗?

spider类中的解析函数:

innerRef

管道中的处理项目功能

Arrow
imagin_0707 回答:管道性能不佳

尽量避免太多for循环。

例如:

  1. __init__的管道self.script_groups方法中创建正则表达式对象:
    self.url_re = re.compile(
        '(?:{})'.format(
            '|'.join(
                re.escape(url)
                for url in group['urls']
                for group in self.script_groups
            )
        )
    )
  1. 使用它:
    for script in scripts:
        if self.url_re.search(script):
            print("url found,script_group is being used")
            break
本文链接:https://www.f2er.com/3160338.html

大家都在问