首页 > 解决方案 > f'https://google.com/search?q={query}' 中的 soup.select('.ra') 带回 Python BeautifulSoup 中的空列表。**不是重复的**

问题描述

情况:

“我很幸运!” “用 Python 自动化无聊的东西”电子书中的项目不再适用于他提供的代码。

具体来说:

linkElems = soup.select('.r a')

我做了什么: 我已经尝试过使用这个stackoverflow 问题中提供的解决方案

我目前也在使用相同的搜索格式。

代码:

    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 变量返回一个空列表 [] 并且程序在此之后不做任何事情。

问题:

有人可以指导我正确处理此问题的方法,并解释为什么它不起作用吗?

标签: pythonbeautifulsouppython-requestspython-webbrowser

解决方案


我在阅读那本书时也遇到了同样的问题,并找到了解决该问题的方法。

更换

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

上面的代码从命令行参数中获取输入


推荐阅读