So laden Sie alle Einträge in einer Endlosrolle gleichzeitig, um den HTML-Code in Python zu analysieren

Ich versuche Informationen aus zu extrahierendiese Seite. Auf der Seite werden jeweils 10 Elemente geladen, und ich muss einen Bildlauf durchführen, um alle Einträge zu laden (insgesamt 100). Ich kann den HTML-Code analysieren und die Informationen abrufen, die ich für die ersten 10 Einträge benötige, aber ich möchte alle Einträge vollständig laden, bevor ich den HTML-Code analysiere.

Ich benutze Python, Anfragen und BeautifulSoup. Ich analysiere die Seite beim Laden mit den ersten 10 Einträgen folgendermaßen:

from bs4 import BeautifulSoup
import requests
s = requests.Session()
r = s.get('https://medium.com/top-100/december-2013')
page = BeautifulSoup(r.text)

Damit werden aber nur die ersten 10 Einträge geladen. Also habe ich mir die Seite angesehen und die AJAX-Anforderung zum Laden der nachfolgenden Einträge verwendet. Ich bekomme eine Antwort, aber sie ist in einem funky JSON und ich würde lieber den HTML-Parser verwenden, anstatt JSON zu analysieren. Hier ist der Code:

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

Das gibt mir die Daten, aber es ist in einem sehr langen und verworrenen JSON, ich würde viel lieber alle Daten auf der Seite laden und einfach den HTML-Code analysieren. Darüber hinaus liefert der gerenderte HTML-Code mehr Informationen als die JSON-Antwort (d. H. Der Name des Autors anstelle einer undurchsichtigen Benutzer-ID usw.). Es gab eine ähnliche FrageHier aber keine relevanten Antworten. Idealerweise möchte ich den POST anrufen unddann Fordere den HTML-Code an und analysiere ihn, aber das konnte ich nicht.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage