如何在python scrapy中使用xpath获取项目数组?

时间:2014-08-11 19:05:01

标签: python regex xpath web-scraping scrapy

我需要从html页面获取并解析div的数组。我写了这个:

def parse_public(self, response):
    hxs = Selector(response)
    posts = hxs.xpath("//*div[matches(@id, 'wall-28701979_\d{5}')")
    # or something like this
    # posts = hxs.findall("//div[starts-with(@id,'wall-28701979_')")
    print posts

完整的xpath是://*[@id="wall-28701979_XXXXX"]/div[2]/div[1]/text()其中XXXXX - 随机5位数。所以我需要从页面中获取所有这样的元素。但我得到了exceptions.ValueError: Invalid XPath:。我该如何解决?感谢

1 个答案:

答案 0 :(得分:1)

matches()仅在xpath 2.0中可用。 Scrapy(嗯,lxml)仅支持xpath 1.0

你也错过了结束],但这在这里并不重要。


相反,您可以使用starts-with()

hxs.xpath("//div[starts-with(@id, 'wall-28701979_')]")

或者,您也可以使用re:test。来自scrapy shell的演示:

$ cat index.html
<div>
    <div id="wall-28701979_12345">test1</div>
    <div id="wall-28701979_21231">test2</div>
    <div id="wall-28701979_31233">test3</div>
</div>
$ scrapy shell index.html
>>> response.xpath('//div[re:test(@id, "wall-28701979_\d{5}")]/text()').extract()
[u'test1', u'test2', u'test3']