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

Python爬虫des字段导出CSV文件无内容问题求助

问题定位
  • 核心错误为描述字段的CSS选择器配置错误:目标站点的产品描述内容不存在于class="padding"的div节点中,使用不存在的节点选择器只会获取到空值,因此导出的CSV文件des列无内容。
  • 隐藏风险:原代码未做节点存在性校验,若某款商品缺少对应字段,会直接抛出AttributeError异常导致爬取中断。
修正后可正常获取des字段的代码
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time

baseurl = 'https://www.tradesupply.eu'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'
}
r = requests.get('https://www.tradesupply.eu/categories.html?name=drum&type=simple', headers=headers, timeout=10)
soup = BeautifulSoup(r.content, 'html.parser')
tra = soup.find_all('li', class_='products__item')
productlinks = []
Title = []
Brand = []
Colour = []
Printer = []
Code = []
Des = []

for links in tra:
    for link in links.find_all('a', href=True):
        comp = baseurl + link['href']
        productlinks.append(comp)

for link in productlinks:
    r = requests.get(link, headers=headers, timeout=10)
    soup = BeautifulSoup(r.content, 'html.parser')
    # 所有字段增加存在性校验,避免节点不存在时报错
    title = soup.find('h1').text.strip() if soup.find('h1') else ''
    Title.append(title)
    brand = soup.find('div', class_="product__brand").text.strip() if soup.find('div', class_="product__brand") else ''
    Brand.append(brand)
    colour = soup.find('div', class_="product__colour").text.strip() if soup.find('div', class_="product__colour") else ''
    Colour.append(colour)
    printer = soup.find('div', class_="product__printer-manufacturer").text.strip() if soup.find('div', class_="product__printer-manufacturer") else ''
    Printer.append(printer)
    code = soup.find('div', class_='l-product__codeblock').text.strip() if soup.find('div', class_='l-product__codeblock') else ''
    Code.append(code)
    # 修正des字段的选择器,改为站点实际使用的product__description类
    des = soup.find('div', class_="product__description").text.strip() if soup.find('div', class_="product__description") else ''
    Des.append(des)
    # 增加1秒延迟避免触发反爬
    time.sleep(1)

df = pd.DataFrame({
    "Title": Title, "brand": Brand, "colour": Colour, "printer": Printer, "code": Code, "des": Des
})
# 修正文件名空格问题,避免后续读取异常
df.to_csv('product_data.csv', index=False, encoding='utf-8')
优化说明
  • 修正了des字段的CSS选择器,匹配站点实际的产品描述节点类名product__description
  • 所有字段增加节点存在性校验,节点不存在时自动填充空字符串,避免爬取中断
  • 增加请求超时参数,避免请求长时间卡住
  • 增加爬取间隔,降低反爬触发概率
  • 修正导出文件名带空格的问题,避免后续文件读取异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:36:03