soup.select ('. r a') в f 'https://google.com/search?q={query}' возвращает пустой список в Python BeautifulSoup. ** НЕ ДУБЛИКАТ ** - PullRequest
0 голосов
/ 19 июня 2019

"Мне повезло!" Проект в книге «Автоматизировать скучные вещи с Python» больше не работает с предоставленным им кодом.

В частности, linkElems = soup.select ('. R a')

Я уже пробовал использовать решение, предоставленное в: soup.select ('. R a') в 'https://www.google.com/#q=vigilante+mic' дает пустой список в python BeautifulSoup

, и я в настоящее время использую тот же формат поиска.

import webbrowser, requests, bs4

def im_feeling_lucky():

    # Make search query look like Google's
    search = '+'.join(input('Search Google: ').split(" "))

    # Pull html from Google
    print('Googling...') # display text while downloading the Google page
    res = requests.get(f'https://google.com/search?q={search}&oq={search}')
    res.raise_for_status()

    # Retrieve top search result link
    soup = bs4.BeautifulSoup(res.text, features='lxml')


    # Open a browser tab for each result.
    linkElems = soup.select('.r')  # Returns empty list
    numOpen = min(5, len(linkElems))
    print('Before for loop')
    for i in range(numOpen):
        webbrowser.open(f'http://google.com{linkElems[i].get("href")}')

Переменная linkElems возвращает пустой список [], и программа ничего не делает после этого.

1 Ответ

1 голос
/ 04 июля 2019

У меня тоже была такая же проблема при чтении этой книги, и я нашел решение этой проблемы.

замена

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"))

приведенный выше код принимает входные данные из аргументов командной строки

...