You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Python爬取网页数据并生成包含华硕主板完整技术规格的CSV文件

如何使用Python爬取网页数据并生成包含华硕主板完整技术规格的CSV文件

嘿,我看你已经搭建了基础的爬取框架,不过要抓取页面上全部技术规格细节,咱们得调整下代码逻辑——原来的写法只匹配了你预先定义的表头项,很容易漏掉网页里的其他规格内容。下面我来帮你修改代码,实现完整的规格爬取:

问题分析

原代码的局限在于:

  • 只抓取了你预先列出的9项规格,网页里的其他技术细节会被忽略
  • 依赖标题的模糊匹配(header_name.lower() in spec_title.lower()),可能出现匹配不准确的情况

修改后的完整代码

import requests
from bs4 import BeautifulSoup
import csv
import os

# 目标网页链接
url = "https://rog.asus.com/pl/motherboards/rog-maximus/rog-maximus-xi-formula-model/spec/"

# 获取页面内容
response = requests.get(url)
response.encoding = 'utf-8'  # 确保编码正确,避免乱码
soup = BeautifulSoup(response.text, 'html.parser')

# 定位所有规格项的行元素
spec_elements = soup.find_all('div', class_='ProductSpecSingle__productSpecItemRow__3sjMJ')

# 收集所有规格标题和对应的值
spec_data = []
headers = []
for spec_element in spec_elements:
    # 抓取规格标题
    spec_title_element = spec_element.find('h2', class_='ProductSpecSingle__productSpecItemTitle__8gSrN')
    # 抓取规格内容
    spec_value_element = spec_element.find('span', class_='ProductSpecSingle__descriptionItemValue__lVa0O')
    
    if spec_title_element and spec_value_element:
        title = spec_title_element.text.strip()
        value = spec_value_element.text.strip()
        # 避免重复表头(如果网页里有重复标题的话)
        if title not in headers:
            headers.append(title)
        spec_data.append((title, value))

# 整理成字典格式,方便写入CSV
data_dict = {title: "" for title in headers}
for title, value in spec_data:
    data_dict[title] = value

# 确保输出文件夹存在
output_dir = "ASUS"
if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# 写入CSV文件
csv_filename = os.path.join(output_dir, 'specyfikacja_plyty_glownej.csv')
with open(csv_filename, mode='w', newline='', encoding='utf-8') as file:
    writer = csv.DictWriter(file, fieldnames=headers)
    writer.writeheader()  # 写入表头
    writer.writerow(data_dict)  # 写入数据

print(f'Utworzono plik CSV: {csv_filename} z pełnymi danymi specyfikacji.')

关键改进点

  • 动态生成表头:不再依赖预先定义的表头,而是直接从网页里抓取所有规格标题作为CSV表头,确保没有遗漏
  • 更严谨的元素定位:确保每个规格标题都能对应到正确的内容,避免模糊匹配的误差
  • 文件夹创建处理:自动创建ASUS输出文件夹,避免因文件夹不存在导致的报错
  • 编码优化:显式设置响应编码为UTF-8,解决可能出现的中文/波兰文乱码问题

注意事项

如果后续网页更新了CSS类名(比如ProductSpecSingle__productSpecItemRow__3sjMJ这类动态生成的类名),你需要重新检查网页的HTML结构,更新代码里的类名参数,否则爬取会失效。

备注:内容来源于stack exchange,提问作者Michał Gąsiorski

火山引擎 最新活动