Python 如何使用selenium、BeautifulSoup和headless Google从Google打印答案

Python 如何使用selenium、BeautifulSoup和headless Google从Google打印答案,python,selenium,web-scraping,beautifulsoup,Python,Selenium,Web Scraping,Beautifulsoup,我想制作一个程序,使用selenium和headless Google从Google获取每个问题的答案 除非我不更改文本字符串,否则此程序工作正常。因为Google类会随着每个文本字符串不断变化 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait as wait from selenium

我想制作一个程序,使用selenium和headless Google从Google获取每个问题的答案

除非我不更改
文本
字符串,否则此程序工作正常。因为Google类会随着每个
文本
字符串不断变化

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException


options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1200x600')
driver = webdriver.Chrome(executable_path="C:\\chromedriver\\chromedriver_win32\\chromedriver.exe",chrome_options=options)
text='How to make pie'
text.replace(" ","+")
driver.get('https://www.google.com/search?q='+text)
driver.implicitly_wait(5)
copiedText = wait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "span.Y0NH2b.CLPzrc"))).text
print(copiedText)
driver.quit()
所以我在互联网上找到了另一种方法,根据他们的说法,这种方法对每个
文本
字符串都很有效。他们说soup库方法soup.find_all()为每个谷歌搜索找到类。我复制了相同的编码,但它给了我错误“索引超出范围”

代码:

answer=soup.find(class=“Z0LcW”)

如果我用
Z0LcW
的值搜索
class
,那么我得到的谷歌搜索结果是
J.K.罗琳

我在多个浏览器上尝试了相同的问题,您正在寻找的这个标记现在总是一样的,如下所示

J.K.罗琳

我不能向您保证,类名
Z0LcW
将始终与您的答案相同,因为我相信它是自动生成的

不同的问题文本
梅西多大了?
示例:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from bs4 import BeautifulSoup
from urllib.parse import urlparse
import sys

options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1200x600')
driver = webdriver.Chrome(chrome_options=options)
text="How old is messi?"
text.replace(" ", "+")
driver.get('https://www.google.com/search?q=' + text)
time.sleep(10)
copiedText = wait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "gsfi"))).text
print(copiedText)
soup = BeautifulSoup(driver.page_source, "html.parser")
answer = soup.find(class_="Z0LcW")
print(answer.get_text())
driver.quit()
输出:

30年

代码:

answer=soup.find(class=“Z0LcW”)

如果我用
Z0LcW
的值搜索
class
,那么我得到的谷歌搜索结果是
J.K.罗琳

我在多个浏览器上尝试了相同的问题,您正在寻找的这个标记现在总是一样的,如下所示

J.K.罗琳

我不能向您保证,类名
Z0LcW
将始终与您的答案相同,因为我相信它是自动生成的

不同的问题文本
梅西多大了?
示例:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from bs4 import BeautifulSoup
from urllib.parse import urlparse
import sys

options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1200x600')
driver = webdriver.Chrome(chrome_options=options)
text="How old is messi?"
text.replace(" ", "+")
driver.get('https://www.google.com/search?q=' + text)
time.sleep(10)
copiedText = wait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "gsfi"))).text
print(copiedText)
soup = BeautifulSoup(driver.page_source, "html.parser")
answer = soup.find(class_="Z0LcW")
print(answer.get_text())
driver.quit()
输出:


30年

soup.find(class=“Z0LcW”)
Yes在这种情况下,find\u all()函数似乎是多余的。我更新了我的答案。:)@我既不想找到哈利波特作者的答案,也不想找到如何做馅饼的答案。我想做一个这样的程序,无论我用谷歌搜索什么,它都能给我答案。谷歌似乎对几乎每一个答案都进行了分类。那我们该怎么办?你所要求的是不可能做到的,因为这需要谷歌以某种方式回答你所有的问题,即使这是胡言乱语。在某些情况下,你会问问题,得到的只是网络结果(意味着要访问的网站),而不是像这样的特定答案。要理解我的意思,请尝试用谷歌搜索
我多大了?
,你将不会得到答案。但是如果你用谷歌搜索一个主流问题,比如《哈利波特》的作者是谁?
,谷歌会给你一个答案,这样你的代码就可以解析谷歌给出的答案。是的@user9181286猜对了。请阅读下面的评论
soup.find(class=“Z0LcW”)
Yes在这种情况下find\u all()函数似乎是多余的。我更新了我的答案。:)@我既不想找到哈利波特作者的答案,也不想找到如何做馅饼的答案。我想做一个这样的程序,无论我用谷歌搜索什么,它都能给我答案。谷歌似乎对几乎每一个答案都进行了分类。那我们该怎么办?你所要求的是不可能做到的,因为这需要谷歌以某种方式回答你所有的问题,即使这是胡言乱语。在某些情况下,你会问问题,得到的只是网络结果(意味着要访问的网站),而不是像这样的特定答案。要理解我的意思,请尝试用谷歌搜索
我多大了?
,你将不会得到答案。但是如果你用谷歌搜索一个主流问题,比如《哈利波特》的作者是谁?
,谷歌会给你一个答案,这样你的代码就可以解析谷歌给出的答案。是的@user9181286猜对了。请阿里仔细阅读下面的评论,你在找哪篇文章?你能给出
“如何做馅饼”
“谁是哈利波特的作者”
@debanjanB的示例文本吗?我想做一个通用程序,这样无论我搜索什么,它都能给我答案。我发现,对于每一个不同的谷歌搜索,我们必须面对一个新的类。那我们该怎么办?你到底在找什么文本?你能给出
“如何做馅饼”
“谁是哈利波特的作者”
@debanjanB的示例文本吗?我想做一个通用程序,这样无论我搜索什么,它都能给我答案。我发现,对于每一个不同的谷歌搜索,我们必须面对一个新的类。那我们怎么办?