jsonpath 可以直接读取通过 json.load 格式化服务器响应的json数据,而不必保存到本地
from urllib import request as ure, parse as upa
import json, jsonpath
base_url = 'https://www.bh3.com/content/bh3Cn/getContentList?'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36 Edg/101.0.1210.32'
}
def getData(page):
return {
'pageSize': 9,
'pageNum': page,
'channelId': 177
}
for page in range(1, 8):
url = base_url + upa.urlencode(getData(page))
request = ure.Request(url=url, headers=headers)
response = ure.urlopen(request)
content = response.read().decode('utf-8')
res = json.loads(content)
img_list = jsonpath.jsonpath(res, '$..value[0].url')
name_list = jsonpath.jsonpath(res, '$..ext[1].value')
for img in range(len(img_list)):
filename = './honkai/' + name_list[img] + '.png'
ure.urlretrieve(url=img_list[img], filename=filename)