我对使用Python进行网络抓取非常陌生,而且我真的很难从HTML中提取嵌套文本(p
中的div
,确切地说)。这是我到目前为止所得到的:
from bs4 import BeautifulSoup
import urllib
url = urllib.urlopen('http://meinparlament.diepresse.com/')
content = url.read()
soup = BeautifulSoup(content, 'lxml')
这很好用:
links=soup.findAll('a',{'title':'zur Antwort'})
for link in links:
print(link['href'])
这种提取工作正常:
table = soup.findAll('div',attrs={"class":"content-question"})
for x in table:
print(x)
这是输出:
<div class="content-question">
<p>[...] Die Verhandlungen über die mögliche Visabefreiung für
türkische Staatsbürger per Ende Ju...
<a href="http://meinparlament.diepresse.com/frage/10144/" title="zur
Antwort">mehr »</a>
</p>
</div>
现在,我想在p
和/p
中提取文字。这是我使用的代码:
table = soup.findAll('div',attrs={"class":"content-question"})
for x in table:
print(x['p'])
然而,Python引发了KeyError
。
答案 0 :(得分:5)
以下代码使用p
“内容问题”查找并打印div
中每个class
元素的文本
from bs4 import BeautifulSoup
import urllib
url = urllib.urlopen('http://meinparlament.diepresse.com/')
content = url.read()
soup = BeautifulSoup(content, 'lxml')
table = soup.findAll('div',attrs={"class":"content-question"})
for x in table:
print x.find('p').text
# Another way to retrieve tables:
# table = soup.select('div[class="content-question"]')
以下是p
中第一个table
元素的打印文本:
[...] DieVerhandlungenüberdiemöglicheVisabefreiungfürtürkischeStaatsbürgerforEnde Juni sind noch nicht abgeschlossen,sodass nicht mit Sicherheit gesagt werden kann,ob es zu diesem Zeitpunkt bereits zu einer Visabefreiung kommt。 Auch diegenauenModalitäteninerSolchen Visaliberalisierung sind noch nicht ausverhandelt。 Prinzipiell ist es jedoch所以,dass Visaerleichterungen bzw。 -liberalisierungen eine FragevonRepiprozitätsind,d.h。 dassdiesefürbeideStaatengeltenmüssten。 [...]