我找到了一个程序脚本,用Python构建了一个集中的爬虫。 该脚本已在函数(google_scrape)中停止。在执行此功能时,我一直在执行错误。 此错误是(列表索引超出范围) 你能帮我吗?
# Uses google search engine to find out the results for user query.
def google_scrape(query):
address = "http://www.google.com/search?q=%s&num=100&hl=en&start=0" % (urllib.quote_plus(query))
request = urllib2.Request(address, None, {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11'})
urlfile = urllib2.urlopen(request)
page = urlfile.read()
soup = BeautifulSoup(page)
links = []
count = 0
li = soup.findAll('li', attrs={'class':'g'})
while count < 10:
sLink = li[count].find('a')
links.append(sLink['href'])
count += 1
return links
答案 0 :(得分:0)
您可能少于10个链接,请尝试:
for count in range(len(li)):
sLink = li[count].find('a')
links.append(sLink['href'])
count += 1
如果li
包含10个以上的元素,您的代码将起作用,但是如果它包含少于10个元素,则会出现错误,因为您将尝试访问列表外的元素,从而导致索引错误。使用for
和range(len(li))
,您可以在所有元素上循环播放,而与列表的长度无关,从而防止了索引错误。
答案 1 :(得分:0)
li = soup.findAll('li', attrs={'class':'g'}, limit=10)
for elem in li:
sLink = elem.find('a')
links.append(sLink['href'])
count += 1
答案 2 :(得分:0)
您可以收集所有内容并测试返回列表的长度,然后相应地切片列表
items = [item['href'] for item in soup.select('li.g a')]
length = len(items)
if length < 10:
final = items[:length + 1]
else:
final = items[:10]