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 einfachfind_all(blahblahblah)
? Mir ist klar, dass dasstory-heading
ist eine Klasse für sich, aber ich kann nicht einfach den gesamten HTML-Code durchsuchenfind_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 istfind_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 № 1Mit 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")