我正在推出依赖XPath从网页中提取信息的网页抓取软件。
该软件的一个应用是从网站上搜集节目评论。我试图抓住的一页是卫报最新的爱丁堡节日评论:http://www.guardian.co.uk/culture/edinburghfestival+tone/reviews
我想要的部分位于底部,标题为“最近的”。评论项目列表的XPath表达式(即pic,星星,日期,模糊等)是
//ul[@id='auto-trail-block']
返回li元素列表,每个元素对应一个评论项目。
如果我只想引用模糊,我最接近的就是说
//ul[@id='auto-trail-block']/div[@class='trailtext']
但是当我收集列表中每个项目的文本内容时,它包含了许多我不需要的Javascript和令人讨厌的东西。我不能引用blurb本身,因为它不在p元素内,而是在包含脚本元素和包含javascript和无关文本的强元素的div元素中。
在调试器中,DOM看起来像这样:
<ul id="auto-trail-block" ...>
<li ...>
<div ...>
<div ...>
<div ...>
<div class="trailtext">
<script ...>
<div ...>
<span ...>
<strong .../>
<br/>
The Text I want to copy!
<strong .../>
<a .../>
<div .../>
</div>
</div>
</li>
<li ...>
...
</li>
...
</ul>
有没有办法引用div中包含的文本内容而不是它的任何子元素?
答案 0 :(得分:1)
我的方法是选择trailtext
div,删除脚本标记及其内容和所有HTML标记。剩下的就是你想要的内容。
只是想知道 - //ul[@id='auto-trail-block']/div[@class='trailtext']
的内部文本节点返回了什么?我猜大多数都是模糊的,所以清除脚本标签几乎可以让你到那儿。
答案 1 :(得分:1)
如果您只想要div[@class='trailtext']
的文字节点子节点,请使用 text()
//ul[@id='auto-trail-block']//div[@class='trailtext']/text()