BeautifulSoup:在HTML和打印中查找特定的URL

时间:2012-08-01 11:48:28

标签: python screen-scraping web-scraping beautifulsoup mechanize

好的,所以我有这个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

我会想,这是非常简单的,但我是一个新手,现在它已经困扰了我好几天。

2 个答案:

答案 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)

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