本文主要使用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()寻找和定位数据
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解析豆瓣短评
# _*_ 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行代码。
评论区