微信公众号做推送的网站,太原住房与城乡建设厅网站,wordpress添加音乐插件,网站模板哪里下载XPath工具
浏览器-元素-CtrlF 浏览器-控制台- $x(表达式) Xpath helper (安装包需要科学上网) 问题 使用离线安装包 出现 程序包无效 解决方案 使用修改安装包的后缀名为 rar#xff0c;解压文件到一个文件夹#xff0c;再用 加载文件夹的方式安装即可 安装
python若使用…XPath工具
浏览器-元素-CtrlF 浏览器-控制台- $x(表达式) Xpath helper (安装包需要科学上网) 问题 使用离线安装包 出现 程序包无效 解决方案 使用修改安装包的后缀名为 rar解压文件到一个文件夹再用 加载文件夹的方式安装即可 安装
python若使用需要安装lxml模块 pip install lxml Xpath实战-纵横网 代码
from fake_useragent import UserAgent
import requests
from lxml import etree
from time import sleep
for i in range(1,6):print(f正在获取第{i}页数据
)url
fhttp://www.zongheng.com/rank/details.html?
rt1d1p{i}headers {UserAgent:UserAgent().chrome}resp requests.get(url,headers
headers)# 构造etree对象e etree.HTML(resp.text)names
e.xpath(//div[classrank_d_b_name]/titl
e)for name in names:print(name)sleep(1) JSON数据使用 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式它使得人们很容易的进行
阅读和编写。 同时也方便了机器进行解析和生成。适用于进行数据交互的场景比如网站前台与后台之间
的数据交互
JSON和XML的比较可谓不相上下
Python 中自带了JSON模块直接 import json 就可以使用了
官方文档https://docs.python.org/3/library/json.html
Json在线解析网站https://www.json.cn/#
json简单说就是javascript中的对象和数组所以这两种结构就是对象和数组两种结构通过这两种
结构可以表示各种复杂的结构。 对象对象在js中表示为{ }括起来的内容数据结构为 { keyvalue, keyvalue, ... }的键值对的结构。在面向对象的语言中key为对象的属性value为对应的属性值。取值方法为 对象.key 获取属性值这个属性值的类型可以是数字、字符串、数组、对象这几种数组数组在js中是中括号[ ]括起来的内容数据结构为[Python, javascript, C, ...]取值方式和所有语言中一样使用索引获取字段值的类型可以是 数字、字符串、数组、对象几种。 Python中的json模块
json模块提供了四个功能
dumpsdumploadsload
json.loads()
把Json格式字符串解码转换成Python对象 从json到python的类型转化对照如下
import json
strList [1, 2, 3, 4]
strDict {city: 北京, name: 范爷}
json.loads(strList)
# [1, 2, 3, 4]
json.loads(strDict) # json数据自动按Unicode存储
# {ucity: u\u5317\u4eac, uname:
u\u5927\u732b}json.dumps()
实现python类型转化为json字符串返回一个str对象 把一个Python对象编码转换成Json字符串
从python原始类型向json类型的转化对照如下
import jsonlistStr [1, 2, 3, 4]
tupleStr (1, 2, 3, 4)
dictStr {city: 北京, name: 范爷}
json.dumps(listStr)
# [1, 2, 3, 4]
json.dumps(tupleStr)
# [1, 2, 3, 4]
# 注意json.dumps() 序列化时默认使用的ascii编码
# 添加参数 ensure_asciiFalse 禁用ascii编码按utf-8编码
json.dumps(dictStr)
# {city: \\u5317\\u4eac, name:
\\u5927\\u5218}print(json.dumps(dictStr,ensure_asciiFalse))
# {city: 北京, name: 范爷}json.dump()
将Python内置类型序列化为json对象后写入文件
import jsonlistStr [{city: 北京}, {name: 范爷}]
json.dump(listStr, open(listStr.json,w),
ensure_asciiFalse)dictStr {city: 北京, name: 范爷}
json.dump(dictStr, open(dictStr.json,w),
ensure_asciiFalse)json.load()
读取文件中json形式的字符串元素 转化成python类型
import jsonstrList json.load(open(listStr.json))
print(strList)
# [{ucity: u\u5317\u4eac}, {uname:u\u5927\u5218}]strDict json.load(open(dictStr.json))
print(strDict)
# {ucity: u\u5317\u4eac, uname:u\u5927\u5218}注意事项 json.loads() 是把 Json格式字符串解码转换成Python对象如果在json.loads的时候出错要注意被解码的Json字符的编码。如果传入的字符串的编码不是UTF-8的话需要指定字符编码的参数encoding。 data_dict json.loads(jsonStrGBK);dataJsonStr是JSON字符串假设其编码本身是非UTF-8的话而是GBK 的那么上述代码会导致出错改为对应的 data_dict json.loads(jsonStrGBK,encodingGBK);如果 dataJsonStr通过encoding指定了合适的编码但是其中又包含了其他编码的字符则需要先去将dataJsonStr转换为Unicode然后再指定编码格式调用json.loads() dataJsonStrUni dataJsonStr.decode(GB2312);
dataDict json.loads(dataJsonStrUni,encodingGB2312);JsonPath的使用
JsonPath 是一种信息抽取类库是从JSON文档中抽取指定信息的工具提供多种语言实现版本包括PythonJavascript PHP和 Java。
JsonPath 对于 JSON 来说相当于 XPATH 对于 XML。
安装 pip install jsonpath 官方文档https://goessner.net/articles/JsonPath/
JsonPath与XPath语法对比
Json结构清晰可读性高复杂度低非常容易匹配下表中对应了XPath的用法。
XPathJSONPath描述/$根节点/. or []取子节点..n/a取父节点Jsonpath未支持//..就是不管位置选择所有符合条件的条件**匹配所有元素节点n/a 根据属性访问Json不支持因为Json是个Key-value递归结构不需要。n/a根据属性访问Json不支持因为Json是个Key-value递归结构不需要。[][]迭代器标示可以在里边做简单的迭代操作如数组下标根据内容选值等\|[,]支持迭代器中做多选。[]?()支持过滤操作.n/a()支持表达式计算()n/a分组JsonPath不支持 代码
我们以拉勾网城市JSON文件https://www.lagou.com/lbs/getAllCitySearchLabels.json为例获取所有城市
from urllib.request import urlopen
from urllib.request import Request
import jsonpath
import jsonurl http://www.lagou.com/lbs/getAllCitySearchLabels.json
request Request(url)
response urlopen(request)
html response.read()
# 把json格式字符串转换成python对象
jsonobj json.loads(html)
# 从根节点开始匹配name节点
citylist
jsonpath.jsonpath(jsonobj,$..name)
print(citylist)
print(type(citylist))
fp open(city.json,w)
content json.dumps(citylist,
ensure_asciiFalse)
print(content)
fp.write(content)
fp.close()