#python #json #web-scraping #beautifulsoup #python-requests
#python #json #веб-очистка #beautifulsoup #python-запросы
Вопрос:
Отказ от ответственности: Я довольно новичок в python, поэтому, возможно, я не смогу правильно сформулировать свои сомнения. Я пытаюсь использовать Bs4 в python для очистки определенной части ответа на запрос, который, как я полагаю, находится в формате json, как показано. Заголовки ответов. Однако, когда я печатаю содержимое ответа, он просто печатается в одной длинной строке, как показано в содержимом ответа, и содержит такие объекты, как amp;quot; и n , что делает невозможным для меня попытаться найти конкретную часть, которая мне нужна. Как мне сделать так, чтобы n фактически выполнял разрывы строк, а все объекты amp; quot; были преобразованы в фактические цитаты, чтобы я мог правильно использовать Bs4 для очистки содержимого? Есть ли какой-либо другой скребок в Python, который я должен использовать?
Извините, если мой вопрос недостаточно ясен, дайте мне знать, как я могу прояснить свои сомнения.
Ответ №1:
Данные, которые вы пытаетесь распечатать, выглядят как данные json. Вы можете попробовать использовать requests
модуль, который имеет встроенный json
метод. Вот пример:
# request the endpoint
>>> res = requests.get('https://httpbin.org/get')
# <Response [200]> '200' means a successful response
# use the json method so we can easily access the data
>>> data=res.json()
# grab one of the values it contains using json/dict access notation
>>> data['origin']
u'99.54.....'
Кроме того, bs4
отлично подходит для очистки содержимого html с сайта (например, если бы вы получили доступ к этой странице прямо здесь и извлекли все данные с этой страницы). Но для данных, которые уже отформатированы в формате json, вам не нужно использовать bs4
, и вы можете использовать что-то вроде requests
приведенного выше. Гораздо проще анализировать данные json, чем html/xml
данные, поэтому, если данные уже в этом формате, вам повезло. Вы также можете выполнить синтаксический анализ с bs4
помощью, но это не обязательно:
import json
data=json.loads(str(soup))
Комментарии:
1. Поэтому я использовал метод json. Однако все данные хранятся в одном заголовке словаря, который в моем случае является data [‘content’] . В этом словаре содержимого находятся все остальные строки содержимого. Однако сейчас они находятся в строковом формате. Как мне теперь получить доступ к каждому из разных заголовков в этом словаре? Я попытался выполнить json.load(), но он выдал мне ошибку «json.decoder.JSONDecodeError: Ожидаемое значение: строка 7, столбец 2 (символ 14)»
2. @lilexperimenter о, вероятно, сами данные — это html. Вам нужно будет проанализировать это в
bs4
методе для анализа html.3. ах, НАКОНЕЦ-ТО! Это сработало так хорошо. Большое спасибо за вашу помощь! Мне нужно больше прочитать о модуле запросов… это кажется такой простой проблемой, которую я должен был знать. Довольно деморализующе, что я не могу разобраться в этом сам :/
4. @lilexperimenter круто, если это то, что вам нужно, тогда вы можете принять ответ. Или, если нет, дайте мне знать, что еще нужно, и я постараюсь помочь!