Python 站点地图的Scrapy regexp\u follow

Python 站点地图的Scrapy regexp\u follow,python,scrapy,Python,Scrapy,如果您的sitemap.xml包含: abc.com/sitemap-1.xml abc.com/sitemap-2.xml abc.com/image-sitemap.xml 如何编写sitemap_follow以仅读取sitemap xxx站点地图而不读取image-sitemap.xml? 我试过了 ^sitemap 没有运气。我该怎么办?否定“形象”?怎么做 编辑: 剪贴代码: self._follow = [regex(x) for x in self.sitemap_follow

如果您的sitemap.xml包含:

abc.com/sitemap-1.xml
abc.com/sitemap-2.xml
abc.com/image-sitemap.xml
如何编写sitemap_follow以仅读取sitemap xxx站点地图而不读取image-sitemap.xml? 我试过了

^sitemap
没有运气。我该怎么办?否定“形象”?怎么做

编辑: 剪贴代码:

self._follow = [regex(x) for x in self.sitemap_follow]


正则表达式应用于整个url。在不修改Scrapy的情况下,我看到解决方案的唯一方法是为abc.com提供一个Scraper,并将其添加到正则表达式中,或者只将/添加到正则表达式中,以天真直接地回答您的问题。我提供了此代码。换句话说,我可以使用regex
^.$
匹配站点地图索引文件中的每个项目

>>> import re
>>> sitemap_index_file_content = [
... 'abc.com/sitemap-1.xml',
... 'abc.com/sitemap-2.xml',
... 'abc.com/image-sitemap.xml'
... ]
>>> for s in sitemap_index_file_content:
...     m = re.match(r'^.*$', s)
...     if m:
...         m.group()
... 
'abc.com/sitemap-1.xml'
'abc.com/sitemap-2.xml'
'abc.com/image-sitemap.xml'
这意味着您将按以下方式设置
sitemap\u follow
,因为该变量表示希望收到一个列表

>>> sitemap_follow = ['^.$']
但是,同一页的文档说,“默认情况下,所有的站点地图都会被遵循。”因此,这似乎完全没有必要

我想知道你想做什么。

编辑:回应评论。您可能可以使用所谓的“反向查找断言”来实现这一点,在这种情况下,这就是
(?)。我对此有所保留的是,您需要能够在URL开始时扫描像abc.com这样的东西,这可能会带来非常迷人的挑战

>>> for s in sitemap_index_file_content:
...     m = re.match(r'[^\/]*\/(?<!image-)sitemap.*', s)
...     if m:
...         m.group()
... 
'abc.com/sitemap-1.xml'
'abc.com/sitemap-2.xml'
>>对于站点地图索引文件内容中的:

…m=重新匹配(r'[^\/]*\/(?要么我太累了,要么我的部分问题已经解决了。我想避免阅读图像站点地图,而只阅读站点地图xxx。这就是我用^sitemap尝试的结果。我想我们应该检查Scrapy如何使用正则表达式。我想它只检查路径,而不是url。否则,更简单的解决方案应该是只在abc.com上使用爬虫程序,这样正则表达式我想你最好检查一下,就像你自己建议的那样。
>>> for s in sitemap_index_file_content:
...     m = re.match(r'[^\/]*\/(?<!image-)sitemap.*', s)
...     if m:
...         m.group()
... 
'abc.com/sitemap-1.xml'
'abc.com/sitemap-2.xml'