如何只打印BeautifulSoup值?

时间:2012-08-06 13:45:49

标签: python web-scraping beautifulsoup mechanize

我已经构建了一个带有for循环的webscraper。我不知道为什么,但它返回一个url(这是我希望它返回的),然后在获取列表中的下一个url之前,它返回一个NoneType对象。除了使脚本变慢之外,这不是什么大问题,如果不是因为我不能让它打印得比第一个网址更多。

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'对象的位置/原因?非常感谢。

1 个答案:

答案 0 :(得分:1)

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

代码的这一部分:

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

并计数。