python - 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 变量返回一个空列表 [] 并且程序在此之后不做任何事情。
问题:
有人可以指导我正确处理此问题的方法,并解释为什么它不起作用吗?
解决方案
我在阅读那本书时也遇到了同样的问题,并找到了解决该问题的方法。
更换
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"))
上面的代码从命令行参数中获取输入
推荐阅读
- kubernetes - 如何仅在入口处允许多个 IP
- html - 关闭复选框汉堡菜单,当在没有 javascript/jquery 的情况下在外部单击时
- vue.js - VueJS:axios:下载的文件已损坏,无法打开
- java - 在 JSP 页面中使用 errorPage 属性导致空指针异常
- android - 如何在中文 ROM 中使 android 前台服务通知置顶?
- java - 我需要在spring boot data jpa + hibernate中手动关闭连接吗
- android - Swift danielgindi/Charts - 饼图切片空间问题
- swift - 修复与主视图相关的 VStack,即使页面滚动,它也保持在同一个位置
- django - Django 聚合:使用 ForienKey 将两个字段相乘的总和
- flask - Flask 不会自动重定向到登录页面