Scrapy - 如何识别已经刮过的网址

Avi*_*ash 14 python web-crawler scrapy

我每天都使用scrapy来抓取新闻网站.我如何限制scrapy刮掉已经删除的URL.还有任何明确的文档或示例SgmlLinkExtractor.

Jam*_*a22 13

实际上,您可以使用此处的scrapy片段轻松完成此操作:http://snipplr.com/view/67018/middleware-to-avoid-revisiting-already-visited-items/

要使用它,请复制链接中的代码并将其放入scrapy项目中的某个文件中.要引用它,请在settings.py中添加一行以引用它:

SPIDER_MIDDLEWARES = { 'project.middlewares.ignore.IgnoreVisitedItems': 560 }
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关您选择号码的具体信息:http://doc.scrapy.org/en/latest/topics/downloader-middleware.html

最后,您需要修改items.py,以便每个项目类都包含以下字段:

visit_id = Field()
visit_status = Field()
Run Code Online (Sandbox Code Playgroud)

我认为就是这样.下次运行蜘蛛时,应该自动尝试开始避开相同的站点.

祝好运!


Sri*_*aju 1

这很简单。在 python dict 中维护所有以前爬取的 url。因此,当您下次尝试尝试它们时,请查看该 url 是否存在于字典中。否则爬行。

def load_urls(prev_urls):
    prev = dict()
    for url in prev_urls:
        prev[url] = True
    return prev

def fresh_crawl(prev_urls, new_urls):
    for url in new_urls:
        if url not in prev_urls:
            crawl(url)
    return

def main():
    purls = load_urls(prev_urls)
    fresh_crawl(purls, nurls)
    return
Run Code Online (Sandbox Code Playgroud)

上面的代码是在 SO 文本编辑器(又名浏览器)中输入的。可能有语法错误。您可能还需要进行一些更改。但逻辑就在那里……

注意:但请注意,某些网站会不断更改其内容。因此,有时您可能需要重新抓取特定网页(即相同的网址)才能获取更新的内容。

  • 在这种情况下,使用集合比字典更好。 (3认同)