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

Python eBay爬虫生成的Pandas DataFrame存在大量空行求助

eBay爬虫空行问题的精准元素选择方案

给你几个靠谱的定位思路,从根源上避开无关的li元素,不用靠dropna擦屁股:

1. 基于商品列表的专属父容器定位

eBay的商品列表通常会放在一个带有特定class的<ul>里(比如常见的srp-results),而顶部轮播、侧边栏的li属于完全不同的父容器。直接先锁定这个父ul,再抓里面的子li,就能精准命中商品项:

from bs4 import BeautifulSoup
import pandas as pd

# 假设你已经获取并解析页面HTML到soup对象
# 先锁定商品列表的父ul,再选择子li
product_items = soup.select('ul.srp-results li.srp-item')

# 遍历提取数据
product_data = []
for item in product_items:
    # 提取标题,加判断避免报错
    title = item.select_one('.s-item__title').get_text(strip=True) if item.select_one('.s-item__title') else ""
    # 提取价格
    price = item.select_one('.s-item__price').get_text(strip=True) if item.select_one('.s-item__price') else ""
    # 其他字段(比如链接、运费)同理处理
    product_data.append({
        '商品标题': title,
        '商品价格': price
    })

# 生成DataFrame并导出
df = pd.DataFrame(product_data)
df.to_csv('ebay_products.csv', index=False)

核心就是缩小选择范围,只抓目标父容器下的li,从根源上避免误抓轮播或其他无关元素。

2. 用伪类排除无关li

如果某些无关li有明显的特征class(比如轮播项的carousel-item、广告项的srp-ad-item),可以用CSS的:not()伪类直接排除它们:

# 选择所有li,但排除广告项和轮播项
product_items = soup.select('li:not(.srp-ad-item):not(.carousel-item)')
# 或者结合父容器更精准
product_items = soup.select('ul.srp-results li:not(.srp-ad-item)')

3. 修正data-viewport选择器的写法

你之前用data-viewport得到空DataFrame,大概率是选择器写得不对。eBay的商品li的data-viewport属性通常包含index字段,试试用属性包含选择器:

# 选择带有data-viewport属性且值包含"index"的li
product_items = soup.select('li[data-viewport*="index"]')

如果还是不行,打开浏览器开发者工具,右键查看商品li的data-viewport具体值,把选择器写得更精确,比如:

product_items = soup.select('li[data-viewport^="{\\"index\\":"]')

额外提醒

  • 爬eBay别忘看robots.txt,控制请求频率,别猛刷导致IP被封
  • 如果页面是动态加载的(滚动才加载更多商品),BeautifulSoup抓不到后续内容,这时候得用Selenium或Playwright模拟浏览器滚动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:37:35