Как использовать Bs4 для очистки содержимого, содержащего HTML-объекты

#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 круто, если это то, что вам нужно, тогда вы можете принять ответ. Или, если нет, дайте мне знать, что еще нужно, и я постараюсь помочь!