Skip to main content
 首页 » 编程设计

python之如何只打印 BeautifulSoup 值

2025年05月04日9lidabo

我已经构建了一个带有 for 循环的网络爬虫。我不知道为什么,但它返回一个 url(这是我希望它返回的),然后在获取列表中的下一个 url 之前,它返回一个 NoneType 对象。除了让脚本变慢之外,这没什么大不了的,如果不是因为我无法让它打印比第一个 url 多的内容的话。

from BeautifulSoup import BeautifulSoup 
from mechanize import Browser 
br = Browser() 
page = br.open("https://bdkv2.borger.dk/foa/Sider/default.aspx?fk=22&foaid=11541520") 
html = page.read() 
soup = BeautifulSoup(html) 
link = soup.findAll('a') 
kommunelink = link[21:116] 
for kommune in kommunelink: 
    kommuneside = br.open(kommune['href']) 
    html2 = kommuneside.read() 
    soup2 = BeautifulSoup(html2) 
    hjemmesidelink = soup2.find('a', id='_uscAncHomesite') 
    print hjemmesidelink['href'] 

这样我的输出是这样的:

http://www.albertslund.dk 
 
Traceback (most recent call last): 
File "C:\Users\kba\Desktop\kommuneskraber.py", line 14, in <module> 
print hjemmesidelink['href'] 
TypeError: 'NoneType' object has no attribute '__getitem__' 

我试过搞乱这样的东西:如果变量 == 特定类,则打印,但这不起作用。示例:

If hjemmesidelink['href'] == <class 'BeautifulSoup.Tag'>: 
    print hjemmesidelink['href'] 
 
if hjemmesidelink.class == BeautifulSoup.Tag: 
    print hjemmesidelink['href'] 

知道应该怎么做吗?或者甚至更好,知道我的脚本在循环中每两次迭代时在哪里/为什么获取一个“NoneType”对象吗?非常感谢。

请您参考如下方法:

这不是一个完整的答案,但如果您查看评论,这将只回答关于不产生错误的部分。

这部分代码:

print hjemmesidelink['href'] 

替换为:

if hjemmesidelink: 
    print hjemmesidelink['href'] 

if hjemmesidelink: 检查 hjemmesidelink 是否有值,如果有,则打印它,如果没有,它将继续循环。

我的结果:

>>>  
http://www.albertslund.dk 
http://www.alleroed.dk 
http://www.assens.dk 
http://www.ballerup.dk 
http://www.billund.dk 
http://www.brk.dk 
http://www.brondby.dk 
http://www.broenderslev.dk 
http://www.dragoer.dk 

和计数。