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;id_turno=29/11/2022 3:00:00;29/11/2022 4: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=4&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;id_turno=29/11/2022 5:00:00;29/11/2022 6: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=6&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&id_turno=29/11/2022 19:00:00;29/11/2022 20:00:00&data=29/11/2022&id_turno_exportador=198397&id_turno_agenda=61298&id_transportadora=23213&id_turno_transp=68291&id_Cliente=40300&codigo_terminal=40300&codigo_empresa=1&codigo_exportador=24978&codigo_transportador=23213&codigo_turno=20&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
相关产品推荐
相关产品推荐

