Python爬虫(八)数据处理方法之Xpath

作者:咸甜怪
链接:https://www.jianshu.com/p/0de8d166e0d5
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

在学习本小节的知识之前,对于Xpath的语法最好有一个简单的了解。如果不是很了解的,可以看一下我的另一篇文章Xpath之爬虫常用方法总结

爬虫数据Xpath处理步骤

  • lxml
    Python爬虫(七)数据处理方法之JSON中我们讲到,通过response.content.decode()解码之后得到的是str类型的数据。若想得到支持我们使用xpath进行提取数据的Element对象,则需要用到python中的另外一个库lxml。
    lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。通过lxml下的etree.HTML()对html文本进行解析,得到Element对象。其使用方法非常简单:etree.HTML(html文本)
    下面通过一个简单的例子,我们来看看etree.HTML输出了什么类型数据。
from lxml import etree

url = 'http://http://fanyi.youdao.com/'
response = requests.get(url, headers=headers)
html_str = response.content.decode()
print(type(html_str))
html = etree.HTML(html_str)
print(html)

输出结果如下:<class 'str'> <Element html at 0x3290f88>,这说明了通过etree.HTML得到了html的Element对象。

  • Xpath提取数据
    得到了Element对象之后,我们就可以利用Xpath对网页的数据进行提取。接下来我们以豆瓣书籍下的日本文学排名有例子,讲解怎么提取数据。

    豆瓣Xpath.png

    通过xpath helper我们自己定位到书名的xpath为//ul[@class="subject-list"]/li/div[2]/h2/a/text()

import requests
from lxml import etree

url1 = 'https://book.douban.com/tag/%E6%97%A5%E6%9C%AC%E6%96%87%E5%AD%A6?start=0&type=T/'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}
response = requests.get(url1, headers=headers)
html_str = response.content.decode()
html = etree.HTML(html_str)
#创建xpath列表
html_name = html.xpath("//ul[@class='subject-list']/li")
for li in html_name:
    item = {}
    #获取到每一个li下的书籍名字,并去除多余的\n
    item['name'] = li.xpath('./div[2]/h2/a/text()')[0].replace("\\n", " ").strip()
    print(item)

输出结果如下:

豆瓣输出结果.png

至此,我们就爬取到了该网页下的所有书籍名字了。

  • 总结
    使用xpath提取爬虫数据一共就两个步骤:
    1.通过etree.HTML()获取到html的Element对象。
    2.通过html.xpath(xpath路径)提取到我们想要的数据。