2016-04-27 2 views
1

Ich habe eine HTML-Struktur wie diesePython: Wie Text des ersten Anker-Tages zu finden, mit BeautifulSoup

<p class="title"> 
    <a href="abc.com"> 
    Story 
    </a> 
    <span class="domain"> 
    <a href="xyz.com">comments</a> 
    </span> 
</p> 

I Text von ersten Anker-Tag extrahiert werden soll, das heißt Story

Hier ist, wie ich

:

soup = BeautifulSoup(html, 'html.parser') 
soup.prettify() 
for link in soup.find_all(class_='title'): 
     print link.findNext('a').text 

und Ausgabe am Beautifulsoup mit Text von Anker-Tag zu extrahieren

Story 

Comments 

Aber ich möchte nur Text der ersten Anker-Tag zu extrahieren, das ist Story. Wie kann ich dies mit BeautifulSoup in Python tun?

Antwort

1

Sie können nur den ersten a Tag zugreifen, indem

tun
print link.a.text 

Um

link.a.text.strip() 
0

das zusätzliche Leerzeichen Streifen können Sie tun, indem Verkettungs die find() Anrufe und mit get_text() Methode:

soup.find("p", class_="title").a.get_text(strip=True) 

wobei .a äquivalent zu .find("a") in BeautifulSoup ist.

Oder mit einem CSS selector:

soup.select_one("p.title > a").get_text(strip=True) 
+0

Ich habe diesen Fehler Attribute: ‚NoneType‘ Objekt dann kein Attribut ‚get_text‘ –

+0

@ShoaibAkhtar hat, ist die HTML anders aus, was Ihnen präsentiert. – alecxe

0

Wenn Sie nur den Text des ersten Anker wollen, dann brauchen Sie nicht find die Klasse.

Sie haben nichts über die class="title" gesagt.

In [9]: html = """ 
<p class="title"> 
    <a href="abc.com"> 
    Story 
    </a> 
    <span class="domain"> 
    <a href="xyz.com">comments</a> 
    </span> 
</p> 
""" 
In [10]: soup = BeautifulSoup(html, "html.parser") 
In [11]: soup.a.text.strip() 
Out[11]: u'Story' 
+0

angenommen, über HTML-Struktur wiederholt sich mehrere Male dann wie kann ich erste Anchor-Tag in allen Tag finden, deren Klasse ist "Titel" –

+0

Meine Antwort wird immer die allerersten Anchor-Tag unabhängig von Klassen zu finden. Wenn Sie den ersten Anker innerhalb eines Elements mit einer Klasse haben möchten, sehen Sie sich die anderen Antworten an –

Verwandte Themen