如何忽略<br/>标签xpath

时间:2015-10-06 16:51:24

标签: python html css xpath web-scraping

myList = tree.xpath('//div[@id="RM1127"]/div[@class="moreInfo"]/text()')

我正在为这个div中的元素抓取一个网站。它工作正常,但在这一个div上,有一个<b>标签。 myList将该div的元素作为两个单独的元素返回。

<div class="moreInfo" style="display:none;font-weight:normal; font-size:14px; margin-top:6px; padding:0px 0 0 30px;">

    Over ½ lb. of jumbo shrimp fried golden crisp in a…

    <br></br>

    coleslaw, cocktail & Tartar sauce. …

</div>

html看起来像这样。而不是'超过1/2磅的巨型虾油炸金黄酥脆'和'凉拌卷心菜,鸡尾酒&amp;鞑靼酱作为一个元素组合在一起,我将它们作为一个阵列中的独立元素。

2 个答案:

答案 0 :(得分:0)

使用Python XPath + LXML,只需调用HtmlElement.text_content()即可。看看这个完整的例子:

from lxml import etree
import lxml.html    

html  ="""<!DOCTYPE html>
<html>
<body>
    <div id="RM1127">
        <div class="moreInfo" style="">

            Over 1/2 lb. of jumbo shrimp fried golden crisp in a...

            <br>

            coleslaw, cocktail & Tartar sauce

        </div>
    </div>
</body>
</html>"""

dom = lxml.html.fromstring(html)
tags = dom.xpath("""//div[@id="RM1127"]/div[@class="moreInfo"]""")

for e in tags:
    print(e.text_content())

来自doc

  

lxml.html.HtmlElement.text_content():
      返回元素的文本内容,包括其子元素的文本内容,没有标记。

答案 1 :(得分:0)

尝试以下XPath表达式:

string(//div[@id="RM1127"]/div[@class="moreInfo"])

当应用于节点集时,XPath string function将返回文档顺序中第一个节点的字符串值。元素节点的字符串值是concatenation of the string-values of all text node descendants