在scrapy shell中手动re和XPath选择器之间的感知不匹配

时间:2013-05-13 21:20:52

标签: scrapy

我已经为我想要的URL打开了scrapy shell,并且我正在尝试选择p标签的所有实例:

<div class="foo"><p>Blah</p></div>

但似乎存在不匹配,我无法获得这些标签的所有实例。

In [12]: len(hxs.re("<div class=\"foo"))
Out[12]: 13

In [13]: len(hxs.select('//div[contains(@class, "foo")]'))
Out[13]: 1

事实上,我无法完全了解带有XPath的p标签......

In [14]: len(hxs.select('//p'))
Out[14]: 6

我错过了什么?我认为第[14]行会在文档中给出p标签的所有实例。

1 个答案:

答案 0 :(得分:0)

我试图选择的HTML嵌入到一个块中,因此它不被XPath认为是有效的HTML。这似乎是新scrapy用户的常见问题,其中页面具有ajax / javascript内容,可通过URI中的#标签检测到:http://example.com/content1#slide1

所有内容都驻留在html代码中,但是您的浏览器需要运行javascript来填充主题标签指向DOM本身的任何内容,XPath / bs4会查找。

但是,如果你足够大胆(hacky),Tt将会使用正则表达式进行拉动。我也在考虑其他替代方案......比如从脚本块的内容中创建一个新的XML DOM。