好的,所以我有这个html页面(充满了不同的网址),我想抓住一个网址并打印出来。
网页为:https://bdkv2.borger.dk/foa/Sider/default.aspx?fk=22&foaid=11523251
我想打印网址www.albertslund.dk
在源代码中看起来像这样:
<a href="http://www.albertslund.dk" id="_uscAncHomesite" target="_blank"><strong><span id="ctl00_PlaceHolderMain_FormControlHandler1__uscShowDataAuthorityDetails__uscLblHomesite">http://www.albertslund.dk</span></strong></a>
当我尝试抓住它并使用它的ID(使用BeautifulSoup和Mechanize)打印它时,它只返回一个空列表。我想使用ID获取URL,因为我正在抓取一堆类似的网站,我想要的东西具有相同的ID。
kommuneside = br.open(https://bdkv2.borger.dk/foa/Sider/default.aspx?fk=22&foaid=11523251)
html2 = kommuneside.read()
soup2 = BeautifulSoup(html2)
hjemmesidelink = soup2.findAll('a', attras={'ID':'_uscAncHomesite'})
print hjemmesidelink
这只返回一个空列表: []
如果我这样做:
print hjemmesidelink['href']
我得到:TypeError:list indices必须是整数,而不是str
我会想,这是非常简单的,但我是一个新手,现在它已经困扰了我好几天。
答案 0 :(得分:1)
您的代码中存在一些拼写错误,因此我无法确定您的搜索为何与任何内容不匹配,但最可能的问题是您正在搜索属性“ID”(大写) ,但标记中的属性是“id”(小写)。
由于您只想查找一个标记,我建议您使用find(),它将自行返回标记,而不是包含标记的列表。这就是我编写代码的方式:
print soup.find('a', id='_uscAncHomesite')
# <a href="0" id="_uscAncHomesite" target="_blank">...</a>
顺便提一下,你使用findAll会让我觉得你正在使用Beautiful Soup 3.我建议Beautiful Soup 4用于所有新项目。
答案 1 :(得分:0)
我刚检查了该页面的源代码,但没有_uscAnc1Homesite
。
但是,有一个_uscAncHomesite
。也许你不小心插入了1
?
尝试使用:
import re
hjemmesidelink = soup2.findAll('a', id='_uscAncHomesite')
regex = r'\[<a href="([^"]+)"'
pair = re.findall(regex, hjemmesidelink)
这应该完美地识别您的链接。