爬虫-网页内容匹配之xpath

想要在网页中获取你想要的数据,有三种比较常用的方法:正则表达式,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匹配不出来。最好多写几层标签。

猜你喜欢

转载自blog.csdn.net/Qwertyuiop2016/article/details/82887563