Python 如何刮取谷歌搜索结果的一部分
我想从谷歌提供的AMD股票中获取信息。 我已经能够抓取整个网页,但当我试图获得一个特定的div或class时,我找不到任何东西,控制台返回[]。 在抓取整个页面时,我也找不到这些类,在搜索之后,我发现这些类可能被Javascript隐藏,并且可以通过某种方式使用Selenium进行访问?我试着使用SeleniumWebDriver,但这毫无用处 这就是我到目前为止所做的: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
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查询,这仍然不能解决任何问题。事实上,我相信它总是会抛出一个错误。这似乎奏效了!是否也可以得到一个输出,使我可以刮整个图形,布局等。。。?所以我可以在网站上使用它。好吧,这个解决方案有效的事实使当前的大多数问题无效,不是吗?那么这将是一个新的问题,你的意思是要在堆栈溢出上发布?你将不得不使用刮削来做这件事。不过他们已经在做网页抓取了。