Ich versuche, Geschichten aus nbcnews.com zu extrahieren. Im Moment habe ich den folgenden Code:Nachrichtenartikel in Python mit BeautifulSoup erhalten
import urllib2
from bs4 import BeautifulSoup
# The page that I'm getting stories from
url = 'http://www.nbcnews.com/'
data = urllib2.urlopen(url)
soup = BeautifulSoup(data, 'html.parser')
#This is the tag and class that chrome told me "top stories" are stored in
this = soup.find_all('div', attrs={"class": "col-sm-6 col-md-8 col-lg-9"})
#Get the a tags in the previous tag (this is the part that returns FAR too many links
link = [a for i in this for a in i.find_all('a')]
#Get the titles (This works)
title = [a.get_text() for i in link for a in i.find_all('h3')]
#The below strips all newlines and tabs from the title name
newtitle = []
for i in t:
s = ' '.join(i.split())
if s in newtitle:
pass
else:
newtitle.append(s)
print len(link)
print len(title)
Als ich das Skript ausführen, ist der „Titel“ -Liste (meist) korrekt mit leichten Variationen auf den Titelnamen vor Ort (Titelname ist kein Problem, wenn es in der Nähe zu der gleichen Sache)
Mein Problem ist, dass die "Link" -Liste Links von überall zu enthalten scheint? Kann mir jemand dabei helfen?
Oder, wenn möglich, gibt es eine API für etwas ähnliches? Ich möchte wirklich nicht das Rad neu erfinden, um Nachrichtenartikel zu bekommen, wenn ich es vermeiden kann.
EDIT: einen Tippfehler in einem Variablennamen
Vielen Dank, mein Herr, ich habe mit grundlegenden Webseiten mit BS4 herumgespielt, aber nach dem Aufholen von HTML wollte ich versuchen, um komplexere Seiten zu navigieren. +1 für dich. Danke, dass du mir geholfen hast. Dies wird eine schöne Ergänzung zu meinem Sprachassistenten sein. Für was sind Nachrichtenartikel gut, wenn Sie mit dem Falschen verbunden sind, oder? ;) – Jebby
Gern geschehen. Bitte akzeptiere diese Antwort, wenn es dein Problem gelöst hat, es wird mir die Punkte dafür geben. Danke :) –
Ich bin im Moment nicht zu Hause, also kann ich den Code nicht testen. Wenn ich nach Hause komme, werde ich testen, ob es funktioniert, ich werde die Antwort akzeptieren. – Jebby