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
相关产品推荐
相关产品推荐

