2016-11-12 16 views
1

后,我试图得到答案弗朗这一部分:BeautifulSoup得到conten next_silbling

<div class="beschreibung"> 
<!-- Jahr --> 
<strong class="main">Jahr:</strong> 
2008<br/> 
<!-- Jahr Ende --> 
<!-- Genre --> 
<strong class="main">Genre:</strong> 
Action | Krimi | Drama<br/> 
<!-- Genre Ende --> 
<!-- Sprache --> 
<strong class="main">Sprache:</strong> 
Deutsch DTS-HD | Englisch DTS-HD<br/> 
<!-- Sprache Ende --> 
<!-- Länge --> 
<strong class="main">Laufzeit:</strong> 
90 Minuten<br/> 
<!-- Länge Ende --> 

所以我尝试如下:

for details in soup_.find_all("div", {"class" : "beschreibung"}): 
    info = {details.text.rstrip(':'): details.next_sibling.strip() for s in details.find_all("strong")} 
    print (repr(info)) 

我得到respose:

{u"\n\nJahr: \r\n2010\n\n\nGenre: \r\nThriller | Mystery\n\n\nSprache: \r\nDeutsch DTS\n\n\nLaufzeit: \r\n76 Minuten\n\n": u''} 

但我怎样才能得到“Jahr”,“Sprache”等正确的内容...

回答

2

你的意思是这样的:

from bs4 import BeautifulSoup 
content = """ 
<div class="beschreibung"> 
<!-- Jahr --> 
<strong class="main">Jahr:</strong> 
2008<br/> 
<!-- Jahr Ende --> 
<!-- Genre --> 
<strong class="main">Genre:</strong> 
Action | Krimi | Drama<br/> 
<!-- Genre Ende --> 
<!-- Sprache --> 
<strong class="main">Sprache:</strong> 
Deutsch DTS-HD | Englisch DTS-HD<br/> 
<!-- Sprache Ende --> 
<!-- Lange --> 
<strong class="main">Laufzeit:</strong> 
90 Minuten<br/> 
<!-- Lange Ende --> 
</div> 
""" 
soup = BeautifulSoup(content, "html.parser") 
info = {} 
for details in soup.find_all("div", {"class" : "beschreibung"}): 
    for strong in details.find_all('strong'): 
     info[strong.text.strip(':')] = strong.next_sibling.strip('\n') 
    print info 

此代码将导致下面的输出:

{u'Genre': u'Action | Krimi | Drama', u'Jahr': u'2008', u'Laufzeit': u'90 Minuten', u'Sprache': u'Deut│ 
sch DTS-HD | Englisch DTS-HD'} 
+0

,但如何处理,如果财产以后像大小: 16:9
'在内容中。因为它总是显示** u'Gr \ xf6 \ xdfe':u'16:9'** – user294015

+0

您可以在使用请求库时解码为unicode内容。 requests.content –

+0

这是我的请求:'req_page = requests.get(hda_url).text'但我真的不知道如何解码到unicode ... – user294015

0
from bs4 import BeautifulSoup 
content = """ 
<div class="beschreibung"> 
<!-- Jahr --> 
<strong class="main">Jahr:</strong> 
2008<br/> 
<!-- Jahr Ende --> 
<!-- Genre --> 
<strong class="main">Genre:</strong> 
Action | Krimi | Drama<br/> 
<!-- Genre Ende --> 
<!-- Sprache --> 
<strong class="main">Sprache:</strong> 
Deutsch DTS-HD | Englisch DTS-HD<br/> 
<!-- Sprache Ende --> 
<!-- Lange --> 
<strong class="main">Laufzeit:</strong> 
90 Minuten<br/> 
<!-- Lange Ende --> 
</div> 
""" 
soup = BeautifulSoup(content, "lxml") 

{i.text.rstrip(':'):i.next_sibling.strip() for i in soup.find_all('strong')} 

out_put:

{'Genre': 'Action | Krimi | Drama', 
'Jahr': '2008', 
'Laufzeit': '90 Minuten', 
'Sprache': 'Deutsch DTS-HD | Englisch DTS-HD'}