使用Xpath解析豆瓣短评

本文主要使用Xpath解析上文通过requests爬取的网页内容。

1. Xpath简述

1.1 什么是Xpath

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是XPath很快的被开发者采用来当作小型查询语言。

可以阅读该Xpath文档了解更多关于Xpath的知识。

1.2. Xpath解析网页的流程

  • 首先通过Requests库获取网页数据
  • 通过网页解析,得到想要的数据或者新的链接
  • 网页解析可以通过Xpath或者其它解析工具进行,Xpath在是一个非常好用的网页解析工具

2. Xpath的使用

之前我们通过requests库成功的爬取了《小萝莉的猴神大叔》豆瓣短评,现在就用Xpath来进行解析。

2.1 使用Xpath解析网页数据的步骤

  • 从lxml导入etree
  • 解析数据,返回xml结构
  • 使用.xpath()寻找和定位数据
1
2
3
4
5
6
7
from lxml import etree

html ='''#省略'''#html数据,使用requests获取

s = etree.HTML(html)#解析html数据

print(s.xpath())#使用.xpath()

2.2 获取Xpath的方法

  • 第一种方法:从浏览器直接复制
  • 首先在浏览器上定位到需要爬取的数据
  • 右键,点击“检查”,在“Elements”下找到定位到所需数据
  • 右键——Copy——Copy Xpath,即可完成Xpath的复制
  • 第二种方法:手写Xpath
  • 获取文本内容用 text()
  • 获取注释用 comment()
  • 获取其它任何属性用@xx,如: href、 src、 value
  • 想要获取某个标签下所有的文本(包括子标签下的文本),使用string
    如”< p>123< a>来获取我啊< /a>< /p>”,这边如果想要得到的文本为”123来获取我啊”,则需要使用string
  • starts-with 匹配字符串前面相等
  • contains 匹配任何位置相等

2.3 使用Xpath解析豆瓣短评

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# _*_ coding:utf-8 _*_
import requests
from lxml import etree

def getHTMLText(url):
try:
r = requests.get(url,timeout = 20).text # 设置超时,别爬太快
s = etree.HTML(r)
return s.xpath('//div[@class="comment"]/p/text()')
except:
return "产生异常!"

if __name__ == '__main__':
url = 'https://movie.douban.com/subject/26393561/comments'
print(getHTMLText(url))

跟之前爬取的文章对比,只添加了3行代码。