У меня тоже была такая же проблема при чтении этой книги, и я нашел решение этой проблемы.
замена
soup.select('.r a')
с
soup.select('div#main > div > div > div > a')
решит эту проблему
следующий код, который будет работать
import webbrowser, requests, bs4 , sys
print('Googling...')
res = requests.get('https://google.com/search?q=' + ' '.join(sys.argv[1:]))
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text)
linkElems = soup.select('div#main > div > div > div > a')
numOpen = min(5, len(linkElems))
for i in range(numOpen):
webbrowser.open('http://google.com' + linkElems[i].get("href"))
приведенный выше код принимает входные данные из аргументов командной строки