我已经为我想要的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标签的所有实例。
答案 0 :(得分:0)
我试图选择的HTML嵌入到一个块中,因此它不被XPath认为是有效的HTML。这似乎是新scrapy用户的常见问题,其中页面具有ajax / javascript内容,可通过URI中的#标签检测到:http://example.com/content1#slide1
所有内容都驻留在html代码中,但是您的浏览器需要运行javascript来填充主题标签指向DOM本身的任何内容,XPath / bs4会查找。
但是,如果你足够大胆(hacky),Tt将会使用正则表达式进行拉动。我也在考虑其他替代方案......比如从脚本块的内容中创建一个新的XML DOM。