lxml解析html与元素定位

Posted on 2018-02-27 17:22  moisiet  阅读(793)  评论(0编辑  收藏  举报

lxml、beautifulsoup和正则表达式都可以解析定位html元素。前两者中,lxml比beautifulsoup效率高,所以采用lxml解析html。

方法:

from lxml import html

tree=html.fromstring(response.text)

此时tree是一个HtmlElement对象,就可以查找定位元素了。

1.定位元素

element=tree.xpath('//span[@id="idname"]')

2.获取元素文本

element.text

3.获取元素所有属性字典

element.attrib  返回一个字典包含该元素的所有属性

4.获取元素的指定属性

element.get('href')

5.关于preceding-sibling:: 和 following-sibling:::

preceding-sibling::前缀表示同一层的上一个节点。
following-sibling::前缀表示同一层的下一个节点。
following-sibling:: 就是任意下一个节点,而 “following-sibling::u” 就是下一个u节点。
preceding-sibling:: 同理。

sbs = page.xpath('//body//following-sibling::a')
for sb in sbs:
    print(sb.tag)
    # 打印:a a a a a a ...
sbs = page.xpath('//body/h1/following-sibling::*')
for sb in sbs:
    print(sb.tag)
    # h1 下,所有 h1 同级的子节点(标签)
    # 打印:p p a a a a ...
sbs = page.xpath('//body/h1/preceding-sibling::*')
for sb in sbs:
    print(sb.tag)
    # h1 上,所有 h1 同级的子节点(标签)
    # 打印: p、meta、title、meta、meta

内容出处:lxml总结