BeautifulSoup:在html中查找特定URL并打印

问题描述 投票:0回答:2

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

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

python web-scraping beautifulsoup mechanize
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 用于所有新项目。


0
投票

我刚刚检查了该页面的源代码,没有

_uscAnc1Homesite
。 不过,有一个
_uscAncHomesite
。也许你不小心插入了那个
1

尝试一下:

import re

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

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.