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

