Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何刮取谷歌搜索结果的一部分_Python_Google Chrome_Web Scraping_Beautifulsoup_Pycharm - Fatal编程技术网

Python 如何刮取谷歌搜索结果的一部分

Python 如何刮取谷歌搜索结果的一部分,python,google-chrome,web-scraping,beautifulsoup,pycharm,Python,Google Chrome,Web Scraping,Beautifulsoup,Pycharm,我想从谷歌提供的AMD股票中获取信息。 我已经能够抓取整个网页,但当我试图获得一个特定的div或class时,我找不到任何东西,控制台返回[]。 在抓取整个页面时,我也找不到这些类,在搜索之后,我发现这些类可能被Javascript隐藏,并且可以通过某种方式使用Selenium进行访问?我试着使用SeleniumWebDriver,但这毫无用处 这就是我到目前为止所做的: import requests from bs4 import BeautifulSoup import urllib3 f

我想从谷歌提供的AMD股票中获取信息。 我已经能够抓取整个网页,但当我试图获得一个特定的div或class时,我找不到任何东西,控制台返回[]。 在抓取整个页面时,我也找不到这些类,在搜索之后,我发现这些类可能被Javascript隐藏,并且可以通过某种方式使用Selenium进行访问?我试着使用SeleniumWebDriver,但这毫无用处

这就是我到目前为止所做的:

import requests
from bs4 import BeautifulSoup
import urllib3
from selenium import webdriver

requests.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"}


url = "https://www.google.com/search?q=amd+stock&oq=amd+stock&aqs=chrome..69i57j35i39j0l5j69i60.1017j0j7&sourceid=chrome&ie=UTF-8"
source_code = requests.get(url, requests.headers)
soup = BeautifulSoup(source_code.text, "html.parser")
amd = soup.find_all('div', attrs = {'class': 'aviV4d'})
print(amd)

当打印'soup'时,我得到整个页面,但当打印'amd'时,我得到[]

我认为您需要添加amd.response或amd.text

打印(修改响应)
打印(amd.text)

这是一个动态页面,它不会仅仅通过
请求提供页面源代码来给出股票价格。你必须用刮削来做那件事。请尝试以下方法:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--incognito")
chromedriver_path = './chromedriver'
driver = webdriver.Chrome(executable_path=chromedriver_path, options=options)
driver.get("https://www.google.com/search?q=amd+stock&oq=amd+stock&aqs=chrome..69i57j35i39j0l5j69i60.1017j0j7&sourceid=chrome&ie=UTF-8")

time.sleep(2)
x = driver.find_element_by_xpath('//*[@id="knowledge-finance-wholepage__entity-summary"]/div/g-card-section/div/g-card-section/span[1]/span/span[1]')

print(x.text)
driver.quit()
输出:

48.16

您的代码正常,但在
request()
调用中使用
headers=
参数:

import requests
from bs4 import BeautifulSoup

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"}

url = "https://www.google.com/search?q=amd+stock&oq=amd+stock&aqs=chrome..69i57j35i39j0l5j69i60.1017j0j7&sourceid=chrome&ie=UTF-8"
source_code = requests.get(url, headers=headers)
soup = BeautifulSoup(source_code.text, "html.parser")
amd = soup.find('div', attrs = {'class': 'aviV4d'})
print(amd.get_text(strip=True, separator='|').split('|')[:3])
印刷品:

['Advanced Micro Devices', 'NASDAQ: AMD', '48,16']

我发现这可能被JavaScript隐藏了。。。。没有隐藏,只是使用JavaScript动态生成。Selenium替换了请求和BeautifulSoup,因此目前在这里没有什么可以做的。即使OP的问题与JavaScript无关,比如一个错误的BeautifulSoup查询,这仍然不能解决任何问题。事实上,我相信它总是会抛出一个错误。这似乎奏效了!是否也可以得到一个输出,使我可以刮整个图形,布局等。。。?所以我可以在网站上使用它。好吧,这个解决方案有效的事实使当前的大多数问题无效,不是吗?那么这将是一个新的问题,你的意思是要在堆栈溢出上发布?你将不得不使用刮削来做这件事。不过他们已经在做网页抓取了。