0

わかりましたので、この html ページ (さまざまな URL でいっぱい) があり、ここで単一の URL を取得して印刷します。

Web ページは次のとおりです。https://bdkv2.borger.dk/foa/Sider/default.aspx?fk=22&foaid=11523251

URL 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 ではなく整数でなければならない

とても簡単だと思っていたのですが、私は新人なので、何日も悩まされてきました。

4

2 に答える 2

1

あなたのコードには多くのタイプミスがあるので、あなたの検索が何にも一致しない理由ははっきりとは言えませんが、最も可能性の高い問題は、属性「ID」(大文字) を検索していることですが、マークアップの属性は「id」(小文字) です。

タグを 1 つだけ検索する場合は、タグを含むリストではなく、タグを単独で返すfind()を使用することをお勧めします。これは私がコードを書く方法です:

print soup.find('a', id='_uscAncHomesite')                                      
# <a href="0" id="_uscAncHomesite" target="_blank">...</a>

ちなみに、findAll を使用していると、Beautiful Soup 3 を使用していると思われます。すべての新しいプロジェクトにはBeautiful Soup 4をお勧めします。

于 2012-08-01T12:59:15.717 に答える
0

そのページのソースコードを確認したところ、_uscAnc1Homesite. ただし、 があり_uscAncHomesiteます。間違って挿入したのではない1でしょうか?

試してみてください:

import re

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

これにより、リンクが完全に識別されます。

于 2012-08-01T14:10:38.983 に答える