python爬虫数据解析总结

目录

  • python爬虫数据解析总结
    • 1.概述
    • 2.Xpath解析html数据
      • 2.1.基本语法
        • 1.查询语法
      • 2.2.Xpath解析html数据
        • 1.安装lxml库
        • 2.xpath解析本地文件示例
    • 3.jsonpath解析json数据
      • 3.1.jsonpath语法
        • 1.jsonpath主要语法
        • 2.jsonpath与XPath进行比较
      • 3.2.解析json数据示例
        • 1.安装jsonpath库
        • 2.解析数据文件
        • 3.解析示例
      • 3.3.解析淘票票网站json数据示例
    • 4.Beautiful Soup解析HTML或XML数据
      • 4.1.Beautiful Soup基础语法使用示例
      • 4.2.Beautiful Soup解析星巴克官网数据

1.概述

获取数据中包含了我们需要的数据和不需要的数据,这个时候可以利用一些规则过滤数据,只保留需要的数据。

2.Xpath解析html数据

Xpath解析数据分为解析本地文件数据和解析请求返回的数据,不论解析哪种数据方法都是一样的。

2.1.基本语法

1.查询语法

# 1.路径查询
// 查询所有子孙节点,不考虑层级关系
/ 查询直接子节点# 2.id查询
//div[@id]:查询所有包含id的div标签
//div[@id="top"]# 3.属性查询
//@class# 4.模糊查询
//div[contains(@id, "he")]
//div[starts-with(@id, "he")]# 5.内容查询,text函数返回查询到的内容
//div/h1/text()# 6.逻辑运算
//div[@id="head" and @class="s_down"]
//title | //price

2.2.Xpath解析html数据

1.安装lxml库

在使用xpath语法解析html文件前需要先安装lxml库,通过python安装。

# pip方式安装
pip install lxml
# pipenv方式安装 --dev 只安装到开发环境
pipenv install --dev lxml

2.xpath解析本地文件示例

被解析本地html文件代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>path解析HTML文件</title>
</head>
<body><ul><li>北京</li><li>上海</li><li>深圳</li><li>武汉</li></ul><ul><li>大连</li><li>锦州</li><li>沈阳</li></ul>
</body>
</html>

xpath解析html代码


from lxml import etree'''xpath可以解析本地文件和请求接口响应数据解析本地文件使用 etree.parse解析服务器响应数据 etree.HTML()
'''# xpath 解析本地文件
tree = etree.parse('./path.html')# 路径查询
li_list = tree.xpath('//body/ul/li')
print(li_list)# id查询,查询有id 的li, text()函数获取标签中的内容
id_list = tree.xpath('//body/ul/li[@id]/text()')
print(id_list)# 查询指定id值的标签内容
id_l1 = tree.xpath('//body/ul/li[@id="l1"]/text()')
print(id_l1)# 查找id为l1的li标签的class的属性值
li = tree.xpath('//ul/li[@id="l1"]/@class')# 查询id值包含l的li标签
li = tree.xpath('//ul/li[contains(@id, "l")]/text()')
print(li)# 查询id的值以l开头的li标签
li_start = tree.xpath('//ul/li[starts-with(@id, "l")]/text()')
print(li_start)# 查询id为l1和class为c1的内容
li_list = tree.xpath('//ul/li[@id="l1" and @claa="c1"]/text()')# 查询id为l1或者id为l2内容
li_list = tree.xpath('//ul/li[@id="l1"]/text() | //ul/li[@id="l2"]/text()')

3.jsonpath解析json数据

当我们需要解析json格式数据时,需要使用jsonpath库提供的方法来解析数据。

3.1.jsonpath语法

1.jsonpath主要语法