想要在网页中获取你想要的数据,有三种比较常用的方法:正则表达式,xpath,beautfulsoup。而其中,对于一些简单网页的数据提取,xpath的使用比正则表达式好用多了。
xpath常用语法:
/ : 表示从根节点开始选取
// : 从整个文档中查找某个节点
@ : 选取某个节点的属性
| : 满足左右其中一个条件(或)
[] : 标签中的属性和值
contains():匹配一个属性值中包含某些字符串的节点
例子:
要获取div标签下的span标签的文本信息://div/span
要获取class为’qwer‘的div下的span信息://div[@class='qwer']/span
如果只要他有class属性,不在乎值的话://div[@class]/span
要获取img标签火热的src的值://img/@src
要获取div标签的class属性包含’df‘这个字串的信息://div[contains(@class,'df')]
要获取div下的span或h1标签://div/span|//div/h1
使用:
from lxml import etree
parseHtml = etree.HTML(html)
name_obj = parseHtml.xpath('//div[@class="post-wrapper col-md-8"]/header/h1/a')
for i in name_obj:
print(i.text)
addr_list = parseHtml.xpath('//div[@class="post-wrapper col-md-8"]/header/h1/a/@href')
for i in addr_list:
print(i)
注意:name_obj列表里的是对象,text属性才是要的内容,addr_list列表里的是字符串
有一款谷歌浏览器插件xpath-helper(百度搜索即可)可以帮助我们更快的验证我们的代码是否能匹配想要的内容。(ctrl+shift+X 打开/关闭插件)大写的X
温馨提示:如果你在使用xpath插件时有内容,而程序没有匹配到内容,可能是标签没有写完全,比如//div/span,实际应该是//div/span/span。这种情况xpath插件能显示,而Python匹配不出来。最好多写几层标签。