0

好的,所以我有这个 html 页面(充满了不同的 url),我想在其中获取一个 url 并打印它。

网页为: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:列表索引必须是整数,而不是 str

我会认为这很简单,但我是一个菜鸟,它已经困扰了我好几天了。

4

2 回答 2

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用于所有新项目。

于 2012-08-01T12:59:15.717 回答
0

我刚刚检查了那个页面的源代码,没有_uscAnc1Homesite. 但是,有一个_uscAncHomesite. 也许你不小心插入了那个1

试试看:

import re

hjemmesidelink = soup2.findAll('a', id='_uscAncHomesite')
regex = r'\[<a href="([^"]+)"'
pair = re.findall(regex, hjemmesidelink)

这应该可以完美地识别您的链接。

于 2012-08-01T14:10:38.983 回答