2017-06-15 74 views
4

網址:Scrapy是過濾唯一的網址爲重複的URL

  1. http://www.extrastores.com/en-sa/products/mobiles/smartphones-99500240157?page=1
  2. http://www.extrastores.com/en-sa/products/mobiles/smartphones-99500240157?page=2是獨一無二的,但scrapy是過濾這些URL爲重複,不刮他們。 enter image description here

我使用CrawlSpider本規則:

rules = (
    Rule(LinkExtractor(restrict_css=('.resultspagenum'))), 
    Rule(LinkExtractor(allow=('\/mobiles\/smartphones\/[a-zA-Z0-9_.-]*',),), callback='parse_product'), 
)` 

我不理解這種行爲,可有人解釋一下嗎?上週同樣的代碼工作。 使用Scrapy 1.3.0版

+1

你確定他們沒有被訪問? – Fabricator

+0

是的,沒有什麼是從整個網站報廢。所有的鏈接都被過濾。 – javed

+0

可能被鏈接抓取,但頁面上沒有數據? – Verz1Lka

回答

3

繼@paul trmbrth的建議後,我重新檢查了被刮掉的代碼和網站。 Scrapy正在下載鏈接並過濾鏈接,因爲它們之前已下載。問題是在「A」的HTML標籤鏈接屬性從靜態鏈接改爲一些JavaScript函數:

<a href='javascript:gtm.traceProductClick("/en-sa/mobiles/smartphones/samsung-galaxy-s7-32gb-dual-sim-lte-gold-188024"> 

相應地我改變了我的蜘蛛代碼:

def _process_value(value): 
    m = re.search('javascript:gtm.traceProductClick\("(.*?)"', value) 
    if m: 
     return m.group(1) 


rules = (
    Rule(LinkExtractor(restrict_css=('.resultspagenum'))), 
    Rule(LinkExtractor(
     allow=('\/mobiles\/smartphones\/[a-zA-Z0-9_.-]*',), 
     process_value=_process_value 
    ), callback='parse_product'), 
) 

這不是他scrapy過濾非獨特的url的問題,但它是關於從'a'標籤中提取'href'屬性的鏈接,因爲該鏈接最近發生了變化,我的代碼被破壞了。 再次感謝@paul trmbrth