/ / Website Scraping mit Python3 & Beautifulsoup 4 - Python, Website, Beautifulsoup, Bildschirmschaben

Website Scraping mit Python3 & BeautifulSoup 4 - Python, Website, beautifulsoup, screen-scraping

Ich fange an, Fortschritte bei einem Website-Scraper zu machen, aber ich habe zwei Probleme. Hier ist der Code zuerst:

import requests
from bs4 import BeautifulSoup

r=requests.get("http://www.nytimes.com")
soup=BeautifulSoup(r.text)

headlines=soup.find_all(class_="story-heading")
for headline in headlines:
print (headline)

Fragen

  • Warum musst du verwenden find_all(class_= blahblahblah) Anstatt einfach find_all(blahblahblah)? Mir ist klar, dass das story-heading ist eine Klasse für sich, aber ich kann nicht einfach den gesamten HTML-Code durchsuchen find_all und die gleichen Ergebnisse erzielen? Die Hinweise für BeautifulSoup zeigen find_all.a, wobei alle Ankertags in einem HTML-Dokument zurückgegeben werden, warum dies nicht der Fall ist find_all("story-heading") das Gleiche tun?

    Liegt es daran, wenn ich es versuche, dann ebenalle Instanzen von "Story-Überschriften" im HTML-Code finden und zurückgeben? Ich versuche, dass Python alles in diesem Tag zurückgibt. Das ist meine beste Vermutung.

  • Warum bekomme ich diesen zusätzlichen Junk-Code? Sollten meine Suchanfragen nur alles im Story-Header-Tag anzeigen? Ich bekomme viel mehr Text, als ich gerade zu spezifizieren versuche.

Antworten:

1 für die Antwort № 1

Mit Beautiful Soup können Sie CSS-Selektoren verwenden. Schau in den Dok für "CSS Selector"

Sie können alle Elemente mit der Klasse "Story-Überschrift" so finden:

soup.find_all(".story-heading")

Wenn Sie stattdessen "nach Id suchen", tun Sie es einfach

soup.find_all("#id-name")