Python BeautifulSoup如何获取前50个选中的checkbox值
问题修复方案
原代码存在的问题
- 未正确获取checkbox的
value属性,错误调用不存在的data[0].text逻辑,导致无法拿到目标值甚至运行报错 - 没有实现「单页最多取前50个值」的限制逻辑
- 写入逻辑错误,原代码会给每个匹配到的checkbox单独写一行,不符合「同页前50个用逗号分隔成一行写入」的需求
- 未加请求头,目标站点大概率会拦截爬虫请求返回403状态码,无法正常获取页面内容
修复后可运行代码
import requests from bs4 import BeautifulSoup # 配置请求头模拟浏览器访问,避免被站点拦截 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" } # 外层统一打开文件,避免重复IO操作提升效率 with open("tags.txt", "a", encoding="utf-8") as f_out, open("links.txt", "r", encoding="utf-8") as a_file: for line in a_file: stripped_line = line.strip() # 跳过links.txt里的空行 if not stripped_line: continue # 发起页面请求 resp = requests.get(stripped_line, headers=headers) resp.encoding = "utf-8" soup = BeautifulSoup(resp.text, "html.parser") # 提取选中的checkbox的value值,最多取50个 value_list = [] for inp in soup.select('div.col-md-2 > input[checked=""]'): current_val = inp.get("value", "").strip() if current_val: value_list.append(current_val) if len(value_list) >= 50: break # 拼接成逗号分隔字符串写入文件 if value_list: f_out.write(",".join(value_list) + "\n")
代码调整说明
- 新增浏览器UA请求头,解决站点反爬拦截问题
- 正确提取每个checkbox的
value属性值,过滤空值 - 新增提取数量限制,满50个自动停止当前页面的提取逻辑
- 优化文件IO逻辑,统一在最外层打开读写文件,减少重复打开关闭的性能消耗
- 新增空行跳过逻辑,避免
links.txt里的空行导致请求报错
内容的提问来源于stack exchange,提问作者Katherine Elizabeth Kath
相关产品推荐
相关产品推荐

