如何在BeautifulSoup中拆分find()结果,单独提取各文档名称
解决方法
问题出在目标网页的HTML结构不规范——外层<li>标签里嵌套了多个内层<li>,导致你原来的find_all('li')只能拿到外层的几个大条目,每个条目里包含多个文档。
直接定位到所有文档对应的<a>标签即可,因为每个文档名称都在<a>标签内:
from urllib.request import urlopen from bs4 import BeautifulSoup page = urlopen("https://www1.dnit.gov.br/editais/consulta/resumo.asp?NUMIDEdital=9109") html = page.read().decode("utf-8") soup = BeautifulSoup(html, "lxml") # 定位到"Arquivos de Licitação"对应的面板 link_panel = soup.find("ul", class_="links") # 递归查找面板下所有的<a>标签(不管嵌套层级) document_links = link_panel.find_all('a') # 提取每个文档的名称,strip=True去除多余空格和换行 document_names = [link.get_text(strip=True) for link in document_links] # 输出结果 for name in document_names: print(name)
如果想同时保留每个文档的链接,可修改为:
document_info = [{"name": link.get_text(strip=True), "url": link['href']} for link in document_links]
内容的提问来源于stack exchange,提问作者GovAuditor
相关产品推荐
相关产品推荐

