python - 嵌套的 while 循环不会按预期中断
问题描述
我有一个链接列表,对于每个链接,我想检查它是否包含特定的子链接并将此子链接添加到初始列表中。我有这个代码:
def getAllLinks():
i = 0
baseUrl = 'http://www.cdep.ro/pls/legis/'
sourcePaths = ['legis_pck.lista_anuala?an=2012&emi=3&tip=18&rep=0','legis_pck.lista_anuala?an=2020&emi=3&tip=18&rep=0&nrc=1', 'legis_pck.lista_anuala?an=2010&emi=3&tip=18&rep=0']
while i < len(sourcePaths)+1:
for path in sourcePaths:
res = requests.get(f'{baseUrl}{path}')
soup = BeautifulSoup(res.text)
next_btn = soup.find(lambda e: e.name == 'td' and '1..99' in e.text)
if next_btn:
for a in next_btn.find_all('a', href=True):
linkNextPage = a['href']
sourcePaths.append(linkNextPage)
i += 1
break
else:
i += 1
continue
break
return sourcePaths
print(getAllLinks())
列表中的第一个链接不包含子链接,所以这是一个else
案例。代码可以做到这一点。但是,列表中的第二个链接确实包含子链接,但它卡在这里:
for a in next_btn.find_all('a', href=True):
linkNextPage = a['href']
sourcePaths.append(linkNextPage)
i += 1
第三个链接包含子链接,但我的代码无法查看该链接。最后,我得到一个列表,其中包含初始链接加上第二个链接的子链接的 4 倍。
我想我在某个地方错误地打破了,但我不知道如何解决它。
解决方案
删除while
. 这不是必需的。更改选择器
import requests
from bs4 import BeautifulSoup
def getAllLinks():
baseUrl = 'http://www.cdep.ro/pls/legis/'
sourcePaths = ['legis_pck.lista_anuala?an=2012&emi=3&tip=18&rep=0','legis_pck.lista_anuala?an=2020&emi=3&tip=18&rep=0&nrc=1', 'legis_pck.lista_anuala?an=2010&emi=3&tip=18&rep=0']
for path in sourcePaths:
res = requests.get(f'{baseUrl}{path}')
soup = BeautifulSoup(res.text, "html.parser")
next_btn = soup.find("p",class_="headline").find("table", {"align":"center"})
if next_btn:
anchor = next_btn.find_all("td")[-1].find("a")
if anchor: sourcePaths.append(anchor["href"])
return sourcePaths
print(getAllLinks())
输出:
['legis_pck.lista_anuala?an=2012&emi=3&tip=18&rep=0', 'legis_pck.lista_anuala?an=2020&emi=3&tip=18&rep=0&nrc=1', 'legis_pck.lista_anuala?an=2010&emi=3&tip=18&rep=0', 'legis_pck.lista_anuala?an=2020&emi=3&tip=18&rep=0&nrc=100', 'legis_pck.lista_anuala?an=2010&emi=3&tip=18&rep=0&nrc=100']
推荐阅读
- apache-spark - Pyspark RDD - 过滤和未过滤的数据
- iis - 类型违反的继承安全规则:'DevExpress.Web.Mvc.DevExpressEditorsBinder'
- ios - Firebase / Firestore 没有获取文档和运行代码
- continuous-integration - Codemagic 自动构建没有被触发
- mysql - 我正在抓取 researchgate 网站配置文件并将它们存储到数据库中,但会引发错误
- git - 在推送新功能分支之前我应该从开发分支中拉出吗
- c - 我在 Visual Studio 中的 C 代码显示调试错误
- python-3.x - RestAPI 项目结构为 celery 工人构建单独的图像
- javascript - 在反应中显示列表数据作为分隔符
- mysql - 时间字段(格式为 '02:00:00 PM' )无法从 Excel 导出到 MySql