2014-01-25 83 views
0

我試圖從一個ul標籤(id =「ShowProductImages」)的「之前 - 兄弟姐妹」中的onclick標籤中提取產品ID。在Scrapy蜘蛛中的xpath /正則表達式的問題

我試圖提取的數量後直接PID =,例如:??

...列表/ ViewAll PID = &圖像= 206 ...

下面是我試圖提取的內容:

<ul id="ShowProductImages" class="imageView"> 
    <li><a href="" target="_blank" onClick="javascript:initWindow('http://products.example.com/products/list/ViewAll?pid=234565&amp;image=754550',520,520,100,220);return false;"><img src="http://content.example.com/assets/images/products/j458jk.jpg" width="200" height="150" alt="Product image description here" border="0"></a></li>   
</ul> 

<div class="description"> 
    Description here... 
</div> 

我使用xpath選擇onclick標記以及正則表達式以提取id。這是我正在使用的代碼(這是不工作)

def parse(self, response): 
    sel = HtmlXPathSelector(response) 
    products_path = sel.xpath('//div[@class="description"]') 
    for product_path in products_path: 
    product = Product() 
    product['product_pid'] = product_path.xpath('preceding-sibling::ul[@id="ShowProductImages"][1]//li/a[1]/@onclick').re(r'(?:pid=)(.+?)(?:\'|$)') 
    yield product 

有什麼建議嗎?我不太確定我出錯的地方。

感謝您的幫助提前。

回答

1

我建議你試試這個,從ul選擇,並且在謂詞中測試其<div class="description">兄弟:

sel.xpath("""//ul[following-sibling::div[@class="description"]] 
       [@id="ShowProductImages"] 
       /li/a[1]/@onclick""").re(r'(?:pid=)(\d+)') 

我改變了你的正則表達式來限制數字。

+1

你可能也可以限制正則表達式爲're(r'pid =(\ d +)')',非選擇括號在這裏是無用的...... – Robin