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

Python爬虫循环异常:仅重复返回单页数据,无法爬取多页

问题原因分析
  • 你把页面请求、HTML解析、获取文章列表的核心操作都写在了循环外面,只执行了一次,拿到的是固定第20页的内容。
  • 后续的for page in range(1,10)循环只是反复遍历这同一批已获取的文章数据,自然只会重复添加单页内容,完全没有去请求其他页码的页面。
修正方案

需要把请求、解析、获取文章的逻辑移到循环内部,并且动态修改URL中的页码参数,同时修复几个细节问题:

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time  # 用于添加请求延迟,避免反爬

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'}

questionlist = []

# 遍历1到9页(range(1,10)对应页码1-9)
for page in range(1, 10):
    # 动态生成当前页码的URL
    url = f"https://seekingalpha.com/market-news?page={page}"
    # 请求当前页码的页面
    r = requests.get(url, headers=headers)
    # 解析当前页的HTML内容
    soup = BeautifulSoup(r.text, 'html.parser')
    # 获取当前页的所有文章元素
    questions = soup.find_all('article', {'class': 'mT-jA ga-jA Q-b8 R-cS R-df ks-IX R-cG R-dJ ks-IX R-cG R-dJ ks-I0 ks-I0 mT-NM'})
    
    for item in questions:
        # 处理日期字段,避免找不到元素时报错
        date_elem = item.find('span', {'class': 'mU-uO mU-gE'})
        question = {
            'title': item.find('h3', {'class': 'km-X R-cw Q-cs km-IM V-gT V-g9 V-hj km-IO V-hY V-ib V-ip km-II R-fZ'}).text.strip(),
            'link': 'https://seekingalpha.com' + item.find('a', {'class': 'hq-ox R-fu'})['href'],  # 原链接拼接多了market-news,修正为直接拼接域名
            'date': date_elem.text.strip() if date_elem else None
        }
        questionlist.append(question)
    
    # 添加1秒延迟,降低被反爬的风险
    time.sleep(1)
    
print(questionlist)
额外注意事项
  • 链接拼接修正:原代码中'https://seekingalpha.com/market-news' + 文章href会生成重复路径的错误链接,需直接使用域名拼接href。
  • 异常处理:如果需要更健壮的代码,可以给元素查找、网络请求添加try-except块,避免单个元素找不到导致程序崩溃。
  • 反爬策略:频繁请求可能触发网站反爬机制,添加请求延迟是基础的规避手段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 03:33:09