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

如何从指定网页抓取展商信息并导出CSV?解决链接及提取难题

解决展商信息抓取与CSV导出问题

下面给你梳理完整的实现步骤,代码附带详细注释,适合新手理解:

1. 前期准备

先确保安装好所需依赖库:

pip install requests beautifulsoup4 pandas

2. 修正展商链接抓取逻辑

你的原代码抓取了页面所有<a>标签的链接,自然会包含导航栏、页脚等无关链接。观察目标网站结构后,展商详情页的链接都包含/exhibitor/路径,我们可以基于这个特征过滤有效链接:

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 模拟浏览器请求头,避免被网站反爬拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

# 获取展商列表页的HTML内容
response = requests.get('https://asiatechxsg.com/exhibitors/', headers=headers)
response.encoding = 'utf-8'  # 确保中文编码正确
soup = BeautifulSoup(response.text, 'html.parser')

# 过滤并收集有效展商链接,同时去重
exhibitor_links = []
seen_links = set()
for link in soup.find_all('a', href=True):
    href = link['href']
    if '/exhibitor/' in href and href not in seen_links:
        # 拼接完整URL(处理相对路径情况)
        full_link = 'https://asiatechxsg.com' + href if href.startswith('/') else href
        exhibitor_links.append(full_link)
        seen_links.add(href)

print(f"共筛选出{len(exhibitor_links)}个展商详情链接")

3. 抓取单展商详情信息

遍历每个展商链接,提取名称和详情内容。这里的选择器可以根据实际网页结构调整,你可以用浏览器F12开发者工具查看对应元素的标签或类名:

# 存储所有展商数据的列表
exhibitor_data = []

for link in exhibitor_links:
    try:
        # 请求展商详情页
        detail_response = requests.get(link, headers=headers)
        detail_response.encoding = 'utf-8'
        detail_soup = BeautifulSoup(detail_response.text, 'html.parser')
        
        # 提取展商名称(示例用h1标签,可根据实际调整)
        name = detail_soup.find('h1').get_text(strip=True) if detail_soup.find('h1') else '未知名称'
        
        # 提取展商详情内容(示例抓取指定容器内的所有段落文本)
        details = []
        detail_container = detail_soup.find('div', class_='exhibitor-content')  # 替换为实际的容器类名
        if detail_container:
            for p in detail_container.find_all('p'):
                text = p.get_text(strip=True)
                if text:
                    details.append(text)
        info = '\n'.join(details) if details else '无详情信息'
        
        # 将数据存入列表
        exhibitor_data.append({
            '展商名称': name,
            '展商详情': info,
            '详情链接': link
        })
        print(f"已完成抓取:{name}")
    except Exception as e:
        print(f"抓取{link}时出错:{str(e)}")
        continue

4. 转换为DataFrame并导出CSV

# 将列表数据转换为DataFrame
df = pd.DataFrame(exhibitor_data)

# 导出CSV文件,用utf-8-sig编码避免中文乱码
df.to_csv('asia_tech_exhibitors.csv', index=False, encoding='utf-8-sig')
print("展商信息已成功导出到CSV文件!")

关键注意点

  • 网页结构变化:如果网站后续更新页面布局,需要重新用开发者工具查看元素,调整代码中的标签选择器(比如类名、标签类型)。
  • 反爬限制:如果频繁请求被拦截,可以添加time.sleep(1)(需导入time库)设置请求间隔,降低被封IP的风险。
  • 数据清洗:提取的文本可能存在多余空格或换行,可使用strip()、replace()等方法进一步整理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:52:38