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

使用BeautifulSoup优化网页抓取:生成含多车型评论信息的字典

优化后的汽车评论抓取代码

需求调整说明

原代码仅将2017-2018款Audi A4的评论内容存入列表,现需修改为生成包含以下字段的字典条目,支持批量抓取指定年份车型:

  • reviewer_name:评论作者名称
  • car_model:完整车型标识(如Audi A4 2017)
  • review_content:拼接后的完整评论内容

优化后的代码

from bs4 import BeautifulSoup
import requests
import pandas as pd
import time
from fake_useragent import UserAgent
import random

# 存储结果的字典列表
review_entries = []
ua = UserAgent()

# 指定要抓取的年份范围
target_years = range(2017, 2019)

for year in target_years:
    # 构造目标URL
    url = f'https://www.caranddriver.com/audi/a4-{year}'
    # 随机生成User-Agent
    headers = {'User-Agent': str(ua.random)}
    
    try:
        # 发送请求,加入随机延迟避免被拦截
        time.sleep(random.uniform(1, 3))
        response = requests.get(url, headers=headers)
        response.raise_for_status()  # 检查请求是否成功
        
        html_soup = BeautifulSoup(response.text, 'lxml')
        
        # 抓取评论作者名称(带异常处理)
        reviewer_name = "Unknown"
        byline_element = html_soup.find('div', class_='review-byline')
        if byline_element and byline_element.find('a'):
            reviewer_name = byline_element.find('a').text.strip()
        
        # 抓取并拼接评论内容
        review_content = ""
        review_body = html_soup.find('div', class_='review-body-content')
        if review_body:
            paragraphs = review_body.find_all('p')
            review_content = '\n'.join([p.get_text(strip=True) for p in paragraphs])
        
        # 构造字典条目并加入列表
        review_entry = {
            'reviewer_name': reviewer_name,
            'car_model': f'Audi A4 {year}',
            'review_content': review_content
        }
        review_entries.append(review_entry)
        print(f"成功抓取Audi A4 {year}的评论")
    
    except Exception as e:
        print(f"抓取Audi A4 {year}时出错: {str(e)}")

# 可选:将结果转为DataFrame保存
df = pd.DataFrame(review_entries)
df.to_csv('audi_a4_reviews.csv', index=False)

代码关键优化点

  • 数据结构调整:用字典列表替代原有的字符串列表,结构化存储每条评论的完整信息
  • 作者抓取逻辑:新增评论作者提取,同时加入异常处理,避免因页面结构变化导致程序崩溃
  • 请求优化:使用随机User-Agent和请求延迟,降低被目标网站拦截的概率
  • 异常处理:覆盖请求失败、元素缺失等常见异常,提升代码稳定性
  • 车型标识明确:直接构造带年份的完整车型名称,无需后续额外处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 23:39:16