Соскоб JSON предмет с красивым супом - PullRequest
0 голосов
/ 02 марта 2020

Фон

Я пытаюсь очистить эту страницу . В основном получают название каждого продукта, его цену и изображение. Я ожидал увидеть div, которые содержат продукт в супе, но я не сделал. Поэтому я открыл URL в своем браузере chrome и, выполнив элемент inspect во вкладке «Мои сети», обнаружил, что GET-вызов, который он делает, находится прямо на этой странице , чтобы получить всю информацию о продукте. , Если вы откроете этот URL-адрес, вы увидите, в основном, объект JSON, и там есть строка html с элементами div для продукта и цен. Вопрос для меня: как мне разобрать это?

Попытка решения Я подумал, что один из очевидных способов - преобразовать суп в JSON и так, чтобы удовлетворить потребности в этом супе. быть строкой, и это именно то, что я сделал. Проблема в том, что моя переменная json_data в основном содержит строку. Поэтому, когда я пытаюсь сделать что-то подобное json_data['Results'], появляется сообщение об ошибке, в котором говорится, что я могу передавать только целые числа. Я не уверен, как действовать дальше.

Мне бы очень понравились предложения и указания, если я что-то не так делаю.

Ниже приводится мой код

from bs4 import BeautifulSoup
from random_user_agent.user_agent import UserAgent
from random_user_agent.params import SoftwareName, OperatingSystem
import requests
import json
import sys


sys.stdout = open('output.html', 'wt')
page_to_scrape = 'https://shop.guess.com/en/catalog/browse/men/tanks-t-shirts/view-all/?filter=true&page=1'
software_names = [SoftwareName.CHROME.value]
operating_systems = [OperatingSystem.WINDOWS.value, OperatingSystem.LINUX.value]
user_agent_rotator = UserAgent(software_names=software_names, operating_systems=operating_systems, limit=100)
page = requests.get(page_to_scrape, headers={'User-Agent': user_agent_rotator.get_random_user_agent()})
soup = BeautifulSoup(page.content, "html.parser")
json_data = json.dumps(str(soup))
print(json_data)

1 Ответ

2 голосов
/ 02 марта 2020

Ошибка может быть в том, что json_data является строкой, а не типом dict, так как json.dumps(str(soup)) возвращает строку. Поскольку json_data является строкой, мы не можем сделать json_data['Results'] и для доступа к любому элементу строки нам понадобится чтобы передать индекс и, следовательно, ошибку.

РЕДАКТИРОВАТЬ

Чтобы получить Results из ответа, код показан ниже:

json_data = json.loads(str(soup.text))
print(json_data['Results'])

Дайте мне знать, если это помогает !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...