2017-07-18 4 views
0

Ich realisiere, dass es wahrscheinlich eine sehr spezifische Frage ist, aber ich kämpfe, um einige Teile des Textes loszuwerden, die ich den folgenden Code benutze. Ich brauche einen einfachen Artikeltext, den ich finde, indem ich "p" -Tags unter "Klasse" finde: "mol-para-with-font". Irgendwie bekomme ich viele andere Sachen wie Autoren-Byline, Datumsstempel und vor allem Text von Anzeigen auf der Seite. Wenn ich html untersuche, kann ich nicht sehen, dass sie dieselbe "Klasse" enthalten: "mol-para-with-font", also bin ich verwirrt (oder ich habe es schon zu lange angeguckt ...). Ich weiß, dass es hier viele HTML-Gurus gibt, also werde ich für deine Hilfe dankbar sein.Beautifulsoup: schließen Sie unerwünschte Teile aus

Mein Code:

import requests 
import translitcodec 
import codecs 

def get_text(url): 
    r = requests.get(url) 
    soup = BeautifulSoup(r.content, "lxml") 

    # delete unwanted tags: 
    for s in soup(['figure', 'script', 'style', 'table']): 
     s.decompose() 

    article_soup = [s.get_text(separator="\n", strip=True) for s in soup.find_all(['p', {'class':'mol-para-with-font'}])]  
    article = '\n'.join(article_soup) 

    text = codecs.encode(article, 'translit/one').encode('ascii', 'replace') #replace traslit with ascii 
    text = u"{}".format(text) #encode to unicode 
    print text 

url = 'http://www.dailymail.co.uk/femail/article-4703718/How-Alexander-McQueen-Kate-s-royal-tours.html' 
get_text(url) 

Antwort

1

Nur 'p' es mit class="mol-para-with-font"? Dies wird es Ihnen geben:

import requests 
from bs4 import BeautifulSoup as BS 
url = 'http://www.dailymail.co.uk/femail/article-4703718/How-Alexander-McQueen-Kate-s-royal-tours.html' 
r = requests.get(url) 
soup = BS(r.content, "lxml") 

for i in soup.find_all('p', class_='mol-para-with-font'): 
    print(i.text) 
+0

Vielen Dank. Ich kann jetzt sehen, dass ich mit zu vielen Klammern usw. davongetragen wurde ... :) – aviss

Verwandte Themen