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

Python网页抓取问题:for循环获取onclick仅返回最后一个值

问题

使用Python结合BeautifulSoup做网页抓取时,通过find_all获取了所有title="Vaga disponível."的元素并赋值给Vagas,打印Vagas能看到所有目标元素,但在for循环中执行on_click = teste2.get('onclick')后,最后打印on_click只返回最后一个元素的onclick属性值,其余值都被覆盖了。

原代码:

soup = BeautifulSoup(stringue, "html.parser")

Vagas = soup.find_all(title="Vaga disponível.")

for teste2 in Vagas:
    on_click = teste2.get('onclick')

print(on_click)

Vagas的返回示例:

<input id="ctl00_ctl00_Content_Content_rpt_turno_4_ctl01_imb_vaga_1" name="ctl00$ctl00$Content$Content$rpt_turno_4$ctl01$imb_vaga_1" onclick="javascript:window.open('Cadastro.aspx?id_agenda=0&amp;amp;id_turno=29/11/2022 3:00:00;29/11/2022 4:00:00&amp;amp;data=29/11/2022&amp;amp;id_turno_exportador=198397&amp;amp;id_turno_agenda=61298&amp;amp;id_transportadora=23213&amp;amp;id_turno_transp=68291&amp;amp;id_Cliente=40300&amp;amp;codigo_terminal=40300&amp;amp;codigo_empresa=1&amp;amp;codigo_exportador=24978&amp;amp;codigo_transportador=23213&amp;amp;codigo_turno=4&amp;amp;turno_transp_vg=68291','_blank','height=850,width=1000,top=(screen.width)?(screen.width-1000)/2 : 0,left=(screen.height)?(screen.height-700)/2 : 0,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no');" src="../App_Themes/SisLog/Images/add-document.gif" style="height:20px;border-width:0px;" title="Vaga disponível." type="image"/>, 

<input id="ctl00_ctl00_Content_Content_rpt_turno_6_ctl01_imb_vaga_1" name="ctl00$ctl00$Content$Content$rpt_turno_6$ctl01$imb_vaga_1" onclick="javascript:window.open('Cadastro.aspx?id_agenda=0&amp;amp;id_turno=29/11/2022 5:00:00;29/11/2022 6:00:00&amp;amp;data=29/11/2022&amp;amp;id_turno_exportador=198397&amp;amp;id_turno_agenda=61298&amp;amp;id_transportadora=23213&amp;amp;id_turno_transp=68291&amp;amp;id_Cliente=40300&amp;amp;codigo_terminal=40300&amp;amp;codigo_empresa=1&amp;amp;codigo_exportador=24978&amp;amp;codigo_transportador=23213&amp;amp;codigo_turno=6&amp;amp;turno_transp_vg=68291','_blank','height=850,width=1000,top=(screen.width)?(screen.width-1000)/2 : 0,left=(screen.height)?(screen.height-700)/2 : 0,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no');" src="../App_Themes/SisLog/Images/add-document.gif" style="height:20px;border-width:0px;" title="Vaga disponível." type="image"/>,

on_click的返回结果:

javascript:window.open('Cadastro.aspx?id_agenda=0&amp;id_turno=29/11/2022 19:00:00;29/11/2022 20:00:00&amp;data=29/11/2022&amp;id_turno_exportador=198397&amp;id_turno_agenda=61298&amp;id_transportadora=23213&amp;id_turno_transp=68291&amp;id_Cliente=40300&amp;codigo_terminal=40300&amp;codigo_empresa=1&amp;codigo_exportador=24978&amp;codigo_transportador=23213&amp;codigo_turno=20&amp;turno_transp_vg=68291','_blank','height=850,width=1000,top=(screen.width)?(screen.width-1000)/2 : 0,left=(screen.height)?(screen.height-700)/2 : 0,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no');
解决方案

问题根源是:每次循环都会把on_click变量重新赋值为当前元素的onclick属性,循环结束后变量仅保留最后一次赋值的结果。

有两种常用解决方式:

方式1:循环内直接打印每个onclick值

如果只是需要查看或即时处理每个值,直接在循环内部打印即可:

soup = BeautifulSoup(stringue, "html.parser")

Vagas = soup.find_all(title="Vaga disponível.")

for teste2 in Vagas:
    on_click = teste2.get('onclick')
    print(on_click)  # 将打印操作移到循环内部

方式2:用列表存储所有onclick值

如果需要后续对所有值进行统一操作,可以把每个值存入列表:

soup = BeautifulSoup(stringue, "html.parser")

Vagas = soup.find_all(title="Vaga disponível.")
on_clicks = []  # 初始化空列表用于存储所有值

for teste2 in Vagas:
    on_click = teste2.get('onclick')
    on_clicks.append(on_click)  # 将每个onclick值添加到列表

print(on_clicks)  # 打印所有收集到的onclick值
# 后续可遍历on_clicks列表做进一步处理

内容的提问来源于stack exchange,提问作者Alexandre Rodrigues

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:10:25