2016-04-11 14 views
-3

Ich fange an, Fortschritte auf einem Website-Scraper machen, aber ich habe in zwei Haken geraten. Hier ist der Code zuerst:Website-Scraping mit python3 & beautifulsoup 4

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 ein Sie haben find_all(class_= blahblahblah) verwenden Anstatt nur find_all(blahblahblah)? Ich weiß, dass die story-heading eine Klasse für sich ist, aber kann ich nicht einfach alle HTML mit find_all suchen und die gleichen Ergebnisse erhalten? Die Notizen für BeautifulSoup zeigen find_all.a alle Anker-Tags in einem HTML-Dokument zurück, warum wird das gleiche tun?

    Ist es, weil, wenn ich es versuche, es alle Fälle von "story-heading" innerhalb der HTML finden und diese zurückgeben? Ich versuche Python zu bekommen, um alles in diesem Tag zurückzugeben. Das ist meine beste Schätzung.

  • Warum bekomme ich all diesen zusätzlichen Junk-Code? Sollten meine Anfragen, alles zu finden, einfach alles im Story-Header-Tag anzeigen? Ich bekomme viel mehr Text als das, was ich gerade versuche zu spezifizieren.

+0

Formatieren Sie Ihren Code als Code und nicht nur normalen Text in der Post, damit wir es lesen können – Keatinge

Antwort

1

Schöne Soup können Sie CSS-Selektoren verwenden. Schauen Sie in die doc für „CSS-Selektor“

Sie alle Elemente mit Klasse „Geschichten Überschrift“ wie so finden:

soup.find_all(".story-heading") 

Wenn stattdessen wird es Sie suchen ids nur

tun
soup.find_all("#id-name")