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

BeautifulSoup.find_all()如何筛选item_teaser属性含指定前缀邮编的标签

爬虫代码修正实现方案

原代码问题说明

  • 缺失requests库导入语句,无法发起网络请求
  • 解析XML数据误用了HTML解析器,应使用XML专用解析器保证标签属性识别准确
  • find_all(id="item_teaser")语法错误:你要筛选的是带有item_teaser属性的<item>标签,而非id属性等于item_teaser的元素
  • 没有实现邮编前缀匹配的过滤逻辑

修正后可运行代码

import requests
import re
from bs4 import BeautifulSoup

url = "http://www.ontariogolf.com/app/map/cfeed.php?e=-63&w=-106&n=55&s=36"
# 发起请求加超时避免卡住
xml_resp = requests.get(url, timeout=10)
# 用XML解析器解析内容
soup = BeautifulSoup(xml_resp.content, 'xml')
# 定义要匹配的邮编前缀集合,可自行增减需要的前缀
target_prefix = {'L7J', 'L2S', 'L2O'}
# 存储符合条件的item标签
result_items = []

# 遍历所有item标签
for item in soup.find_all('item'):
    # 拿到item_teaser属性值,不存在则返回空字符串
    teaser = item.get('item_teaser', '')
    # 正则匹配加拿大邮编前3位,匹配规则为:字母+数字+字母 后接空格+后半段邮编,放在字符串末尾
    match = re.search(r'([A-Z]\d[A-Z]) \d[A-Z]\d$', teaser)
    if match:
        post_prefix = match.group(1)
        if post_prefix in target_prefix:
            result_items.append(item)

# 打印符合要求的完整item标签
for item in result_items:
    print(item)

逻辑说明

  • 用XML解析器解析响应内容,保证<item>标签的自定义属性可以被正常读取
  • 先全量获取所有<item>标签,再逐个校验item_teaser属性的邮编前缀
  • 用正则匹配邮编格式,避免地址中其他空格/字符干扰前缀提取,匹配准确率更高

内容的提问来源于stack exchange,提问作者Senad H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:15:04