首页 > 解决方案 > 如何替换这个嵌套循环?

问题描述

这里的目标是从网站获取文本并将其附加到列表中,这样我就可以从中创建一个数据框。经过大量 Google 之后,我设法做到了这一点,但现在我明白这不是最有效的方法,一直在研究列表理解,但无法获得成功的结果。

containers = soup.find_all('td', class_=['TableRecords_EvenLine', 'TableRecords_OddLine'])

dateli = []
descli = []
amtli = []

for container in containers:
    date = container.select('div[id*=wtDataMov]')
    for element1 in date:
        seci1 = element1.get_text()
        dateli.append(seci1)
    description = container.select('div[id*=wtDescricao]')
    for element2 in description:
        seci2 = element2.get_text()
        descli.append(seci2)
    amount = container.select('div[id*=wtValorEur]')
    for element3 in amount:
        seci3 = element3.get_text()
        amtli.append(float(price_str(seci3)))

想法?谢谢你的时间。

标签: listweb-scrapingbeautifulsoupnested-loops

解决方案


如果你想使用列表推导来完成它,它看起来像这样

containers = soup.find_all('td', class_=['TableRecords_EvenLine', 'TableRecords_OddLine'])

dateli = []
descli = []
amtli = []

for container in containers:
    dateli += [e.get_text() for e in container.select('div[id*=wtDataMov]')]
    descli += [e.get_text() for e in container.select('div[id*=wtDescricao]')]
    amtli  += [float(price_str(e.get_text())) for e in container.select('div[id*=wtValorEur]')]

推荐阅读