2

for ループを使用して webscraper を作成しました。理由はわかりませんが、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 variable == specific class, then print, しかし、それは機能しません。例:

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

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

どのようにすべきか考えていますか?または、さらに良いかもしれませんが、スクリプトがループを反復するたびに「NoneType」オブジェクトをフェッチする場所/理由はありますか? 本当にありがとう。

4

1 に答える 1

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

そして、カウント。

于 2012-08-06T14:33:12.717 に答える