如何使用BeautifulSoup从指定HTML文本中提取地址信息?
解决BeautifulSoup无法提取地址的问题
下面针对不同常见的HTML地址结构,给出对应的提取方案,确保能输出你需要的Address : 183 Pelham Wood Dr, Rock Hill, SC 29732.格式。
情况1:地址是单个标签内的完整文本
如果地址直接放在一个单独的标签里(比如带特定class的<p>或<div>),直接提取文本即可:
示例HTML:
<p class="full-address">183 Pelham Wood Dr, Rock Hill, SC 29732</p>
对应Python代码:
from bs4 import BeautifulSoup html = ''' <p class="full-address">183 Pelham Wood Dr, Rock Hill, SC 29732</p> ''' soup = BeautifulSoup(html, 'html.parser') # 定位到包含地址的标签 address_tag = soup.find('p', class_='full-address') if address_tag: # 提取并清理文本(去掉多余空格换行) clean_address = address_tag.get_text(strip=True) print(f"Address : {clean_address}.") else: print("未找到地址元素")
情况2:地址分散在多个子标签中
如果地址被拆分成多个子元素(比如街道、城市、州、邮编各占一个标签),需要拼接各部分内容:
示例HTML:
<div class="address-group"> <span class="street">183 Pelham Wood Dr</span>, <span class="city">Rock Hill</span>, <span class="state">SC</span> <span class="zip">29732</span> </div>
对应Python代码:
from bs4 import BeautifulSoup html = ''' <div class="address-group"> <span class="street">183 Pelham Wood Dr</span>, <span class="city">Rock Hill</span>, <span class="state">SC</span> <span class="zip">29732</span> </div> ''' soup = BeautifulSoup(html, 'html.parser') address_container = soup.find('div', class_='address-group') if address_container: # 提取所有子span的文本并清理 parts = [tag.get_text(strip=True) for tag in address_container.find_all('span')] # 按要求格式拼接 full_address = f"{parts[0]}, {parts[1]}, {parts[2]} {parts[3]}" print(f"Address : {full_address}.") else: print("未找到地址容器")
情况3:地址使用标准<address>标签
如果页面用了HTML标准的<address>标签,直接定位该标签即可:
示例HTML:
<address>183 Pelham Wood Dr, Rock Hill, SC 29732</address>
对应Python代码:
from bs4 import BeautifulSoup html = ''' <address>183 Pelham Wood Dr, Rock Hill, SC 29732</address> ''' soup = BeautifulSoup(html, 'html.parser') address_tag = soup.find('address') if address_tag: clean_address = address_tag.get_text(strip=True) print(f"Address : {clean_address}.") else: print("未找到address标签")
排查要点
- 检查你用的标签名、class名是否和实际HTML完全一致,注意大小写和拼写
- 若页面动态加载地址,可能需要用
requests-html或Selenium先渲染页面再解析 - 提取文本时用
strip=True可以自动去除多余的空格、换行符
内容的提问来源于stack exchange,提问作者Ajay Kk
相关产品推荐
相关产品推荐

