Как извлечь полный html-код с помощью Beautifulsoup с веб-сайта с обновленной подачей? - PullRequest
0 голосов
/ 22 апреля 2019

Я хочу построить корпус с сообщениями из 9gag ленты (а позже и других изображений). Для этого я попытался извлечь исходный HTML-код. К сожалению, как только я хочу найти статьи из ленты в этом html-коде, создается впечатление, что статьи не были извлечены вместе с html-кодом. Использование .find () всегда возвращает -None-, когда я ищу что-то в ленте.

Я использовал lxml, html.parser и html5lib на этом этапе:

soup = BeautifulSoup(source, 'html5lib')

Я искал множество ключевых слов, которые показывались в коде, который мне показал мой браузер, на данный момент:

entry = soup.find('div')

Сравнивая код в моем браузере-инспекторе и в переменной-супе, я получаю разные результаты. Инспектор находит ключевые слова, которые переменная супа не находит.

Я попытался изменить вывод функции requests.get с .text на .content, но нужный код все равно не появляется

##get source text of 9gag
source = requests.get('https://9gag.com').text

##make source a soup-type
soup = BeautifulSoup(source, 'html5lib')

##clip out the needed code of html for entrys
entry = soup.find('div id')

Как мне получить полный код канала 9gag и код, который формирует отдельные сообщения?

Что еще могло пойти не так?

1 Ответ

1 голос
/ 22 апреля 2019

Похоже, что данные принимаются в виде JSON, поэтому для этой задачи было бы лучше использовать только библиотеки requests и JSON. поэтому ваш код должен выглядеть примерно так:

import requests
import json

url = "https://9gag.com"
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:66.0) Gecko/20100101 Firefox/66.0"}
req = requests.get(url, headers=headers).text

json_raw = req[req.index("{\"page\":"):req.index("}})")+2]

posts = json.loads(json_raw)["data"]['posts']

Надеюсь, это поможет

...