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

使用BS4编写eBay爬虫输出含HTML代码 如何仅提取h3标签文本内容

问题原因
  • 你调用的find_all() 方法返回的是匹配到的Tag对象列表,直接打印会输出完整标签结构,不是文本内容。要获取单个标签的文本,需要调用Tag对象的.text 或者.get_text() 属性。
  • find_all 中添加的text=True参数用法错误:这个参数是用来筛选文本内容符合指定规则的标签,不是用来提取文本的,加在这里反而会导致匹配结果不准确,BeautifulSoup 4.9.0+版本后该参数已更名为string。
  • 你已经提取了单个商品容器listing,后续提取商品标题应该从listing下查询,不要从整个页面soup查询,避免匹配到无关内容。
修正后代码
import requests
from bs4 import BeautifulSoup

# 提前加请求头,模拟浏览器访问,避免被eBay反爬拦截
HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

def get_page(url):
    response = requests.get(url, headers=HEADERS)
    if not response.ok:
        print("Server responded:", response.status_code)
        return None
    soup = BeautifulSoup(response.text, "lxml")
    return soup

def get_detail_data(soup):
    # 获取所有商品容器
    listings = soup.find_all("div", {"class": "s-item__wrapper clearfix"})
    for listing in listings:
        # 从单个商品容器里找标题
        title_tag = listing.find("h3", {"class": "s-item__title"})
        if title_tag:
            # 提取文本内容,strip参数自动去掉首尾多余空白符
            title = title_tag.get_text(strip=True)
            print(title)

def main():
    url = "https://www.ebay.de/b/Laptops-Notebooks/175672/bn_1618754?LH_ItemCondition=7000&mag=1&rt=nc&_sop=1"
    soup = get_page(url)
    if soup:
        get_detail_data(soup)

if __name__ == "__main__": 
    main()
eBay爬虫优化建议
  • 反爬加固:除了加User-Agent,还可以按需加代理IP、设置随机请求间隔,避免高频访问被封禁IP。
  • 移动端访问实现:可以用Flask/Django搭一个简单的接口服务,把爬取到的结构化数据(标题、价格、链接等)存到SQLite/MySQL数据库,接口返回JSON格式数据,手机端直接调用接口就能查看数据,还可以做简单的前端页面适配手机屏幕。
  • 稳定性优化:如果不想因为eBay前端页面类名调整导致爬虫失效,可以直接使用eBay官方的Browse API,申请开发者密钥后就能直接获取结构化的商品数据,比自行解析HTML更稳定。
  • 自动化运行:可以把脚本部署到云服务器,用crontab设置定时任务自动爬取更新数据,不需要手动执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:12:03