首页 > 解决方案 > 刮掉class下br标签下的文字

问题描述

我一直在尝试在此页面中抓取地址: https ://www.yellowpages.my/listing/results.php?keyword=boutique&where=selangor&screen=2

br 标签下的地址我很难获取:在此处输入图片描述

我试过的

addresses = page_content.select(' .cbp-vm-address')[0]
address = addresses.get_text(' ', strip=True)
address = list(addresses.stripped_strings)

这并没有给我课堂上的一切

我也试过:

for br in page_content.findAll('br'):
   item = br.next_siblings
   item = list(item)
   print(item)

这给了我如下结果(片段): [<br/>, <br/>, <br/>, <br/>, <br/>, '\n', <a href="/solutions">DigitalSolutions</a>, '\n', <a href="https://www.yellowpages.my/deal/results.php">Deals</a>, '\n', <a class="sign-up" href="https://www.yellowpages.my/profile/add.php">Sign Up</a>, '\n', <a class="sign-up" href="https://www.yellowpages.my/profile/login.php">Login</a>, '\n']

我如何获得地址?在这里抓取相对较新。

标签: python-3.xbeautifulsoup

解决方案


有趣的。我实际上也遇到了这个问题,但是通过</br>在创建汤对象之前替换原始字符串中的所有标签来克服这个问题:

import requests
from bs4 import BeautifulSoup

raw = requests.get('https://www.yellowpages.my/listing/results.php?keyword=boutique&where=selangor&screen=2').text
raw = raw.replace("</br>", "")
soup = BeautifulSoup(raw, 'html.parser')
addresses = [x.text.strip().split("\r\n")[-1].strip() for x in soup.find_all("div", class_='cbp-vm-address')]

尽管如此,我觉得它不是最好的解决方案,因为它在加载汤对象之前对 HTML 进行了预处理,这对我来说并不是最佳实践。


推荐阅读