我需要从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:
。我该如何解决?感谢
答案 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']