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

如何用BS4格式化网页爬取数据:调整地址输出为结构化表格

修改方案:将Aldi约克门店地址拆分为结构化表格

核心思路

  • 按单门店地址组提取原始数据(每个门店对应街道、城市、邮编3段文本)
  • 将分组后的地址映射到line1/city/postcode字段,用pandas生成结构化表格

修改后的完整代码

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 1. 请求目标页面(替换为Aldi约克门店列表的实际URL)
url = "https://www.aldi.co.uk/stores/york"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 2. 提取所有地址文本(需根据实际页面结构调整选择器)
# 示例:假设地址存放在class为"store-address"的容器下的<p>标签中
address_elements = soup.select(".store-address p")
address_texts = [elem.get_text(strip=True) for elem in address_elements]

# 3. 按单门店拆分地址(每3项对应一个门店的街道/城市/邮编)
store_addresses = []
for i in range(0, len(address_texts), 3):
    # 避免索引越界,仅当存在完整的3项时添加数据
    if i + 2 < len(address_texts):
        store_addresses.append({
            "line1": address_texts[i],
            "city": address_texts[i+1],
            "postcode": address_texts[i+2]
        })

# 4. 生成结构化表格并输出
df = pd.DataFrame(store_addresses)
print(df)
# 可选:保存为CSV文件
df.to_csv("aldi_york_stores.csv", index=False)

关键调整说明

  1. 地址拆分逻辑适配:

    • 如果门店地址是单个带换行的字符串(如"123 High Street\nYork\nYO1 2AB"),替换步骤3的代码为:
      store_addresses = []
      for addr_str in address_texts:
          parts = addr_str.split("\n")
          if len(parts) >= 3:
              store_addresses.append({
                  "line1": parts[0].strip(),
                  "city": parts[1].strip(),
                  "postcode": parts[2].strip()
              })
      
  2. 页面选择器校准:

    • 用浏览器开发者工具查看门店地址的HTML结构,调整soup.select()的参数(比如替换.store-address p为实际的标签/类名组合)。
  3. 异常防护:

    • 添加长度校验逻辑,避免因页面结构变动导致的索引越界问题。

内容的提问来源于stack exchange,提问作者S L

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:27:35