веб-код Python не будет открывать ссылки

1

Это из книги "автоматизировать скучный материал с помощью 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'))
  • 0
    Попробуйте напечатать res.text . Google, вероятно, блокирует ваши запросы, так как обнаруживает, что вы не заходите из браузера.
  • 0
    Он отвечает 302, не то чтобы он был заблокирован полностью. Вы можете получать результаты поиска Google программно и без использования браузера, хотя вы должны делать это соответствующим образом.
Показать ещё 1 комментарий
Теги:
web-scraping
beautifulsoup

2 ответа

0
Лучший ответ

Короткий ответ заключается в том, что ваш URL-адрес не возвращает результаты. Здесь URL-адрес, который предоставляет результаты: https://www.google.com/search?q=python.

Я изменил одну строку в вашем коде, чтобы использовать этот шаблон: " https://www.google.com/search?q= {0}, и я видел, что linkElems был нетривиальным.

0

Короче говоря, 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. Ссылка здесь.

Надеюсь это поможет

  • 2
    И почему numOpen 0?
  • 0
    Спасибо за быстрый ответ! Во всяком случае, я попытался напечатать linkElems и он пуст, так что что-то там не так, я просто не уверен, что? когда я печатал res.text, он печатал много информации, и я уверен, что он должен был что-то оттуда извлечь.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню