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

从无href的span元素提取URL及相关数据的技术求助

正确的数据提取方案

原代码的核心问题

  • CSS选择器完全不符合页面实际结构(比如$0、fa-fa.link这类错误的类名)
  • 直接写入BeautifulSoup对象而非提取文本,导致CSV内容混乱
  • 未处理元素不存在的边界情况,容易引发报错
  • 手动拼接CSV内容不规范,缺乏对分隔符的处理

修正后的代码

import requests
from bs4 import BeautifulSoup
import csv

# 目标URL
url = 'https://www.flavortownusa.com/locations'

# 发送请求(添加headers模拟浏览器,避免被拦截)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
page = requests.get(url, headers=headers)
page.raise_for_status()  # 请求失败时抛出异常

# 解析页面
soup = BeautifulSoup(page.content, 'html.parser')
lists = soup.find_all('div', class_='listing-item-inner')

# 写入CSV文件
with open('flavortown_locations.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    # 写入表头
    writer.writerow(['门店名称', '地址', '电话', '官网链接'])
    
    for item in lists:
        # 提取门店名称
        title = item.find('h3', class_='listing-title').get_text(strip=True) if item.find('h3', class_='listing-title') else '无名称'
        
        # 提取地址(对应fa-map-marker图标的span)
        address_li = item.find('li', class_='address')
        address = address_li.find('span', class_='text').get_text(strip=True) if address_li else '无地址'
        
        # 提取电话(对应fa-phone图标的span)
        phone_li = item.find('li', class_='phone')
        phone = phone_li.find('span', class_='text').get_text(strip=True) if phone_li else '无电话'
        
        # 提取官网链接(对应fa-link图标的span)
        link_li = item.find('li', class_='website')
        website = link_li.find('span', class_='text').get_text(strip=True) if link_li else '无链接'
        
        # 写入一行数据
        writer.writerow([title, address, phone, website])
        print(f"已提取:{title}")

代码说明

  1. 请求优化:添加User-Agent模拟浏览器,避免被网站反爬拦截
  2. 精准选择器:根据页面实际DOM结构,使用正确的类名定位元素(比如listing-title、address、phone、website这些页面真实存在的类)
  3. 异常处理:通过if ... else处理元素不存在的情况,避免报错
  4. 规范CSV写入:使用csv.writer模块,自动处理分隔符和换行,保证CSV格式正确
  5. 文本提取:使用get_text(strip=True)提取并清洗文本内容,去除多余空格和换行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:24:28