Python使用BeautifulSoup爬虫提取value属性输出None问题求解
解决方法
现有代码存在两处核心错误:
- 循环逻辑冗余错误:
lista_pagine = soup3.find(class_='top-title')返回的是单个节点对象,遍历该对象得到的是其子节点,且遍历过程中始终用父节点lista_pagine查找id为pageSelect的元素,id在HTML中全局唯一,因此你往link_pagine_array中添加的都是重复的同一个select下拉框元素,而非你需要的带value属性的子选项。 - 提取对象错误:你提取value的对象是select元素本身,select元素的value属性是当前选中项的值,如果你需要获取所有选项的value,需要提取select下的所有
option标签的value属性。
修复后代码
link_capitolo_scelto = link_chapter_array[scelta_capitolo] chapter_url = simple_url + link_capitolo_scelto r3 = requests.get(chapter_url) soup3 = BeautifulSoup(r3.content, 'html.parser') # 直接定位到id为pageSelect的下拉框 page_select = soup3.find(id='pageSelect') # 定位下拉框下所有option标签 option_list = page_select.find_all('option') # 遍历提取每个option的value属性 for opt in option_list: print(opt.get('value'))
可选排查项
如果修改后仍返回None,可按顺序检查:
- 打印
r3.text确认请求返回的源码中确实存在目标标签,部分动态渲染的内容无法通过requests直接获取,需要使用无头浏览器等工具爬取。 - 确认目标标签的
value属性没有拼写错误,也没有被自定义属性替代。 - 先打印
page_select确认定位成功,避免因页面结构变动导致元素定位失败返回None。
内容的提问来源于stack exchange,提问作者user16711557
相关产品推荐
相关产品推荐

