Получить информацию с BeautifulSoup и сделать ее извлекаемой - PullRequest
0 голосов
/ 05 февраля 2019

Я новичок в webscraping с 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

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Улучшение ответа.Следующий код дает вам необходимый словарь, из которого вы можете получить доступ к нужной информации, приведенной в вопросе, легче, чем полагаться на исходный вложенный изречение.

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,95\xa0€'},
......
}

Вы можете снова озвучить вывод, используя

json_output = json.dumps(desired_data)
0 голосов
/ 05 февраля 2019

Да, вы можете сохранить его как словарь (или 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...