为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Selenium 循环浏览网页的 <a> 标签

使用 Selenium 循环浏览网页的 <a> 标签

翻阅古今 2024-01-16 15:42:48
我正在使用 Selenium 使用 Python 构建一个网络爬虫。这是我正在从中抓取数据的网页:https://fnet.bmfbovespa.com.br/fnet/publico/abrirGerenciadorDocumentosCVM?cnpjFundo=11026627000138&idCategoriaDocumento=6&idTipoDocumento=45正如您所看到的,当我们单击标有数字的按钮时,该页面内的表格会发生变化。该页面是巴西基金报告。“Anterior” 的意思是“前一个”,“seguinte” 的意思是“下一个”。我想遍历所有这些数字,但我尝试过的方法都不起作用。我正在尝试使用 Selenium 的方法单击标识<a>按钮的标签。Seguinteclick()我尝试过的browser = Firefox()button = browser.find_element_by_id('tblDocumentosEnviados_next')while button.is_enabled():                    page = browser.find_element_by_xpath('//a[contains(@class, "paginate_button current")]').text    print(page)    button = browser.find_element_by_id('tblDocumentosEnviados_next')    time.sleep(3)    button.click()我如何迭代这些数字?
查看完整描述

3 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

我分析了网站发出的请求,发现您可以通过一个请求获取所有数据,即 json 内容:


import requests as r

from bs4 import BeautifulSoup

import json

url = "https://fnet.bmfbovespa.com.br/fnet/publico/abrirGerenciadorDocumentosCVM?cnpjFundo=11026627000138&idCategoriaDocumento=6&idTipoDocumento=45"


res = r.get("http://fnet.bmfbovespa.com.br/fnet/publico/pesquisarGerenciadorDocumentosDados?d=0&s=0&l=200&"+url.split("?")[1])

json_result = json.loads(res.text)

print(json_result)

注意:如果“recordsTotal”超过200,则需要再次请求,参数为“?d=0&s=200&l=200”,s代表start,l代表limit,始终保持200以一次抓取最大值要求。


查看完整回答
反对 回复 2024-01-16
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

正如你所看到的,两个按钮之间的区别只是按钮的数量


//*[@id="tblDocumentosEnviados_paginate"]/span/a[1]

//*[@id="tblDocumentosEnviados_paginate"]/span/a[2]

如果你想迭代它,你可以简单地更改 xpath 中的数字


例如


 for i in range(1, numberOfPages):

browser.find_element_by_xpath("//[@id="tblDocumentosEnviados_paginate"]/span/a["+str(i)+"]")

希望这能解决您想要做的事情


查看完整回答
反对 回复 2024-01-16
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

正如你所看到的,两个按钮之间的区别只是按钮的数量


//*[@id="tblDocumentosEnviados_paginate"]/span/a[1]

//*[@id="tblDocumentosEnviados_paginate"]/span/a[2]

如果你想迭代它,你可以简单地更改 xpath 中的数字


例如


 for i in range(1, numberOfPages):

browser.find_element_by_xpath("//[@id="tblDocumentosEnviados_paginate"]/span/a["+str(i)+"]")

希望这能解决您想要做的事情


查看完整回答
反对 回复 2024-01-16
  • 3 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信