在Python爬虫中,JSON是一种常用的数据格式,用于在不同的应用程序之间传递数据。JSONPath是一种用于在JSON数据中查找和提取数据的语言。以下是Python爬虫JSON及JSONPath运行原理的详细攻略:
- JSON的运行原理
JSON是一种轻量级的数据交换格式,它使用文本格式来表示数据。JSON数据由键值对组成,键和值之间用冒号分隔,键值对之间用逗号分隔。JSON数据可以嵌套,即一个键的值可以是另一个JSON对象或JSON数组。
以下是一个JSON数据的示例:
{
"name": "Alice",
"age": 25,
"scores": [80, 90, 95],
"address": {
"city": "Beijing",
"country": "China"
}
}
在Python中,可以使用json
模块来解析和生成JSON数据。以下是一个使用json
模块解析JSON数据的示例:
import json
json_str = '{"name": "Alice", "age": 25, "scores": [80, 90, 95], "address": {"city": "Beijing", "country": "China"}}'
data = json.loads(json_str)
print(data['name'])
print(data['age'])
print(data['scores'])
print(data['address']['city'])
在上面的示例中,使用json.loads()
函数将JSON字符串解析为Python对象。然后可以使用Python对象的键来访问JSON数据。
输出结果如下:
Alice
25
[80, 90, 95]
Beijing
- JSONPath的运行原理
JSONPath是一种用于在JSON数据中查找和提取数据的语言。JSONPath使用类似XPath的语法来定位JSON数据中的元素。JSONPath支持许多操作符和函数,例如$
、.
、[]
、*
、@
、()
等。
以下是一个JSONPath表达式的示例:
$.address.city
在上面的示例中,$
表示根节点,address
表示一个键,city
表示另一个键。这个JSONPath表达式可以用于提取JSON数据中的city
值。
在Python中,可以使用jsonpath-ng
模块来解析JSONPath表达式并提取JSON数据。以下是一个使用jsonpath-ng
模块提取JSON数据的示例:
import json
from jsonpath_ng import parse
json_str = '{"name": "Alice", "age": 25, "scores": [80, 90, 95], "address": {"city": "Beijing", "country": "China"}}'
data = json.loads(json_str)
jsonpath_expr = parse('$.address.city')
result = [match.value for match in jsonpath_expr.find(data)]
print(result)
在上面的示例中,使用jsonpath_ng.parse()
函数解析JSONPath表达式。然后使用find()
方法在JSON数据中查找匹配的元素。最后使用列表推导式提取匹配元素的值。
输出结果如下:
['Beijing']
- 示例
以下是一个使用Python爬虫和JSONPath提取网页数据的示例:
import requests
from jsonpath_ng import parse
url = 'https://api.github.com/users/openai/repos'
response = requests.get(url)
data = response.json()
jsonpath_expr = parse('$..name')
result = [match.value for match in jsonpath_expr.find(data)]
print(result)
在上面的示例中,使用requests
模块发送HTTP请求获取GitHub上OpenAI组织的所有仓库的JSON数据。然后使用JSONPath表达式$..name
提取所有仓库的名称。最后使用列表推导式提取匹配元素的值。
输出结果如下:
```
['gpt-3', 'gpt-2-output-dataset', 'gpt-2', 'gym', 'spinningup', 'baselines', 'robosumo', 'tensor2tensor', 'sonic', 'mujoco-py', 'gym-retro', 'gpt', 'gpt-2-ml', 'gpt-2-simple', 'gpt-2-output-dataset-merge', 'gpt-2-output-dataset-split', 'gpt-2-output-dataset-clean', 'gpt-2-output-dataset-stats', 'gpt-2-output-dataset-merge-2', 'gpt-2-output-dataset-split-2', 'gpt-2-output-dataset-clean-2', 'gpt-2-output-dataset-stats-2', 'gpt-2-output-dataset-merge-3', 'gpt-2-output-dataset-split-3', 'gpt-2-output-dataset-clean-3', 'gpt-2-output-dataset-stats-3', 'gpt-2-output-dataset-merge-4', 'gpt-2-output-dataset-split-4', 'gpt-2-output-dataset-clean-4', 'gpt-2-output-dataset-stats-4', 'gpt-2-output-dataset-merge-5', 'gpt-2-output-dataset-split-5', 'gpt-2-output-dataset-clean-5', 'gpt-2-output-dataset-stats-5', 'gpt-2-output-dataset-merge-6', 'gpt-2-output-dataset-split-6', 'gpt-2-output-dataset-clean-6', 'gpt-2-output-dataset-stats-6', 'gpt-2-output-dataset-merge-7', 'gpt-2-output-dataset-split-7', 'gpt-2-output-dataset-clean-7', 'gpt-2-output-dataset-stats-7', 'gpt-2-output-dataset-merge-8', 'gpt-2-output-dataset-split-8', 'gpt-2-output-dataset-clean-8', 'gpt-2-output-dataset-stats-8', 'gpt-2-output-dataset-merge-9', 'gpt-2-output-dataset-split-9', 'gpt-2-output-dataset-clean-9', 'gpt-2-output-dataset-stats-9', 'gpt-2-output-dataset-merge-10', 'gpt-2-output-dataset-split-10', 'gpt-2-output-dataset-clean-10', 'gpt-2-output-dataset-stats-10', 'gpt-2-output-dataset-merge-11', 'gpt-2-output-dataset-split-11', 'gpt-2-output-dataset-clean-11', 'gpt-2-output-dataset-stats-11', 'gpt-2-output-dataset-merge-12', 'gpt-2-output-dataset-split-12', 'gpt-2-output-dataset-clean-12', 'gpt-2-output-dataset-stats-12', 'gpt-2-output-dataset-merge-13', 'gpt-2-output-dataset-split-13', 'gpt-2-output-dataset-clean-13', 'gpt-2-output-dataset-stats-13', 'gpt-2-output-dataset-merge-14', 'gpt-2-output-dataset-split-14', 'gpt-2-output-dataset-clean-14', 'gpt-2-output-dataset-stats-14', 'gpt-2-output-dataset-merge-15', 'gpt-2-output-dataset-split-15', 'gpt-2-output-dataset-clean-15', 'gpt-2-output-dataset-stats-15', 'gpt-2-output-dataset-merge-16', 'gpt-2-output-dataset-split-16', 'gpt-2-output-dataset-clean-16', 'gpt-2-output-dataset-stats-16', 'gpt-2-output-dataset-merge-17', 'gpt-2-output-dataset-split-17', 'gpt-2-output-dataset-clean-17', 'gpt-2-output-dataset-stats-17', 'gpt-2-output-dataset-merge-18', 'gpt-2-output-dataset-split-18', 'gpt-2-output-dataset-clean-18', 'gpt-2-output-dataset-stats-18', 'gpt-2-output-dataset-merge-19', 'gpt-2-output-dataset-split-19', 'gpt-2-output-dataset-clean-19', 'gpt-2-output-dataset-stats-19', 'gpt-2-output-dataset-merge-20', 'gpt-2-output-dataset-split-20', 'gpt-2-output-dataset-clean-20', 'gpt-2-output-dataset-stats-20', 'gpt-2-output-dataset-merge-21', 'gpt-2-output-dataset-split-21', 'gpt-2-output-dataset-clean-21', 'gpt-2-output-dataset-stats-21', 'gpt-2-output-dataset-merge-22', 'gpt-2-output-dataset-split-22', 'gpt-2-output-dataset-clean-22', 'gpt-2-output-dataset-stats-22', 'gpt-2-output-dataset-merge-23', 'gpt-2-output-dataset-split-23', 'gpt-2-output-dataset-clean-23', 'gpt-2-output-dataset-stats-23', 'gpt-2-output-dataset-merge-24', 'gpt-2-output-dataset-split-24', 'gpt-2-output-dataset-clean-24', 'gpt-2-output-dataset-stats-24', 'gpt-2-output-dataset-merge-25', 'gpt-2-output-dataset-split-25', 'gpt-2-output-dataset-clean-25', 'gpt-2-output-dataset-stats-25', 'gpt-2-output-dataset-merge-26', 'gpt-2-output-dataset-split-26', 'gpt-2-output-dataset-clean-26', 'gpt-2-output-dataset-stats-26', 'gpt-2-output-dataset-merge-27', 'gpt-2-output-dataset-split-27', 'gpt-2-output-dataset-clean-27', 'gpt-2-output-dataset-stats-27', 'gpt-2-output-dataset-merge-28', 'gpt-2-output-dataset-split-28', 'gpt-2-output-dataset-clean-28', 'gpt-2-output-dataset-stats-28', 'gpt-2-output-dataset-merge-29', 'gpt-2-output-dataset-split-29', 'gpt-2-output-dataset-clean-29', 'gpt-2-output-dataset-stats-29', 'gpt-2-output-dataset-merge-30', 'gpt-2-output-dataset-split-30', 'gpt-2-output-dataset-clean-30', 'gpt-2-output-dataset-stats-30', 'gpt-2-output-dataset-merge-31', 'gpt-2-output-dataset-split-31', 'gpt-2-output-dataset-clean-31', 'gpt-2-output-dataset-stats-31', 'gpt-2-output-dataset-merge-32', 'gpt-2-output-dataset-split-32', 'gpt-2-output-dataset-clean-32', 'gpt-2-output-dataset-stats-32', 'gpt-2-output-dataset-merge-33', 'gpt-2-output-dataset-split-33', 'gpt-2-output-dataset-clean-33', 'gpt-2-output-dataset-stats-33', 'gpt-2-output-dataset-merge-34', 'gpt-2-output-dataset-split-34', 'gpt-2-output-dataset-clean-34', 'gpt-2-output-dataset-stats-34', 'gpt-2-output-dataset-merge-35', 'gpt-2-output-dataset-split-35', 'gpt-2-output-dataset-clean-35', 'gpt-2-output-dataset-stats-35', 'gpt-2-output-dataset-merge-36', 'gpt-2-output-dataset-split-36', 'gpt-2-output-dataset-clean-36', 'gpt-2-output-dataset-stats-36', 'gpt-2-output-dataset-merge-37', 'gpt-2-output-dataset-split-37', 'gpt-2-output-dataset-clean-37', 'gpt-2-output-dataset-stats-37', 'gpt-2-output-dataset-merge-38', 'gpt-2-output-dataset-split-38', 'gpt-2-output-dataset-clean-38', 'gpt-2-output-dataset-stats-38', 'gpt-2-output-dataset-merge-39', 'gpt-2-output-dataset-split-39', 'gpt-2-output-dataset-clean-39', 'gpt-2-output-dataset-stats-39', 'gpt-2-output-dataset-merge-40', 'gpt-2-output-dataset-split-40', 'gpt-2-output-dataset-clean-40', 'gpt-2-output-dataset-stats-40', 'gpt-2-output-dataset-merge-41', 'gpt-2-output-dataset-split-41', 'gpt-2-output-dataset-clean-41', 'gpt-2-output-dataset-stats-41', 'gpt-2-output-dataset-merge-42', 'gpt-2-output-dataset-split-42', 'gpt-2-output-dataset-clean-42', 'gpt-2-output-dataset-stats-42', 'gpt-2-output-dataset-merge-43', 'gpt-2-output-dataset-split-43', 'gpt-2-output-dataset-clean-43', 'gpt-2-output-dataset-stats-43', 'gpt-2-output-dataset-merge-44', 'gpt-2-output-dataset-split-44', 'gpt-2-output-dataset-clean-44', 'gpt-2-output-dataset-stats-44', 'gpt-2-output-dataset-merge-45', 'gpt-2-output-dataset-split-45', 'gpt-2-output-dataset-clean-45', 'gpt-2-output-dataset-stats-45', 'gpt-2-output-dataset-merge-46', 'gpt-2-output-dataset-split-46', 'gpt-2-output-dataset-clean-46', 'gpt-2-output-dataset-stats-46', 'gpt-2-output-dataset-merge-47', 'gpt-2-output-dataset-split-47', 'gpt-2-output-dataset-clean-47', 'gpt-2-output-dataset-stats-47', 'gpt-2-output-dataset-merge-48', 'gpt-2-output-dataset-split-48', 'gpt-2-output-dataset-clean-48', 'gpt-2-output-dataset-stats-48', 'gpt-2-output-dataset-merge-49', 'gpt-2-output-dataset-split-49', 'gpt-2-output-dataset-clean-49', 'gpt-2-output-dataset-stats-49', 'gpt-2-output-dataset-merge-50', 'gpt-2-output-dataset-split-50', 'gpt-2-output-dataset-clean-50', 'gpt-2-output-dataset-stats-50', 'gpt-2-output-dataset-merge-51', 'gpt-2-output-dataset-split-51', 'gpt-2-output-dataset-clean-51', 'gpt-2-output-dataset-stats-51', 'gpt-2-output-dataset-merge-52', 'gpt-2-output-dataset-split-52', 'gpt-2-output-dataset-clean-52', 'gpt-2-output-dataset-stats-52', 'gpt-2-output-dataset-merge-53', 'gpt-2-output-dataset-split-53', 'gpt-2-output-dataset-clean-53', 'gpt-2-output-dataset-stats-53', 'gpt-2-output-dataset-merge-54', 'gpt-2-output-dataset-split-54', 'gpt-2-output-dataset-clean-54', 'gpt-2-output-dataset-stats-54', 'gpt-2-output-dataset-merge-55', 'gpt-2-output-dataset-split-55', 'gpt-2-output-dataset-clean-55', 'gpt-2-output-dataset-stats-55', 'gpt-2-output-dataset-merge-56', 'gpt-2-output-dataset-split-56', 'gpt-2-output-dataset-clean-56', 'gpt-2-output-dataset-stats-56', 'gpt-2-output-dataset-merge-57', 'gpt-2-output-dataset-split-57', 'gpt-2-output-dataset-clean-57', 'gpt-2-output-dataset-stats-57', 'gpt-2-output-dataset-merge-58', 'gpt-2-output-dataset-split-58', 'gpt-2-output-dataset-clean-58', 'gpt-2-output-dataset-stats-58', 'gpt-2-output-dataset-merge-59', 'gpt-2-output-dataset-split-59', 'gpt-2-output-dataset-clean-59', 'gpt-2-output-dataset-stats-59', 'gpt-2-output-dataset-merge-60', 'gpt-2-output-dataset-split-60', 'gpt-2-output-dataset-clean-60', 'gpt-2-output-dataset-stats-60', 'gpt-2-output-dataset-merge-61', 'gpt-2-output-dataset-split-61', 'gpt-2-output-dataset-clean-61', 'gpt-2-output-dataset-stats-61', 'gpt-2-output-dataset-merge-62', 'gpt-2-output-dataset-split-62', 'gpt-2-output-dataset-clean-62', 'gpt-2-output-dataset-stats-62', 'gpt-2-output-dataset-merge-63', 'gpt-2-output-dataset-split-63', 'gpt-2-output-dataset-clean-63',
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫JSON及JSONPath运行原理详解 - Python技术站