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

如何提取sfma.org.sg会员列表页的分类及商家信息?

解决SFMA商家分类文本提取错误的问题

嘿,我来帮你搞定这个问题!作为Python新手,踩这种BeautifulSoup的小坑太正常啦😉

问题根源分析

你原来的代码逻辑出了点小问题:

  • 你先把category(所有class为clink的a标签)的href属性提取出来存到links里,这时候links已经变成了一串URL字符串,不再是BeautifulSoup的Tag对象了。
  • 之后你循环links去取.text,字符串根本没有.text属性,自然拿不到分类文本,甚至会报错。

修正后的代码

我们直接从原始的a标签对象里提取分类文本和链接,分开处理就好:

# 先获取页面上所有分类的a标签元素
category_tags = soup_2.find_all('a', attrs={'class':'clink'})

# 提取分类名称(文本内容)
cat_names = [tag.text.strip() for tag in category_tags]

# 提取分类对应的链接(可选,如果你需要跳转到分类页爬商家)
cat_urls = [tag['href'] for tag in category_tags]

这样cat_names就是你要的分类文本(比如"Alcoholic Beverage"、"Bottled Beverage"),cat_urls则是每个分类对应的页面链接,方便后续爬取商家信息。

完整流程示例(爬分类+商家信息)

给你一个更完整的代码框架,方便你后续提取商家的名称、地址等信息:

import requests
from bs4 import BeautifulSoup

# 基础分类页面URL
base_category_url = "https://www.sfma.org.sg/member/category/"

# 1. 获取所有分类信息
response = requests.get(base_category_url)
soup = BeautifulSoup(response.text, 'html.parser')

category_tags = soup.find_all('a', class_='clink')
categories = []
for tag in category_tags:
    categories.append({
        'name': tag.text.strip(),
        'url': tag['href']
    })

# 2. 遍历每个分类,爬取商家信息
for cat in categories:
    print(f"正在爬取分类: {cat['name']}")
    cat_response = requests.get(cat['url'])
    cat_soup = BeautifulSoup(cat_response.text, 'html.parser')
    
    # 这里需要根据分类页的HTML结构提取商家信息
    # 示例(假设商家信息在class为'merchant-card'的容器里):
    merchant_cards = cat_soup.find_all('div', class_='merchant-card')
    for card in merchant_cards:
        # 提取商家名称
        merchant_name = card.find('h3').text.strip()
        # 提取地址
        merchant_address = card.find('p', class_='address').text.strip()
        # 提取联系方式
        merchant_contact = card.find('p', class_='contact').text.strip()
        
        # 整理商家信息(包含所属分类)
        merchant_info = {
            'name': merchant_name,
            'address': merchant_address,
            'contact': merchant_contact,
            'categories': [cat['name']]  # 可以根据页面补充更多分类标签
        }
        
        print(merchant_info)

小提示

  • 爬取前记得查看网站的robots.txt,确保允许爬虫访问;
  • 可以给请求加个headers模拟浏览器,避免被反爬;
  • 如果商家的分类标签在详情页,记得进入商家详情页后再提取完整的分类信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:23:48