有关迭代和优化的问题

时间:2019-05-20 23:08:12

标签: python-3.x loops nested

Python 3的新手,我决定我的第一个项目将是一个网络抓取工具...

我希望进行一次迭代,以获取我第一次需要的所有值。是否有比我完成的方法更简单的方法?

我尝试将其作为一个循环,其中包含三个嵌套循环,只有第一个值最终会出现在数组中。

        for card in soup.find_all("div", class_="result"):
            for card in card.find_all('a', attrs={'class': 'jobtitle'}):
                job_data['Job Title'] = card.getText().strip()

        for card in soup.find_all("div", class_="result"):
            for card in card.find_all('span', attrs={'class': 'company'}):
                job_data['Company'] = card.getText().strip()

        for card in soup.find_all("div", class_="result"):      
            for card in card.find_all('div', attrs={'class': 'summary'}):
                job_data['Summary'] = card.getText().strip()

            print(job_data)

我只是真的想知道是否有一种更整洁的方式来执行此操作-我当前的代码有效,但它似乎不是最优雅的解决方案...

1 个答案:

答案 0 :(得分:0)

由于初始循环是相同的,因此可以在一次外部循环中完成所有三个内部循环。您可能还只想打印一次数据,所以请确保不要缩进该行。

这可以在下面看到:

for card in soup.find_all("div", class_="result"):
    for card in card.find_all('a', attrs={'class': 'jobtitle'}):
        job_data['Job Title'] = card.getText().strip()
    for card in card.find_all('span', attrs={'class': 'company'}):
        job_data['Company'] = card.getText().strip()
    for card in card.find_all('div', attrs={'class': 'summary'}):
        job_data['Summary'] = card.getText().strip()

print(job_data)