2017-07-14 42 views
0

,如果你有一個包含sitemap.xml的:Scrapy正則表達式爲sitemap_follow

abc.com/sitemap-1.xml 
abc.com/sitemap-2.xml 
abc.com/image-sitemap.xml 

我怎樣寫sitemap_follow僅讀取地圖-XXX的站點地圖,而不是像sitemap.xml的? 我試過

^sitemap 

沒有運氣。我該怎麼辦?否定「形象」?怎麼樣?

編輯: Scrapy代碼:

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

if any(x.search(loc) for x in self._follow): 

正則表達式應用到整個URL。我看到一個解決方案,而不修改Scrapy的唯一方法是有一個Scraper僅適用於abc.com,並將其添加到正則表達式,或者只是添加/到正則表達式

回答

1

要天真地直接回答您的問題,我提供此代碼。換句話說,我可以使用正則表達式^.$匹配站點地圖索引文件中的每個項目。

>>> 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_follow,因爲the spiders documentation說,這個變量預計將收到的列表。

>>> sitemap_follow = ['^.$'] 

但是後來相同的文檔頁面說'默認情況下,所有的站點地圖都被關注。因此,這看起來完全沒有必要。

我不知道你在做什麼。

編輯:在迴應評論。您可以使用所謂的'否定後向斷言'來做到這一點,在這種情況下,這是(?<!image-)。我對此的預測是,您需要能夠在網址開始處掃描諸如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' 
+0

要麼我太累了,要麼吃了我的問題的一部分。我想避免閱讀圖像站點地圖,但只有sitemap-xxx。那是我用^ sitemap試過的。 – maugch

+0

請參閱編輯。 –

+0

我想我們應該檢查Scrapy如何使用正則表達式。我想這只是檢查路徑,而不是網址。否則,更簡單的解決方案應該是僅在abc.com上使用爬網程序,以便正則表達式將該部分修復爲 – maugch