【发布时间】:2021-12-31 10:28:28
【问题描述】:
我想一次获取所有 name 和 price 键,但所有第一个 dict 键的顺序不同,我无法迭代,这就是为什么我必须进行一些预处理但输出不一致的原因。
电流输出:
Name Price
0 Half-Life: Opposing Force [{'id': 32, 'discount_block': '<div class="dis...
1 Half-Life [{'id': 34, 'discount_block': '<div class="dis...
2 Half-Life 2 [{'id': 36, 'discount_block': '<div class="dis...
3 Half-Life 2: Episode Two [{'id': 516, 'discount_block': '<div class="di...
4 Cuphead [{'id': 35659, 'discount_block': '<div class="...
5 Steam Controller []
6 PCMark 10 [{'id': 125001, 'discount_block': '<div class=...
7 Kerbal Space Program 2 []
8 Hollow Knight: Silksong
预期输出:
name price
0 Half-Life: Opposing Force 59
1 Half-Life 109
2 Half-Life 2 109
3 Half-Life 2: Episode Two 89
4 Cuphead 573
5 Steam Controller []# meaning None
6 PCMark 10 157
7 Kerbal Space Program 2 []
8 Hollow Knight: Silksong []
脚本:
import re
import json
import requests
import pandas as pd
url = 'https://store.steampowered.com/wishlist/id/zorro4/#sort=order'
wishlist_url = json.loads( re.findall(r'g_strWishlistBaseURL = (".*?");', requests.get(url).text)[0] )
#print(wishlist_url)
data = requests.get(wishlist_url + 'wishlistdata/?p=0').json()
#print(wishlist_url + 'wishlistdata/?p=0')
# jsn_data=json.dumps(data, indent=4)
# with open('da.json','w') as f:
# f.write(jsn_data)
names = [d['name'] for d in data.values()]
# print(names)
out = list(map(lambda x: x['subs'], data.values()))
p=[]
for i in out:
for t in i:
q=t['price']
p.append(q)
#print(q)
df = pd.DataFrame(data=list(zip(names, out)), columns=['Name', 'Price'])
print(df)
【问题讨论】:
标签: python python-3.x pandas web-scraping beautifulsoup