如何用Python获取包含.ics文件的HTML href属性的URL?

2024-06-15 06:15:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从包含.ics日历的网页中获取.ics文件的URL。例如,https://meded.hms.harvard.edu/calendar,但它应该适用于任何包含.ics的网页。 下面是我天真的尝试(没有打印任何东西,我也不知道为什么):

import urllib2
import requests
import bs4

def get_ics_url(url):

    #page = requests.get('https://meded.hms.harvard.edu/calendar').content

    page = requests.get(url).content
    soup = bs4.BeautifulSoup(page, 'lxml')

    links = soup.find_all('a')

    for link in links:
        if link.get('href')[-4:]=='.ics':
            endout = type(link.get('href'))

            print endout
        break

我做错了什么?有什么更好的方法来获取我要查找的.ics文件的URL?你知道吗


Tags: 文件httpsimporturl网页getpagelink
1条回答
网友
1楼 · 发布于 2024-06-15 06:15:51

代码中的break将在一次迭代后停止脚本,您需要再次缩进它,将其放入if(或者改用return)。目前,无论if的结果如何,它都会破坏for。你知道吗

第二个问题是有<a>元素没有href属性,这将导致脚本在到达任何.ics链接之前失败:

if link.get('href')[-4:]=='.ics':
TypeError: 'NoneType' object has no attribute '__getitem__'

例如:

<a name="main-content"></a>
<a class="cal-export" title="Note: Past events are not included">Export</a>

在对其执行数组操作之前,可以通过检查链接中的link.get('href') != None来修复此问题。你知道吗

固定代码:

import urllib2
import requests
import bs4

def get_ics_url(url):
    page = requests.get(url).content
    soup = bs4.BeautifulSoup(page, 'lxml')

    links = soup.find_all('a')

    for link in links:
        if link.get('href') != None and link.get('href')[-4:]=='.ics':
            endout = link.get('href')
            return endout

print get_ics_url('https://meded.hms.harvard.edu/calendar')

相关问题 更多 >