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

Python网络爬虫脚本问题求助:CSV仅含表头无数据

问题

尝试爬取网站【https://www.fishpond.co.nz/Books/Fiction_Literature/Comics_Graphic_Novels/Superheroes?page=1】的“图画小说”分类信息,需提取以下内容:

  • 图画小说的标题
  • 价格
  • 装帧格式(精装/平装)

运行提供的Python爬虫脚本后,CSV文件仅生成表头,无任何网站数据,无法定位问题,请求帮助。

原代码:

import requests
from bs4 import BeautifulSoup
import pandas as pd

books = []
for i in range (1,3):
    url = f"https://www.fishpond.co.nz/Books/Fiction_Literature/Comics_Graphic_Novels/Superheroes?page={i}.html"
    response = requests.get(url)
    response = response.content
    soup = BeautifulSoup(response, 'html.parser')
    div = soup.find('div')
    articles = div.find_all('article',class_ = 'b-list')

    for article in articles:
        title = article.find('a', class_ = 'item-block__title')
        title = title.attrs['title']
        bookformat = article.find('item-block__format')
        price = article.find('span', class_ = 'item-block__price').text
        price = float(price[1:])
        books.append([title,bookformat,price])

df = pd.DataFrame(books,columns=['title','bookformat','price'])
df.to_csv('fishpondscrape.csv') 
问题排查与修复方案

1. URL格式错误

原代码拼接的URL带有多余的.html后缀,导致请求到无效页面。正确的URL应移除该后缀,格式为:
https://www.fishpond.co.nz/Books/Fiction_Literature/Comics_Graphic_Novels/Superheroes?page={i}

2. 页面元素定位错误

  • 原代码用soup.find('div')获取页面第一个div,这不是包含商品列表的容器,需定位到class为b-list__items的div容器。
  • 商品对应的article元素class是b-list__item,而非b-list。
  • 装帧格式的选择器缺少class前缀.,需改为article.find('span', class_='item-block__format'),并提取文本内容。
  • 所有元素提取操作都需增加空值判断,避免因页面结构差异导致脚本中断,无法采集后续数据。

3. 未处理请求异常

原代码未处理网络请求失败的情况,需添加异常捕获,确保请求成功后再解析页面。

修正后的代码
import requests
from bs4 import BeautifulSoup
import pandas as pd

books = []
for i in range(1, 3):
    # 修正URL格式,移除多余的.html后缀
    url = f"https://www.fishpond.co.nz/Books/Fiction_Literature/Comics_Graphic_Novels/Superheroes?page={i}"
    try:
        response = requests.get(url)
        # 检查请求是否成功
        response.raise_for_status()
        soup = BeautifulSoup(response.text, 'html.parser')
        # 定位正确的商品列表容器
        list_container = soup.find('div', class_='b-list__items')
        if not list_container:
            print(f"第{i}页未找到商品列表容器")
            continue
        # 定位正确的商品article元素
        articles = list_container.find_all('article', class_='b-list__item')
        
        for article in articles:
            # 提取标题,增加空值判断
            title_elem = article.find('a', class_='item-block__title')
            title = title_elem.attrs['title'] if title_elem else '无标题'
            
            # 提取装帧格式,修正选择器并获取文本
            format_elem = article.find('span', class_='item-block__format')
            bookformat = format_elem.text.strip() if format_elem else '无格式信息'
            
            # 提取价格,增加空值判断并处理格式
            price_elem = article.find('span', class_='item-block__price')
            if price_elem:
                price_text = price_elem.text.strip()
                try:
                    price = float(price_text[1:])
                except ValueError:
                    price = None
            else:
                price = None
            
            if title != '无标题':  # 仅添加有效数据
                books.append([title, bookformat, price])
    except requests.exceptions.RequestException as e:
        print(f"请求第{i}页失败: {e}")

# 生成CSV,移除索引列
df = pd.DataFrame(books, columns=['title', 'bookformat', 'price'])
df.to_csv('fishpondscrape.csv', index=False)
print("数据爬取完成,已保存到fishpondscrape.csv")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 02:24:59