我是Python新手并尝试构建我的第一个webscrapers之一。我想去一个页面,打开一堆子页面,在页面上找到一个特定的链接(带有ID),然后我想打印链接数据。现在我得到错误:'list indices必须是整数,而不是str',这意味着我在(至少)最后一行代码中做错了。
我真正不确定的是,我需要做的是从特定链接中获取和解析href数据 - 因为我认为,其余的工作(加载子页面)。刮刀(假设)抓住丹麦公社的所有网址并打印出来,所以第一行打印应该是:
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']
答案 0 :(得分:1)
首先,BeautifulSoup。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]
答案 1 :(得分:1)
你试过这个吗?
for link in soup.find_all('a'):
print(link.get('href'))