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

如何用BeautifulSoup提取嵌套网页数据?现有代码问题求助

网页汽车信息提取问题解决

待处理网页源码

</li>
    <li class="cl-static-search-result" title="BELLO HONDA ACCORD &quot;95 MIL 
      MILLAS&quot;. REALMENTE COMO NUEVO">
        <a href="link1">
            <div class="title">BELLO HONDA ACCORD &quot;95 MIL MILLAS&quot;. REALMENTE COMO NUEVO</div>
            <div class="details">
                <div class="price">$4,600</div>
                <div class="location">
                    Miami
                </div>
            </div>
        </a>
    </li>
    <li class="cl-static-search-result" title="Honda Element">
        <a href=" link2 ">
            <div class="title">Honda Element</div>

            <div class="details">
                <div class="price">$4,950</div>
                <div class="location">
                    Coral springs
                </div>
            </div>
        </a>
    </li>
    <li class="cl-static-search-result" title="Mint Jeep">
        <a href=" link3 ">
            <div class="title">Mint Jeep</div>

            <div class="details">
                <div class="price">$8,500</div>
                <div class="location">
                    Pompano
                </div>
            </div>
        </a>
    </li>

目标提取格式

| URL   | TITLE                                       | PRICE  |
| ----- | ------------------------------------------- | ------ |
| link1 | BELLO HONDA ACCORD "95 MIL MILLAS". REALMENTE COMO NUEVO | $4,600 |
| link2 | Honda Element                               | $4,950 |
| link3 | Mint Jeep                                   | $8,500 |

现有代码问题

你的代码在遍历每个<a>标签时,又全局遍历所有.title的div,导致每个URL对应所有标题,无法实现一一对应。同时CSV写入逻辑也有问题,每次循环都重新打开文件覆盖内容,且只写入URL。

修正后的代码

from urllib import request 
from bs4 import BeautifulSoup
import csv

page_url = 'URLNAME'
rawpage = request.urlopen(page_url)
soup = BeautifulSoup(rawpage, 'html5lib')

results = []

# 遍历每个搜索结果的li标签,这是信息的最小独立单元
for li in soup.find_all('li', class_='cl-static-search-result'):
    try:
        # 提取当前li内的a标签href,去除前后空格
        url = li.find('a').get('href').strip()
        # 提取当前li内的title文本
        title = li.find('div', class_='title').text.strip()
        # 提取当前li内的price文本
        price = li.find('div', class_='price').text.strip()
        
        # 将数据存入列表
        results.append({'url': url, 'title': title, 'price': price})
    except AttributeError:
        # 跳过缺失信息的条目
        continue

# 写入CSV文件
with open('links.csv', 'w', newline='', encoding='utf-8') as csv_out:
    csv_writer = csv.writer(csv_out)
    # 写入表头
    csv_writer.writerow(['URL', 'TITLE', 'PRICE'])
    # 写入每条数据
    for row in results:
        csv_writer.writerow([row['url'], row['title'], row['price']])

代码说明

  1. 定位独立单元:以每个cl-static-search-result类的li标签为单位,确保每个条目内的URL、标题、价格是一一对应的,避免全局遍历导致的重复。
  2. 精准提取内容:在每个li标签内部查找对应的a、title、price元素,只获取当前条目下的信息。
  3. 数据清洗:用strip()去除文本和URL前后的空格,保证数据整洁。
  4. CSV写入优化:只打开一次文件,一次性写入所有数据,避免重复覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:16:13