【发布时间】:2021-02-21 12:43:19
【问题描述】:
我正在使用漂亮的汤从谷歌搜索中找到第一个命中。
寻找“堆栈溢出”它应该找到https://www.stackoverflow.com
代码主要取自here 但是,它突然停止工作,结果[0] 被索引超出范围。
print results[0] IndexError: list index out of range
我怀疑这是一个缓存问题,因为它工作正常,然后在没有更改代码的情况下停止了。我也重新启动并清除了缓存,但仍然没有结果。
#!/usr/bin/python
# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import requests
import webbrowser # for webrowser, duh!
import re
#------------------------------------------------
def write_it(s, f):
# w for over write
file = open(f, "w")
file.write(s)
file.close()
#------------------------------------------------
def URL_encode_space(s):
return re.sub(r"\s", "%20", s)
#------------------------------------------------
def URL_decode_space(s):
return re.sub(r"%20", " ", s)
#------------------------------------------------
urlBase = "https://google.com"
searchRequest = "Stack Overflow"
print searchRequest
searchRequest = URL_encode_space(searchRequest)
# String literal for HTML quote
q = "%22" # is a "
numOfResults = 10
myURL = urlBase + "/search?q=" + q + searchRequest + q + "&num={" + str(numOfResults) + "}"
page = requests.get(myURL)
soup = BeautifulSoup(page.text, "html.parser")
links = soup.findAll("a")
results = []
for link in links:
link_href = link.get('href')
if "url?q=" in link_href and not "webcache" in link_href:
print (link.get('href').split("?q=")[1].split("&sa=U")[0])
results.append(link.get('href').split("?q=")[1].split("&sa=U")[0])
print results[0]
# open web browser?
webbrowser.open(myURL)
我显然可以检查“len(results)”来消除错误,但这并不能解释为什么它不再起作用。
【问题讨论】:
-
网址更改。适用于某些网址的代码不适用于其他网址。这里发生的确切情况尚不清楚,但从特定形式的 url 中提取信息的尝试在某些时候停止工作也就不足为奇了。
-
如果你在循环中执行
print(link_href)和break,你会看到第一个url 不满足if标准,当你执行results[0]时,你会得到错误。可能您需要在if块内缩进print(results[0])块。 -
如果你正在解析的页面不断变化,可能是第一次迭代if条件不满足,结果为空。您可以尝试在循环外打印结果
-
我怀疑代码停止工作,因为谷歌认为它“来自您的计算机网络的异常流量”
标签: python beautifulsoup