使用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
相关产品推荐
相关产品推荐

