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

使用Requests与BeautifulSoup爬取网页时,修改页码参数仍重复获取第一页数据的技术求助

解决翻页爬取始终返回同一页面数据的问题

我看了你的代码,发现核心问题出在请求参数的传递方式和URL的设置上,这就是为什么你明明改了pageStart页码,却始终拿到第一页的内容。咱们一步步来修复:

问题分析

  1. 错误的参数传递位置:你把分页参数pageStart放到了请求头的path字段里,但服务器根本不会读取请求头里的这个字段来处理分页——GET请求的查询参数应该直接拼接在URL末尾,这是标准的做法。
  2. 空的请求URL:你初始化source_url为空字符串,这会导致请求无效,大概率是你之前测试时遗漏了基础URL的填写。

修改后的完整代码

from bs4 import BeautifulSoup
import requests
import time  # 用来加请求延迟,避免被封

def traverse_source():
    article_links = []
    # 填写正确的基础页面URL
    base_url = "https://www.annemergmed.com/issue/S0196-0644(21)X0012-1"
    for pgindx in range(9):
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
            "Sec-fetch-site": "same-origin",
        }
        # 正确拼接分页参数到URL末尾
        source_url = f"{base_url}?pageStart={pgindx}"
        source_data = requests.get(source_url, headers=headers)
        
        # 打印当前请求的URL,方便确认分页参数是否生效
        print(f"正在请求第 {pgindx+1} 页: {source_url}")
        print(source_data.headers)
        
        source_soup = BeautifulSoup(source_data.content, "html.parser")
        destination = source_soup.find_all("h3", attrs={'class': 'toc__item__title' })
        for dest in destination:
            # 捕获具体异常,避免隐藏其他问题
            try:
                article_links.append("https://www.annemergmed.com" + dest.a['href'])
            except AttributeError:
                print(f"标题 {dest.get_text(strip=True)} 没有找到链接,跳过")
        
        # 加1秒延迟,降低请求频率
        time.sleep(1)
    
    print("爬取到的所有文章链接:")
    for link in article_links:
        print(link)

if __name__ == "__main__":
    traverse_source()

关键修改点说明

  • 正确构建请求URL:把pageStart作为查询参数直接拼在基础URL后面,服务器会识别这个参数并返回对应页码的内容。
  • 移除无效请求头:删掉了headers里的path字段,这个字段不是标准HTTP请求头,服务器不会处理它。
  • 添加请求延迟:加入time.sleep(1)避免短时间内发送大量请求,降低被网站封禁IP的风险。
  • 精准异常捕获:把except:改成except AttributeError:,只捕获找不到a标签的情况,方便排查其他潜在问题。
  • 增加调试信息:打印当前请求的URL和异常提示,让你能直观看到爬取过程中的状态。

额外建议

  1. 先手动访问拼接后的URL(比如https://www.annemergmed.com/issue/S0196-0644(21)X0012-1?pageStart=1),确认页面确实返回了第二页的内容,避免网站有其他反爬机制(比如需要登录、Cookie验证等)。
  2. 查看网站的robots.txt文件,确认你的爬取行为符合网站的规则。

内容的提问来源于stack exchange,提问作者Pradeep Karthik Muthusamy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:23:13