Python BeautifulSoup Website Crawler?
Hallo,
ich wollte mal nachfragen, ob hier jemand mit BeautifulSoup Erfahrung hat. Ich versuche den Inhalt einer Website zu crawlen. Das funktioniert auch. Bei manchen Seiten aber überhaupt nicht. Da scheint der page content einfach nicht zu existieren.
Woran könnte das liegen? Am Code kanns ja nicht liegen. Aber der Vollständigkeit halber, hier der Code:
page = requests.get(url)
soup = BeautifulSoup(page.content, "html.parser")
for tag in soup.find_all('title'):
print("Tag found!")
Es ist sogar so, dass sich dann sogar die Anwendung beendet.
Folgendes wird in der Konsole ausgegeben:
Process finished with exit code -1073740791 (0xC0000409)
Ich schätze dass es bereits bei dem request ein Problem gibt. Könnten dass irgendwelche Sicherheitsmechanismen sein?
1 Antwort
Lass dir den Response einmal ausgeben und schau, ob in ihm überhaupt die Elemente zu finden sind, die du suchst. Hierbei kannst du auch mit dem Seitenquelltext abgleichen, den du über deinen Webbrowser für die Webseite aufrufen kannst (hierbei ist nicht die Inspektoransicht der Webentwicklungstools gemeint, sondern explizit der Kontextmenüpunkt Seitenquelltext anzeigen).
Nicht alle Elemente werden stets mit dem ersten Response kreiert. Es könnten auch Inhalte via JavaScript nachgeladen werden (solche Inhalte werden in der Seitenquelltextansicht nicht angezeigt, dafür aber im Webinspektor). Wenn dies der Fall ist, solltest du statt BS4 ein Tool wie Selenium verwenden. Mit dem kannst du auf Inhalte warten.
Noch ein anderer Grund könnte vielleicht sein, dass der HTML Parser scheitert, weil das HTML der Seite invalid ist.
Danke dir.
Die Response hatte ich geprüft. Die war null, bzw tatsächlich nichts. Hatte die Response ausgegeben. Keinerlei Anzeige. Selbst im Debugger wurde nichts angezeigt. Nicht einmal null. Bei einer Seite, bei der es funktionierte, hatte ich Status 200 zurückbekommen. Am Ende lag am Javascript. Der Inhalt wurde nachgeladen. Ich habe auch festgestellt, dass es hier und da Probleme mit JINJA2 Templateverererbung gibt.
Ich hatte die Anwendung zuerst mit PyQT5 geschrieben. Hatte auch gelesen, dass wohl PyQT5 wohl hier und da Probleme mit BeautifulSoup hat. Hab dann mal aus Spaß, eine Flaskanwendung erstellt. Gleicher Code. Und siehe da, da wurden mir dann Exceptions ausgegeben.