Я пытаюсь извлечь информацию из эту страницу. Страница загружает 10 элементов за раз, и мне нужно прокрутить, чтобы загрузить все записи (всего 100). Я могу разобрать HTML и получить информацию, которая мне нужна для первых 10 записей, но я хочу полностью загрузить все записи перед разбором HTML.
Я использую python, запросы и BeautifulSoup. Способ анализа страницы, когда он загружается с помощью первых 10 записей, выглядит следующим образом:
from bs4 import BeautifulSoup
import requests
s = requests.Session()
r = s.get('https://medium.com/top-100/december-2013')
page = BeautifulSoup(r.text)
Но это только загружает первые 10 записей. Поэтому я просмотрел страницу и получил запрос AJAX, который использовался для загрузки последующих записей, и я получаю ответ, но он находится в забавном JSON, и я предпочел бы использовать парсер HTML вместо разбора JSON. Здесь код:
from bs4 import BeautifulSoup
import requests
import json
s = requests.Session()
url = 'https://medium.com/top-100/december-2013/load-more'
payload = {"count":100}
r = s.post(url, data=payload)
page = json.loads(r.text[16:]) #skip some chars that throw json off
Это дает мне данные, но в очень длинном и запутанном JSON я бы скорее загрузил все данные на странице и просто проанализировал HTML. Кроме того, отображаемый HTML предоставляет больше информации, чем ответ JSON (т.е. Имя автора вместо неясного идентификатора пользователя и т.д.). Здесь был аналогичный вопрос , но нет соответствующие ответы. В идеале я хочу сделать POST-вызов, а затем запросить HTML-код и проанализировать его, но я не смог этого сделать.