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)
我认为就是这样.下次运行蜘蛛时,应该自动尝试开始避开相同的站点.
祝好运!
这很简单。在 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 文本编辑器(又名浏览器)中输入的。可能有语法错误。您可能还需要进行一些更改。但逻辑就在那里……
注意:但请注意,某些网站会不断更改其内容。因此,有时您可能需要重新抓取特定网页(即相同的网址)才能获取更新的内容。