Это из книги "автоматизировать скучный материал с помощью python". Сначала я создал файл.bat и запускал его с аргументами из cmd, не открывал никаких страниц в хроме, искал здесь, менял код, все равно он отлично выполняет и печатает строку печати, но он не открывает вкладки, как это должно быть, Что я делаю неправильно? заранее спасибо
#! python3
# lucky.py opens several google search matches
import requests,sys,webbrowser,bs4
searchTerm1 = 'python'
print('Googling...')
res = requests.get('https://www.google.com/search?={0}'.format(searchTerm1))
res.raise_for_status()
#retrieve top search result links
soup = bs4.BeautifulSoup(res.text,"html.parser")
#open a browser tab for each result.
linkElems = soup.select('.r a')
numOpen = min(5,len(linkElems))
for i in range(numOpen):
webbrowser.open('http://google.com' + linkElems[i].get('href'))
Короткий ответ заключается в том, что ваш URL-адрес не возвращает результаты. Здесь URL-адрес, который предоставляет результаты: https://www.google.com/search?q=python.
Я изменил одну строку в вашем коде, чтобы использовать этот шаблон: " https://www.google.com/search?q= {0}, и я видел, что linkElems был нетривиальным.
Короче говоря, webbrowser
не открывает никаких страниц, потому что numOpen
равно 0, поэтому цикл for пытается перебрать более 0 элементов, что приводит к тому, что код внутри цикла для цикла (webbrowser.open
) не будет выполнен.
Более длинное и подробное объяснение того, почему numOpen = 0
связано с перенаправлением, которое происходит с первоначальным запросом GET, с учетом вашего пользовательского запроса Google. См. Этот ответ о том, как обойти эти проблемы, так как существует множество ways-, наиболее простым из которых является использование API поиска Google.
В результате перенаправления ваш поиск BeautifulSoup не вернет никаких успешных результатов, в результате чего переменная numOpen
будет установлена в 0, так как не будет элементов списка. Поскольку элементов списка нет, цикл for не выполняется.
Вы можете отлаживать такие вещи самостоятельно, быстро и грязно, но не идеально, просто добавляя инструкции печати во всем скрипте, чтобы увидеть, какие инструкции печати не выполняются, а также посмотрите на переменные и их возвращаемые значения.
В стороне, shebag также должен быть установлен в #!/usr/bin/env python3
а не просто #! python3
#! python3
. Ссылка здесь.
Надеюсь это поможет
numOpen
0?
res.text
. Google, вероятно, блокирует ваши запросы, так как обнаруживает, что вы не заходите из браузера.