Не удается избавиться от старых значений в цикле - PullRequest
0 голосов
/ 11 октября 2018

Я чищу этот сайт: http://housing.ucdavis.edu/dining/menus/dining-commons/tercero/. Вот мой код:

import requests #For request to the website
from bs4 import BeautifulSoup  #For parsering
from warnings import warn #For non-200 status code

url = 'http://housing.ucdavis.edu/dining/menus/dining-commons/tercero/' 
page = requests.get (url)
if page.status_code != 200:
    warn('Search: {}; Status code: {}. Status of the request is not normal.'.format (search, page.status_code))
else: 
    soup = BeautifulSoup(page.content, 'html.parser')

    main_content = soup.find('div', attrs = {'id': 'tab4content'})
    meal_tag = main_content.find_all('h4')

meal_list = []
for meal in meal_tag: 
    meal_name = meal.text
    meal_list.append(meal_name)
print ('The meals we have today are: '+", ".join(meal_list))
print (meal_list)


for meal_pick in meal_list: 
    print (meal_pick)
    locations_per_meal = main_content.find('h4',text=str(meal_pick)).find_next_siblings('h5')

    for location in locations_per_meal: 
        print (location.text)
        dish_list = main_content.find ('h5',text=location.text).find_next_sibling('ul')

        real_dish_list = []
        for dish in dish_list: 
            real_dish_list = dish_list.findChildren('span')

            real_item_list = []
            for item in real_dish_list:
                item = item.text
                real_item_list.append(item)
        print (real_item_list)

В основном, я хочу воспроизвести все названия блюд, где они находятся и к какой еде они относятсяк.Тем не менее, мой код работает только для завтрака, и другие блюда будут иметь те же блюда, что и завтрак, если только место не указано в завтраке.Я думаю, что почему-то я не могу переписать старые блюда новыми.Может ли кто-то иметь обзор и помочь мне по этому вопросу?Благодаря ~

1 Ответ

0 голосов
/ 11 октября 2018

У вас логическая ошибка, и ее трудно отладить, потому что вы пытаетесь напечатать неформатированный HTML прямо на консоль.Чтобы облегчить себе задачу, вы должны как можно раньше заполнить текст вашими структурированными данными, используя dict.update() или dict.setdefault().

Inлибо в интерактивной консоли Python, либо в работающей программе вы также можете получить доступ к самому последнему элементу из цикла вне его области действия, т.е.

menu = {}
for meal in meal_tag:
   # some loops later...
   menu.update({meal.text: {}})
# ...
import json
print(json.dumps(menu, indent=4))
print(meal.find_next_siblings('h5')[0].find_next_sibling('ul').find_all('li', recursive=False)[0].span.text)

Я рекомендую вам экспериментировать в интерпретаторе столько же, сколько и вы.can.

Вернемся к теме - ваша логическая ошибка, вероятно, как-то связана с тем, что print(real_item_list) находится в другой области действия, чем я ожидаю, что вы это сделаете, но я считаю отладку вашего кода достаточно раздражающей.не заглядывать в него слишком глубоко.

Опять же, подчеркивая важность максимально простой отладки.

На самом деле проще было просто переписать его.Вы должны быть в состоянии выполнить цикл за 7 строк и 3 цикла.

...