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

使用BeautifulSoup爬取Placera网站时页码切换内容重复问题求助

解决网页分页爬取内容重复的问题

尝试爬取placera.se的公司搜索结果页面,切换页码时URL的sida参数从1变为2,但使用requests+BeautifulSoup爬取时,无论参数如何变化,返回的内容始终和第一页相同,代码如下:

import requests
from bs4 import BeautifulSoup

for i in range(1,11):
    URL = f"https://www.placera.se/placera/sok/bolag.html/ALL?query=17747&sida={i}"

    page = requests.get(URL)

    soup = BeautifulSoup(page.content, "html.parser")

    soup.find_all("p", class_="marginTop5px publishedBy")
    print(soup)

解决方案

你遇到的问题核心是网站的反爬校验或会话状态验证,以下是针对性的解决办法:

  • 添加浏览器请求头:多数网站会校验User-Agent字段,识别非浏览器请求后返回默认页面。需要在请求中加入模拟浏览器的UA信息。
  • 维持会话状态:用requests.Session()保持请求间的Cookie,部分网站会通过Cookie记录会话,分页请求需携带该Cookie才能返回对应页面。
  • 修正URL参数格式:原URL中的&是HTML转义字符,实际请求应使用&,避免服务器参数解析异常。

修改后的示例代码

import requests
from bs4 import BeautifulSoup

# 模拟Chrome浏览器请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

# 创建会话对象,自动维持Cookie
session = requests.Session()
session.headers.update(headers)

for i in range(1, 11):
    # 使用&替代转义后的&
    URL = f"https://www.placera.se/placera/sok/bolag.html/ALL?query=17747&sida={i}"
    
    page = session.get(URL)
    # 先校验请求状态,排查失败情况
    if page.status_code != 200:
        print(f"第{i}页请求失败,状态码:{page.status_code}")
        continue
    
    soup = BeautifulSoup(page.content, "html.parser")
    # 提取目标内容并输出
    target_items = soup.find_all("p", class_="marginTop5px publishedBy")
    print(f"第{i}页获取到{len(target_items)}条内容:")
    for item in target_items:
        print(item.get_text(strip=True))

如果上述方法仍无效,可打开浏览器开发者工具(F12)切换页码,观察Network标签中的真实请求参数和头信息,确保你的请求与浏览器完全一致。若网站通过JavaScript动态渲染内容,则需要使用Selenium或Playwright等工具模拟浏览器操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:01:27