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

Python requests+BeautifulSoup多页爬虫仅抓取单页问题求解

问题原因

你的代码有3个核心错误导致只能抓取1页内容:

  • 分页URL参数拼接错误:原URL未包含正确的分页参数名,type=simple={page}的写法不符合传参规则,实际站点分页参数应为&page={page}
  • 循环缩进完全错误:提取商品链接、抓取商品详情的所有逻辑都写在了分页循环外层,只会处理最后一次分页请求返回的内容
  • 存储列表放在分页循环内,每次循环都会清空之前所有已采集的数据

修正后完整代码

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time # 增加请求延迟避免被站点反爬拦截

baseurl = 'https://www.tradesupply.eu'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'
}

# 存储列表统一在循环外初始化,避免数据被清空
productlinks = []
Title = []
Brand = []
Colour = []
Printer = []
Code = []
Des = []

# 若站点分页从0开始,可将range改为range(0,10)
for page in range(1, 11):
    # 修正分页URL参数格式
    r = requests.get(f'https://www.tradesupply.eu/categories.html?name=drum&type=simple&page={page}', headers=headers)
    if r.status_code != 200:
        print(f'第{page}页请求失败,状态码{r.status_code}')
        continue
    soup = BeautifulSoup(r.content, 'html.parser')
    tra = soup.find_all('li', class_='products__item')
    # 提取当前页商品链接逻辑缩进至分页循环内
    for links in tra:
        for link in links.find_all('a', href=True):
            comp = baseurl + link['href']
            productlinks.append(comp)
    # 分页请求间隔1.5秒
    time.sleep(1.5)

# 遍历所有商品链接抓取详情
for link in productlinks:
    try:
        r = requests.get(link, headers=headers)
        soup = BeautifulSoup(r.content, 'html.parser')
        title = soup.find('h1').text
        Title.append(title)
        brand = soup.find('div', class_="product__brand").text
        Brand.append(brand)
        colour = soup.find('div', class_="product__colour").text 
        Colour.append(colour)
        printer = soup.find('div', class_="product__printer-manufacturer").text
        Printer.append(printer)
        code = soup.find('div', class_='l-product__codeblock').text.strip()
        Code.append(code)
        des = soup.find('div', class_="padding").text.strip()
        Des.append(des)
        time.sleep(1)
    except Exception as e:
        print(f'商品{link}抓取失败:{e}')
        continue

df = pd.DataFrame(
    {"Title": Title, "brand": Brand, "colour": Colour, "printer": Printer, "code": Code, "des": Des}
)
print(df)
# 如需保存数据可取消下一行注释
# df.to_csv('tradesupply_drum.csv', index=False, encoding='utf-8-sig')

额外说明

如果运行后发现第一页数据重复或者缺失,可手动访问站点确认分页参数的起始值,调整range的起始数值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:18:02