使用BeautifulSoup获取按钮opacity属性判断爬取终止条件
解决方案
核心判断逻辑
你可以通过BeautifulSoup读取按钮元素的属性值实现终止条件判断,两种判断方式可选:
- 最简判断:直接检查按钮是否存在
style属性即可,因为未到最后一页时按钮无style属性,最后一页才会追加带opacity规则的style属性 - 严谨判断:解析
style属性的内容,确认是否包含opacity: 0规则,避免后续网站给按钮新增其他样式规则导致判断失效
代码示例
首先你需要先通过浏览器开发者工具的网络面板,抓到点击「SHOW MORE」按钮时触发的AJAX请求,确认请求参数的变化规律(比如offset、page参数的递增规则),之后按照以下逻辑写循环:
import requests from bs4 import BeautifulSoup import time # 初始化请求参数,根据你抓包的结果调整 base_url = "你要爬取的接口地址" page = 1 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" } while True: # 发请求拿页面/接口数据 params = {"page": page} # 根据实际抓包的参数调整 resp = requests.get(base_url, params=params, headers=headers) resp.encoding = "utf-8" soup = BeautifulSoup(resp.text, "lxml") # 这里写你抓取当前页数据的业务逻辑 # ... # 定位SHOW MORE按钮 show_more_btn = soup.find("a", class_="MaisArtigos") # 判断是否到最后一页 if show_more_btn and show_more_btn.has_attr("style"): style_content = show_more_btn["style"].replace(" ", "") if "opacity:0" in style_content: # 触发终止条件,退出循环 break # 没到最后一页,页码+1继续爬 page += 1 # 加延时避免请求频率过高被封IP time.sleep(2)
注意事项
- 如果接口返回的是JSON格式而非HTML,按钮的状态可能会在JSON的某个字段里标识,不需要解析HTML也能判断终止条件
- 如果请求后返回的HTML里没有按钮元素,可以检查是不是请求头缺了Referer、Cookie等必要参数,补充后再测试
内容的提问来源于stack exchange,提问作者Herminio Henriques
相关产品推荐
相关产品推荐

