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

Python+BS4新手求助:抓取笔记本信息及链接并导出Excel

网页抓取与Excel导出问题

我尝试在测试站点Webscraper.io的笔记本页面抓取商品标题、价格及商品链接,但无法完整获取信息,也不知道如何添加商品链接抓取逻辑。同时导出Excel时内容异常。

现有抓取代码:

import requests
from bs4 import BeautifulSoup
from pprint import pprint

url ="https://webscraper.io/test-sites/e-commerce/allinone/computers/laptops"

r = requests.get(url)

html = r.text

soup = BeautifulSoup(html)

css_selector = {"class": "col-sm-4 col-lg-4 col-md-4"}

laptops = soup.find_all("div", attrs=css_selector)

for laptop in laptops:
    text = laptop.get_text()
    print(text)

导出尝试代码:

import pandas as pd

df = pd.DataFrame(laptop)

df.to_excel("laptop_.xlsx", encoding="utf-8")

问题修复方案

1. 精准提取商品信息

原代码仅获取了商品卡片的全部文本,未针对性提取字段。需定位对应HTML元素:

  • 价格:对应h4.price标签文本
  • 标题:对应a.title标签文本
  • 商品链接:a.title标签的href属性为相对路径,需拼接站点域名生成完整URL

2. 修复Excel导出异常

原导出代码错误地将单个商品对象传入DataFrame,需先收集所有商品的结构化数据,再统一生成DataFrame。


完整可运行代码

import requests
from bs4 import BeautifulSoup
import pandas as pd

def scrape_laptops():
    base_domain = "https://webscraper.io"
    target_url = f"{base_domain}/test-sites/e-commerce/allinone/computers/laptops"
    
    # 发送请求并校验状态
    response = requests.get(target_url)
    response.raise_for_status()
    soup = BeautifulSoup(response.text, "html.parser")
    
    # 定位所有商品卡片
    laptop_cards = soup.find_all("div", class_="col-sm-4 col-lg-4 col-md-4")
    laptops_list = []
    
    for card in laptop_cards:
        # 提取价格
        price = card.find("h4", class_="price").text.strip()
        # 提取标题与完整链接
        title_tag = card.find("a", class_="title")
        title = title_tag.text.strip()
        full_link = f"{base_domain}{title_tag['href']}"
        
        # 存入结构化数据
        laptops_list.append({
            "标题": title,
            "价格": price,
            "商品链接": full_link
        })
    
    return laptops_list

def export_to_excel(data, filename="笔记本数据.xlsx"):
    df = pd.DataFrame(data)
    # 导出时关闭索引列,避免冗余数据
    df.to_excel(filename, index=False)
    print(f"数据已导出至 {filename}")

if __name__ == "__main__":
    laptop_data = scrape_laptops()
    export_to_excel(laptop_data)

关键说明

  • response.raise_for_status()用于捕获请求失败场景,避免处理无效HTML
  • 精准定位标签与类名,确保数据提取的准确性
  • 拼接完整链接时使用站点域名+相对路径,避免生成无效链接
  • 导出Excel时传入完整数据集,设置index=False去除自动生成的索引列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:05:34