我正在尝试从包含.ics
日历的网页中获取.ics
文件的网址。例如,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
文件的网址的更好方法是什么?
答案 0 :(得分:2)
代码中的break
将在一次迭代后停止脚本,您需要再次缩进,将其放入if
(或使用return
代替)。目前,无论for
的结果是什么,它都会打破if
。
还有第二个问题是<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')
的链接来解决此问题。
固定代码:
source.on('addfeature', function(feature) {
// do something with the feature
}, this);