sanya84
@sanya84
Фанатик Python 3

Как правильно сделать вложенный цикл for?

Привет!

Как правильно вложить циклы for друг в друга?
Вот скрипт:
import requests
from bs4 import BeautifulSoup

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2)\
            AppleWebKit/537.36 (KHTML, like Gecko)\
            Chrome/63.0.3239.84 Safari/537.36',
           'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7'}
url = "https://www.python.org/events/python-events"

def upcoming_event(headers, url):
    content = requests.get(url, headers=headers).content
    page = BeautifulSoup(content, "lxml")
    
    for event in page.findAll('h3'):
        print("Событие:", event.text)
        for date in page.findAll('time'):
            print("Дата:", date.text)
        for location in page.findAll('span'):
            print("Место:", location.text)
        
upcoming_event(headers, url)

Нужно чтобы он выводил:
Событие:
Дата:
Место:
Событие:
Дата:
Место:
.....
  • Вопрос задан
  • 288 просмотров
Решения вопроса 3
Если в общем виде, то примерно так:

from pprint import pprint
from urllib import request
from urllib.error import URLError

from bs4 import BeautifulSoup


def get_html_from_url(target_url):
    try:
        html = request.urlopen(target_url).read().decode('UTF-8')
        return html
    except URLError:
        print('Не могу открыть url')


def parse_events(html_events):
    events = list()
    for item in html_events:
        events.append({
            'Событие': item.h3.a.string,
            'Дата': item.p.time['datetime'],
            'Место': item.find('span', {'class': 'event-location'}).string
        })
    return events


if __name__ == '__main__':
    url = "https://www.python.org/events/python-events"

    raw_html = get_html_from_url(url)
    soup = BeautifulSoup(raw_html, 'html.parser')
    item_list = soup.find('ul', attrs={'class': 'list-recent-events menu'})
    python_events = parse_events(item_list.find_all('li'))
    pprint(python_events)
Ответ написан
Комментировать
@Stqs
senior software developer
что б так вывести нужно итерировать по чему-то что содержит событие, место и дату
может стоит итерировать не по h3 и цепляться за более общий "контейнер"
дальше соотвественно данные искать не в page, а относительно найденного контейнера
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
рекомендую xpath , если без извращений
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы