2014-01-25 2 views
0

Я пытаюсь извлечь идентификатор продукта из тега onclick внутри «предшествующего брата», который является тегом ul (id = «ShowProductImages»).Проблема с xpath/regex в Scrapy spider

Число Я пытаюсь извлечь непосредственно после 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 тега наряду с регулярным выражением, чтобы извлечь идентификатор. Это код, который я использую (который не работает)

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

Смежные вопросы