使用BeautifulSoup获取信息并使其可提取



我是BeautifulSoup的新手,想从zalando.de中提取一些信息。

我已经处理了可以找到我需要的信息(价格、商品编号…)的行。是否可以将此行保存为可访问的数据类型(例如字典),以通过其键提取信息?

from bs4 import BeautifulSoup
import requests
source = requests.get("https://en.zalando.de/carhartt-wip-hooded-chase-sweatshirt-c1422s02x-g13.html?_rfl=de").text
soup = BeautifulSoup(source, "lxml")
scr = soup.find("script", id = "z-vegas-pdp-props").text

是的,您可以将其保存为字典(确切地说是JSON)。您可以使用json模块将字符串转换为json。

文本需要首先转换为有效的json。您可以通过删除无效的部分来做到这一点。

from bs4 import BeautifulSoup
import requests
import json
source = requests.get("https://en.zalando.de/carhartt-wip-hooded-chase-sweatshirt-c1422s02x-g13.html?_rfl=de").text
soup = BeautifulSoup(source, "lxml")
scr = soup.find("script", id = "z-vegas-pdp-props").text
data = json.loads(scr.lstrip('<![CDATA').rstrip(']>'))
print(data['layout'])
# cover

改进答案。下面的代码为您提供了所需的字典,您可以从中访问问题中给出的所需信息,这比依赖原始嵌套字典更容易。

from bs4 import BeautifulSoup
import requests
import json
source = requests.get("https://en.zalando.de/carhartt-wip-hooded-chase-sweatshirt-c1422s02x-g13.html?_rfl=de").text
soup = BeautifulSoup(source, "lxml")
scr = soup.find("script", id = "z-vegas-pdp-props").text
data = json.loads(scr.lstrip('<![CDATA').rstrip(']>'))
desired_data = dict(data['model']['articleInfo'])
print(desired_data)

输出如下所示。

{'modelId': 'C1422S02X',
'id': 'C1422S02X-G13',
'shopUrl': 'https://en.zalando.de/carhartt-wip-hooded-chase-sweatshirt-c1422s02x-g13.html',
'sizeFits': None,
'commodity_group': {'values': ['2', '2', 'S', '4']},
'active': True,
'name': 'HOODED CHASE  - Hoodie - cranberry/gold',
'color': 'cranberry/gold',
'silhouette_code': 'pullover',
'product_group': 'clothing',
'category_tag': 'Sweatshirt',
......
'price': {'currency': 'EUR', 'value': 74.95, 'formatted': '74,95xa0€'},
......
}

您可以使用再次对输出进行jsonify

json_output = json.dumps(desired_data)

最新更新