在同一行中打印2个循环的结果

时间:2018-06-07 02:08:11

标签: python web-scraping printing-web-page

我对Python的网页抓取相当新;在阅读了关于该主题的大部分教程后,我决定试一试。我终于有一个网站工作,但输出格式不正确。

import requests
import bs4
from bs4 import BeautifulSoup
import pandas as pd
import time


page = requests.get("https://leeweebrothers.com/our-food/lunch-boxes/#")
soup = BeautifulSoup(page.text, "html.parser")

for div in soup.find_all('h2'): #prints the name of the food"
    print(div.text)
for a in soup.find_all('span', {'class' : 'amount'}): #prints price of the food
    print(a.text)

输出

我希望食物的名称与食物的相应价格并排印刷,并以“ - ”连接......感谢任何给予的帮助,谢谢!

编辑:在下面的@Reblochon Masque评论之后 - 我遇到了另一个问题;正如你所看到的,这是一个来自网站上内置购物车的价值0.00美元,如何将其排除在异常值之外并继续向下移动,同时确保价格中的其他项目“向上移动”以对应到正确的食物?

Output2

2 个答案:

答案 0 :(得分:1)

你可以压缩两个结果:

names = soup.find_all('h2')
rest = soup.find_all('span', {'class' : 'amount'})
for div, a in zip(names, rest):
    print('{} - {}'.format(div.text, a.text))
    # print(f"{div.text} - {a.text}")   # for python > 3.6

答案 1 :(得分:1)

最佳做法是在for循环中使用zip函数,但我们也可以这样做。这只是为了表明我们可以使用indexing两个列表来完成。

names = soup.find_all('h2')
rest = soup.find_all('span', {'class' : 'amount'})
for index in range(len(names)):
    print('{} - {}'.format(names[index].text, rest[index].text))