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

Python网页爬取:按行提取表格数据及优化子页面链接爬取

解决方案

问题1:高效获取子页面链接(无需正则)

直接从页面的链接元素中提取完整URL或ID参数,比正则更高效且易维护:

  1. 定位页面中所有指向企业详情页的<a>标签(通常链接包含details?id=标识)
  2. 直接通过a.get('href')获取完整链接,或用urllib.parse解析链接提取ID参数

示例代码片段:

from urllib.parse import urlparse, parse_qs

# 假设已获取列表页的soup对象
for a_tag in soup.find_all('a', href=True):
    href = a_tag['href']
    if 'details?id=' in href:
        # 直接拼接完整链接(适配相对路径)
        full_url = f"https://www.afm.nl{href}" if href.startswith('/') else href
        # 或者单独提取ID
        parsed_url = urlparse(href)
        page_id = parse_qs(parsed_url.query)['id'][0]
        # 后续处理该链接/ID

问题2:按行提取表格数据

你的代码循环层级错误,需先遍历表格的每一行<tr>,再处理行内单元格,将每行数据存入单独列表:

修正后的代码:

# Scrape and find table content
table_results = soup.find_all('tbody')
register = []

# 遍历每个tbody容器
for tbody in table_results:
    # 遍历tbody内的每一行
    for tr in tbody.find_all('tr'):
        row_data = []
        # 处理当前行的每个单元格
        for td in tr.find_all('td'):
            span = td.find('span', class_='cc-mobile-title')
            if span:
                # 清理文本空白后存入
                text_content = span.next_sibling.strip()
                row_data.append(text_content)
        # 跳过空行,将有效行数据加入结果列表
        if row_data:
            register.append(row_data)
    
print(register)

说明:

  • 先遍历<tbody>,再遍历每个<tbody>下的<tr>(即表格行)
  • 每行创建独立的row_data列表存储该行单元格内容
  • 最终register为二维列表,每个子列表对应表格的一行数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:22:45