Я пытаюсь найти URL-адрес, содержащий '.ics' в href. На днях я протестировал этот код, и он работал отлично, но теперь, когда я пытаюсь найти ссылку в ссылках, 'печать ссылки' приводит к:

<a class="element-invisible element-focusable" href="#main-content" 
tabindex="1">Skip to main content</a>
<a class="element-invisible element-focusable" href="#main-content">Skip to 
main content</a>

Из-за этого код if link.get ('href') никогда не выполняется, и URL-адрес не возвращается. Что вызывает это, и есть ли другой способ вернуть URL-адрес, содержащий '.ics'?

page = requests.get('https://registrar.fas.harvard.edu/calendar').content
soup = bs4.BeautifulSoup(page, 'lxml')

links = soup.find_all('a')
#print links    
for link in links:
    print link    

    if link.get('href') != None and '.ics' in link.get('href'):
        endout = link.get('href')

        if endout[:6] == 'webcal':
            endout ='https' + endout[6:]
        print
        print 'URL: ' + endout
        print
        return endout
    break
0
MQ1217 13 Июл 2017 в 20:43
Почему у вас есть return вне функции?
 – 
Vinícius Figueiredo
13 Июл 2017 в 20:46
1
Что ж, в показанном коде нет никакой функции, кроме этого, почему вы вызываете break в своем цикле for? Этот break не позволяет циклу запускаться более одного раза и, следовательно, печатать больше ссылок.
 – 
Vinícius Figueiredo
13 Июл 2017 в 20:50
1
OK. Выполнение того же самого сценария, но удаление return, выводит мне именно то, что вы хотите, URL-адрес с ".ics" в URL-адресе.
 – 
Vinícius Figueiredo
13 Июл 2017 в 20:54
1
Наверное, нет, он выводит мне URL: https://registrar.fas.harvard.edu/calendar/upcoming/all/export.ics, но ответ от coldspeed очень подходит! знак равно
 – 
Vinícius Figueiredo
13 Июл 2017 в 20:58
1
В любом случае спасибо за ваши комментарии, я ценю вторую пару глаз в любое время!
 – 
MQ1217
13 Июл 2017 в 21:15

1 ответ

Лучший ответ

Я бы порекомендовал оптимизировать поиск, передав селектор css href и шаблон регулярного выражения:

links = soup.find_all('a', {'href' : re.compile('.*\.ics') })

Выход:

[<a class="subscribe" href="https://registrar.fas.harvard.edu/calendar/upcoming/all/export.ics">subscribe</a>,
 <a class="ical" href="https://registrar.fas.harvard.edu/calendar/upcoming/all/export.ics">iCal</a>]

Теперь вам не придется перепрыгивать через обручи, чтобы проверить свои теги привязки.

3
cs95 13 Июл 2017 в 20:49
Потрясающе, спасибо вам большое! Приму, как только время позволит мне
 – 
MQ1217
13 Июл 2017 в 20:54
Рад помочь. :)
 – 
cs95
13 Июл 2017 в 21:04