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

为什么Python爬虫仅能爬取1页,如何调整代码实现多页爬取?

多页爬取失败原因
  • 数据存储逻辑错误:三个数据存储列表与DataFrame均在页循环内部初始化,每页执行时都会清空上一页的存储数据,最终仅能保留最后一次循环的单页数据
  • 缺少基础反爬适配:未携带User-Agent请求头访问,目标站点会识别为爬虫请求,大概率从第二页开始就返回错误页面、拦截响应,无法解析到有效内容
  • 无请求异常校验逻辑:未判断请求返回的状态码,请求失败时仍直接解析错误内容,无法感知到请求被拦截的问题
修正后的代码
import requests 
from bs4 import BeautifulSoup
import pandas as pd
import time

# 数据存储列表移到循环外全局初始化,避免每页重置
Category_list = []
link_list = []
title_list = []

# 配置模拟浏览器的请求头,规避基础反爬拦截
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"
}

for page in range(1, 20):
    req = requests.get(f"https://katmoviehd.sk/page/{page}", headers=headers)
    # 校验请求状态,异常则跳过当前页避免报错
    if req.status_code != 200:
        print(f"第{page}页请求失败,状态码{req.status_code}")
        time.sleep(2)
        continue
    
    soup = BeautifulSoup(req.text,"html.parser")
    page_titles = soup.find_all('h2')[1:]
    categories = soup.find_all('span', class_ = 'meta-category')
    
    # 数据直接追加到全局列表
    for cate in categories:
        Category_list.append(cate.text.strip())
    for title_tag in page_titles:
        a_tag = title_tag.find("a")
        link_list.append(a_tag['href'])
        title_list.append(a_tag['title'])
    
    # 添加爬取延迟,降低请求频率避免被封
    time.sleep(1.5)

# 全部页面爬取完成后统一生成DataFrame
Table = pd.DataFrame({'Links':link_list, 'Title':title_list, 'Category':Category_list})
补充说明

如果调整后仍存在部分页面爬取失败的情况,可适当延长time.sleep的等待时长,降低请求频率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:45:04