0

私はPythonを初めて使用し、最初のWebスクレーパーの1つを構築しようとしています。ページに移動し、一連のサブページを開いて、ページ上の特定のリンク(IDを含む)を見つけてから、リンクデータを印刷したいと思います。今、私はエラーを受け取ります:'リストインデックスはstrではなく整数でなければなりません'、これは私が(少なくとも)コードの最後の行で何か間違ったことをしていることを意味します。

私が本当に確信が持てないのは、特定のリンクからhrefデータを取得して解析するために何をする必要があるかということです。残りは機能していると思います(サブページの読み込み)。スクレーパーは(想定される)デンマークのコミューンのすべてのURLを取得して印刷するため、印刷の最初の行は次のようになります。

http://www.albertslund.dk(さらに97をフォロー)

とにかく、ここにコードがあります-私が間違っていることを誰かが教えてくれることを願っています。よろしくお願いします。

from BeautifulSoup import BeautifulSoup
from mechanize import Browser

f = open("kommuneadresser.txt", "w")
br = Browser()
url = "https://bdkv2.borger.dk/foa/Sider/default.aspx?fk=22&foaid=11541520"
page = br.open(url)
html = page.read()
soup = BeautifulSoup(html)
link = soup.findAll('a')
kommunelink = link[21:116]

#we create a loop - for every single kommunelink in the list, 
#'something' will happen
for kommune in kommunelink:
    #the link-part is saved as a string
    kommuneurl = kommune['href']
    #we construct a new url from two strings
    fuldurl = "https://bdkv2.borger.dk/" + kommuneurl
    #we open the page and save it in a variable
    kommuneside = br.open(fuldurl)
    #we read the page
    html2 = kommuneside.read()
    #we handle the page in beautifulsoup
    soup2 = BeautifulSoup(html2)
    #we find a specific link on the page
    hjemmesidelink = soup2.findAll('a', attras={'ID':"uscAncHomesite"})
    print hjemmesidelink['href']
4

2 に答える 2

1

まずはビューティフルスープ。findAll () はListを返します。

また、soup2 で最後の findAll を実行することもできます。hjemmesidelink からどの項目が必要になるかわかりませんので、コードの最後の 5 行でこれを試してください。

#we handle the page in beautifulsoup
soup2 = BeautifulSoup(html2)
#we find a specific link on the page
hjemmesidelink = soup2.findAll('a', attras={'ID':"uscAncHomesite"})
print hjemmesidelink

この方法で最初のアイテムを印刷します

print hjemmesidelink[0]
于 2012-07-30T14:19:59.850 に答える
1

これを試しましたか?

for link in soup.find_all('a'):
    print(link.get('href'))
于 2012-07-30T14:22:51.470 に答える