You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup从HTML的p标签中提取指定地址文本的方法

解决方法

你可以通过两个判断条件精准定位地址p标签:一是筛选没有任何自定义属性的p标签,二是用正则匹配美国标准地址格式(城市+州缩写+5位邮编),避免误提取空标签或者其他无属性p标签的内容。

修改后的完整代码

import requests
from bs4 import BeautifulSoup
import re

limit = 25

url = f'https://www.counselingcalifornia.com/cc/cgi-bin/utilities.dll/customlist?FIRSTNAME=~&LASTNAME=~&ZIP=&DONORCLASSSTT=&_MULTIPLE_INSURANCE=&HASPHOTOFLG=&_MULTIPLE_EMPHASIS=&ETHNIC=&_MULTIPLE_LANGUAGE=ENG&QNAME=THERAPISTLIST&WMT=NONE&WNR=NONE&WHP=therapistHeader.htm&WBP=therapistList.htm&RANGE=1%2F{limit}&SORT=LASTNAME'
headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36'}

response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
rows = soup.find_all('div', {'class':'row'})
address_list = []
# 美国地址正则:匹配 任意字符, 两位大写字母 五位数字 的格式
addr_pattern = re.compile(r'.+,\s*[A-Z]{2}\s*\d{5}')

for row in rows:
    t=row.find_all('div',class_='col-sm-3')
    for i in t:
        p_tags = i.find_all('p')
        for p in p_tags:
            # 第一个条件:p标签没有任何属性
            if not p.attrs:
                text = p.get_text(strip=True)
                # 第二个条件:文本符合地址格式
                if addr_pattern.match(text):
                    address_list.append(text)
                    print(text)

逻辑说明

  • 筛选无属性p标签:BeautifulSoup的标签对象的attrs属性会返回该标签所有属性的字典,如果字典为空就说明该p标签没有class、id、style等额外属性,符合地址标签的特征
  • 正则校验:避免拿到空的无属性p标签,或者其他不符合地址格式的内容,正则r'.+,\s*[A-Z]{2}\s*\d{5}'可以匹配所有「任意内容+逗号+空格+两位大写州缩写+空格+5位邮编」的标准美国地址格式
  • 提取的所有地址会存在address_list列表中,后续可直接导出为csv或其他格式使用

内容的提问来源于stack exchange,提问作者Amen Aziz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:54:01