Python 由于url中的会话ID不同,导致无休止的爬网

Python 由于url中的会话ID不同,导致无休止的爬网,python,scrapy,Python,Scrapy,如何防止scrapy无休止地抓取网站,当只有url(特别是会话id)或类似的内容被更改,并且url后面的内容相同时。 有没有办法检测到这一点 我读过这本书,也读过那本书,但遗憾的是,要解决我的问题,这还不够。有几种方法可以做到这一点,这两种方法都与您所链接的问题有关 使用一个,您可以决定哪些URL参数使页面唯一,并告诉您的自定义重复请求过滤器忽略URL的其他部分。这与上一次的答案相似 例如: url: http://www.example.org/path/getArticle.do?art=4

如何防止scrapy无休止地抓取网站,当只有url(特别是会话id)或类似的内容被更改,并且url后面的内容相同时。 有没有办法检测到这一点


我读过这本书,也读过那本书,但遗憾的是,要解决我的问题,这还不够。

有几种方法可以做到这一点,这两种方法都与您所链接的问题有关

使用一个,您可以决定哪些URL参数使页面唯一,并告诉您的自定义重复请求过滤器忽略URL的其他部分。这与上一次的答案相似

例如:

url: http://www.example.org/path/getArticle.do?art=42&sessionId=99&referrerArticle=88
important bits: protocol, host, path, query parameter "art"
implementation:
def url_fingerprint(self, url):
    pr = urlparse.urlparse(url)
    queryparts = pr.query.split('&')
    for prt in queryparts:
        if prt.split("=")[0] != 'art':
            queryparts.remove(prt)
   return urlparse.urlunparse(ParseResult(scheme=pr.scheme, netloc=pr.netloc, path=pr.path, params=pr.params, query='&'.join(queryparts), fragment=pr.fragment))
另一种方法是确定页面上的哪些信息使其具有唯一性,并在spider代码中使用IgnoreVisitedItems中间件或字典/集合。如果您选择dictionary/set路径,您将让您的爬行器从页面中提取该信息,并检查dictionary/set以查看您以前是否见过该页面;如果是这样,您可以停止解析并返回

您需要提取哪些信息取决于您的目标站点。它可能是文章的标题、OpenGraph标记等