首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法提取br文本(beautifulSoup) python抓取

无法提取br文本(beautifulSoup) python抓取
EN

Stack Overflow用户
提问于 2021-02-24 18:31:39
回答 1查看 53关注 0票数 0

我试图从下面的html源中提取"br“中的地址,但是我无法提取,也不知道作为属性应该提供什么。我正在使用下面的代码提取地址,但它并不像预期的那样工作。任何帮助都是非常感谢的。

编辑:我已经复制了下面代码中缺失的部分。

完整源代码:

代码语言:javascript
复制
[<div class="card dl">
 <span id="section-1"></span>
 <div class="card-header pb-1 px-1"><!-- Betriebsname -->
 <h3 class="card-title mb-0">
 <!-- <img src="https://www.tk-aerztefuehrer.de/TK/images/EntryType_person1.svg" alt=" " /> &nbsp;-->Praxis Dr. Christina Balduhn </h3>
 <!-- ***** HINWEIS PRIVAT ***** -->
 <!-- ************************** -->
 </div>
 <div class="card-body px-1"><!--  panel-body - einzelne Eintrag anfang   -->
 <div class="row">
 <div class="col-sm-5">
 <strong><a href="https://www.tk-aerztefuehrer.de/TK/Suche_SN/index.js?a=DD&amp;sid=&amp;e_id=830057&amp;Db=" style="text-decoration:underline;" title="Details zum Eintrag ansehen">Frau Dr. med. Christina Balduhn</a></strong>
 <br/><span style="color:#666;">Fachärztin für Allgemeinmedizin</span>
 <!--  ********
 <br /><br><span style="color:#7fb7c4; font-weight:700;">Praxis jetzt geöffnet</span>
 
 
 
 <p class="mt-3">Telefon: <a href="tel:+4952531717" class="it">0 52 53 / 17 17</a></p>
 
 **********  -->
 <br/>
 <!-- Fachgebiet:<br>Allgemeinmedizin<br><br />  -->
 <!-- ********* ArztImage Neu ******* -->
 <!-- ************** ArztImage Neu e ************* -->
 </div><!--  #sm-5 end  -->
 <div class="col-sm-4">
 <!--  ***********************************************  -->
 <div class="d-none d-md-block">
 <a class="btn btn-outline-secondary arrow-r" href="https://www.tk-aerztefuehrer.de/TK/Suche_SN/index.js?a=DD&amp;sid=&amp;e_id=830057&amp;Db=" title="Zur Detailseite">Zur Detailseite</a>
 <!-- OTB Termin finden desktop  **** -->
 <!-- ***  -->
 </div>
 <!-- <img class="mapicons" src="https://www.tk-aerztefuehrer.de/TK/images/GoogleImages/A.png" alt=" " /><br>  -->
 <!--  *********
 <br>
 <img src="https://www.tk-aerztefuehrer.de/TK/img/entfernung.svg" alt=" " />  0.2 km<br />
 <br>
 
 
 
 Tegelhof 1<br />
 33014 Bad Driburg<br />
 <br />
 *********  -->
 <p class="show-xs show sm"></p>
 </div><!--  #sm-4 end  -->
 <div class="col-sm-3">
 <!-- ###################################################
 <div>
 <a class="btn btn-primary" title="Details zum Eintrag ansehen" href="">Details zum Eintrag</a>
 </div>
 
 <div style="margin:1em 0;">
 <a class="btn btn-default" title="Bewertung geben" href="https://www.tk-aerztefuehrer.de/TK/Arzt-Auskunft/Suche_SN/index.js?a=FR&e_id=830057&db=">Bewertung geben</a>
 </div>
 
 
 <span class="empf-0" title="Noch keine Bewertung(en) vorhanden">&nbsp;0 Bewertung(en)</span>
 ############################
 
 <div style="margin: 0 0 1em 0;">
 <a style="width:70%;" class="btn btn-primary" title="Bewertung geben" href="https://www.tk-aerztefuehrer.de/TK/Suche_SN/index.js?a=FR&e_id=830057&db=">Bewertung geben <i class="fa fa-angle-right" style="padding-left:1.1em;"></i></a>
 </div>
 
 ################################################  -->
 <!-- Bewertungstatus (1-5 Punkte)  -->
 <img src="https://www.tk-aerztefuehrer.de/TK/img/rategrade-0.png" title="Keine Bewertungen vorhanden"/>
 <br/>
 <span class="empf-0" title="Noch keine Bewertung(en) vorhanden">0 Bewertung(en)</span>
 <!--  ***********************  OTB  ******************
 ******************************************  -->
 </div><!-- sm-3 end -->
 </div><!--   end row -->
 <div class="row"><!-- Eintrag End - Abstand zw. Einträge -->
 <div class="col-sm-12">
 <!--  ************  OTV  *************  -->
 <!--  ******** 
 <!--  ************  OTV e  *************  -->
 </div><!-- sm-12 end -->
 </div><!--   end row  -->
 <!--  2020 A  -->
 <!--     ###########  Row 2 ################# -->
 <div class="row">
 <div class="col-sm-5 py-2">
 <br/><span style="color:#7fb7c4; font-weight:600;">Praxis jetzt geöffnet</span>
 <p class="mt-5 d-none d-md-block">Telefon: <a class="it" href="tel:+4952531717">0 52 53 / 17 17</a></p>
 </div><!-- sm-5 end -->
 <div class="col-sm-4 pt-2">
 <!-- <img class="mapicons" src="https://www.tk-aerztefuehrer.de/TK/images/GoogleImages/A.png" alt=" " /><br>  -->
 <br/>
 <img alt=" " src="https://www.tk-aerztefuehrer.de/TK/img/entfernung.svg"/>  0.2 km<br/>
 <span class="pt-3 d-none d-md-block"></span>
 Tegelhof 1<br/>
 33014 Bad Driburg<br/>
 </div><!-- sm-4 end -->
 <div class="col-sm-3">
 </div><!-- sm-3 end -->
 </div><!--   end row  -->
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-24 18:57:33

你发的html已经坏了。在不完全注释中有html标记。<!-*之后的所有内容都无效。我认为在那条线被移除之前,这是行不通的。如果您在该html块上启动BeautifulSoup,它将不包括您要获取的文本。但如果你删除不完整的评论,它会的。如果您无法编辑此网页,则可以将该html视为字符串,并将<!-*,然后在BeautifulSoup中引用固定的html字符串。

可能有更好的方法来做到这一点,但这将获得您想要的信息,通过引用上一个最近的标签img,并使用它作为锚找到地址文本。

代码语言:javascript
复制
addressLine1 = str(soup.find('img', class_='').findNextSibling(text=True).findNextSibling(text=True).findNextSibling(text=True)).strip()
# Am Rathausplatz 4
addressLine2 = str(soup.find('img', class_='').findNextSibling(text=True).findNextSibling(text=True).findNextSibling(text=True).findNextSibling(text=True)).strip()
# 33014 Bad Driburg

完整的例子:

代码语言:javascript
复制
from bs4 import BeautifulSoup

# remove <!-- *********
html = """<div class="d-none d-md-block">
 <a class="btn btn-outline-secondary arrow-r" href="https://www.tk-aerztefuehrer.de/TK/Suche_SN/index.js?a=DD&amp;sid=&amp;e_id=799433&amp;Db=" title="Zur Detailseite">Zur Detailseite</a>
 <!-- OTB Termin finden desktop  **** -->
 <!-- ***  -->
 </div>
 <!-- <img class="mapicons" src="https://www.tk-aerztefuehrer.de/TK/images/GoogleImages/E.png" alt=" " /><br>  -->
 <br>
 <img src="https://www.tk-aerztefuehrer.de/TK/img/entfernung.svg" alt=" " />  0.3 km<br />
 <br>

 Am Rathausplatz 4<br />
 33014 Bad Driburg<br />
 <br />"""
soup = BeautifulSoup(html, 'lxml')  # if you use html.parser the code below will be different

# find <img> element first, then get text element next to it
addressLine1 = str(soup.find('img', class_='').findNextSibling(text=True).findNextSibling(text=True).findNextSibling(text=True)).strip()
# Am Rathausplatz 4
addressLine2 = str(soup.find('img', class_='').findNextSibling(text=True).findNextSibling(text=True).findNextSibling(text=True).findNextSibling(text=True)).strip()
# 33014 Bad Driburg

print(addressLine1)
print(addressLine2)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66356814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档