2016-06-23 35 views
1

Ich versuche, eine Nachrichtenwebsite zu crawlen, und ich muss einen Parameter ändern. Habe ich es mit dem nächsten Code ersetzen mit:Wie konvertiert man einen String in ein BeautifulSoup-Objekt?

while i < len(links): 
    conn = urllib.urlopen(links[i]) 
    html = conn.read() 
    soup = BeautifulSoup(html) 
    t = html.replace('class="row bigbox container mi-df-local locked-single"', 'class="row bigbox container mi-df-local single-local"') 
    n = str(t.find("div", attrs={'class':'entry cuerpo-noticias'})) 
    print(p) 

Das Problem ist, dass „t“ Typ string ist und findet mit Attributen gilt nur für Typen <class 'BeautifulSoup.BeautifulSoup'>. Weißt du, wie ich "t" in diesen Typ umwandeln kann?

Antwort

4

tun Sie einfach den Ersatz vor Parsen:

html = html.replace('class="row bigbox container mi-df-local locked-single"', 'class="row bigbox container mi-df-local single-local"') 
soup = BeautifulSoup(html, "html.parser") 

Beachten Sie, dass es auch möglich wäre (ich selbst bevorzugt würde sagen), um die HTML zu analysieren, suchen Sie das Element (e) und modifiziert, um die Attribute ein Tag Instanz, zum Beispiel:

soup = BeautifulSoup(html, "html.parser") 
for elm in soup.select(".row.bigbox.container.mi-df-local.locked-single"): 
    elm["class"] = ["row", "bigbox", "container", "mi-df-local", "single-local"] 

Beachten Sie, dass class eine spezielle multi-valued attribute ist - deshalb setzen wir den Wert auf eine Liste einzelner Klassen.

Demo:

from bs4 import BeautifulSoup 

html = """ 
<div class="row bigbox container mi-df-local locked-single">test</div> 
""" 

soup = BeautifulSoup(html, "html.parser") 
for elm in soup.select(".row.bigbox.container.mi-df-local.locked-single"): 
    elm["class"] = ["row", "bigbox", "container", "mi-df-local", "single-local"] 

print(soup.prettify()) 

nun sehen, wie die div Elementklassen aktualisiert wurden:

<div class="row bigbox container mi-df-local single-local"> 
test 
</div> 
+1

Sie haben für diese muss man warten;) –

Verwandte Themen