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总结