如何用BeautifulSoup4从ResultSet标签中提取字典类型数据?
解决方法
首先要明确:Shopee的公开API返回的是JSON格式数据,BeautifulSoup是用来解析HTML/XML的工具,用它处理JSON完全是绕远路,直接用Python内置的json模块就能搞定。
正确的处理流程
- 用
urlopen获取API响应后,直接读取响应内容并解码成字符串 - 用
json.loads()把字符串转换成Python字典 - 直接通过键名提取
items字段
示例代码:
from urllib.request import urlopen import json # 替换成你要爬取的Shopee公开API地址 api_url = "https://shopee.example.com/api/v2/search_items?keyword=xxx" # 获取响应并解析 response = urlopen(api_url) # 解码响应内容(大多数API用utf-8编码) json_str = response.read().decode('utf-8') # 转成Python字典 data_dict = json.loads(json_str) # 提取items字段 items = data_dict.get('items', []) # 遍历items查看数据 for item in items: print(item['name'], item['price'])
如果你已经用了BeautifulSoup得到字符串
如果已经通过bodydata.get_text()拿到了JSON格式的字符串,直接跳过BeautifulSoup的步骤,用json.loads()转换即可:
import json # 假设你已经通过BeautifulSoup得到了json_str json_str = bodydata.get_text() data_dict = json.loads(json_str) items = data_dict.get('items', [])
注意事项
- 部分Shopee API会要求请求头里带
User-Agent,否则会返回错误,你可以在urlopen里添加请求头:
from urllib.request import Request, urlopen req = Request(api_url, headers={'User-Agent': 'Mozilla/5.0'}) response = urlopen(req)
- 不要频繁请求API,避免触发Shopee的反爬机制导致IP被封禁。
内容的提问来源于stack exchange,提问作者drew
相关产品推荐
相关产品推荐

