好的,我有这个 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
我本以为这很简单,但我是个菜鸟,它已经困扰我好几天了。
您的代码中有很多拼写错误,所以我不能确定为什么您的搜索不匹配任何内容,但最可能的问题是您正在搜索属性“ID”(大写),但是标记中的属性是“id”(小写)。
由于您只想查找一个标签,因此我建议您使用 find(),它将单独返回标签,而不是包含该标签的列表。这就是我编写代码的方式:
print soup.find('a', id='_uscAncHomesite')
# <a href="0" id="_uscAncHomesite" target="_blank">...</a>
顺便说一下,你对 findAll 的使用让我觉得你正在使用 Beautiful Soup 3。我推荐 Beautiful Soup 4 用于所有新项目。
我刚刚检查了该页面的源代码,没有
_uscAnc1Homesite
。
不过,有一个_uscAncHomesite
。也许你不小心插入了那个1
?
尝试一下:
import re
hjemmesidelink = soup2.findAll('a', id='_uscAncHomesite')
regex = r'\[<a href="([^"]+)"'
pair = re.findall(regex, hjemmesidelink)
这应该可以完美识别您的链接。