2017-01-21 3 views
1

ich den zweiten Link extrahieren möchte (das ist der Link für die Nummer ‚2‘) aus dem folgenden HTML-Code:ein bestimmtes ‚div‘ Element Aufruf mit BeautifulSoup

<div class="post-footers"> 
    1 |<a href="index.html?page=2"> 2 </a> 
    |<a href="index.html?page=3"> 3 </a> 
    |<a href="index.html?page=4"> 4 </a> 
</div> 

Also dachte ich, alle zur Ausgabe Dekomprimierung der href in eine Liste und dann das Element mit dem Index 1, wie unten gezeigt:

tags = soup.find("div", class_="post-footer") 
links = tags.get('href') 
print links[1] 

Aber es gibt den Fehler:

newtags.get('href', None) 
AttributeError: 'NoneType' object has no attribute 'get' 

Das bedeutet, dass die Tags leer waren. Also wo im Code habe ich falsch gemacht?

Danke, würde, wenn jemand in der Lage sein, dies zu helfen :)

Antwort

2

Versuchen,

Versuch 1

In [1]: tags = soup.find("div", class_ = "post-footers") 
In [2]: links = [i.attrs['href'] for i in tags.findAll('a')] 
In [3]: print links 

Ergebnis 1

['index.html?page=2', 'index.html?page=3', 'index.html?page=4'] 

Es war ein Schreibfehler in Ihrem Code. Sie haben post-footer anstelle von post-footers verwendet.

Versuch 2

Wenn Sie href als True verwenden, werden Sie alle a wie diese erhalten,

In [28]: tags = soup.find("div", class_ = "post-footers") 
In [31]: links = tags.find_all('a',href=True) 

Ergebnis 2

[<a href="index.html?page=2"> 2 </a>, 
<a href="index.html?page=3"> 3 </a>, 
<a href="index.html?page=4"> 4 </a>] 
+0

Ohh, die schön zu sein scheint. Ich bin etwas neu bei Python. Also, macht mir nichts aus, wenn ich frage - es ist ein normaler Ausdruck, oder? der Teil "i.attrs ..." habe ich nicht verstanden. –

+0

Noch eine weitere Frage: Im Versuch 1 durchsuche ich alle a Tags innerhalb des 'div' Elements. Und 'i.attrs' extrahiert den href-Teil der 'a'-Tags und gibt sie als weitere Liste aus? Danke übrigens. –

+0

@RahulRamesh Ich habe 'List Verständnis 'dort verwendet, Gefunden die alle' a' und wählen Sie die 'href' Teil. –

1

Try this:

Sie können RegEx verwenden, um mit BeautifulSoup

import re 
page2Link = soup.find_all(href = re.compile("(page=2)")) 

print page2Link 
+0

@ piyush-s-wanare re.compile findet Tags mit passendem Text richtig? Wenn das der Fall ist, warum haben Klammern zwischen "Seite = 2" gestellt? –

+0

Klammern erwähnen, dass es Regex enthält. –

Verwandte Themen