我想通过Google搜索获取实时股票价格数据

时间:2019-04-18 22:33:12

标签: python web-scraping beautifulsoup

我试图使用网络抓取功能通过Google搜索获取实时股价,但这给了我一个错误

resp = requests.get("https://www.google.com/search?q=apple+share+price&oq=apple+share&aqs=chrome.0.0j69i57j0l4.11811j1j7&sourceid=chrome&ie=UTF-8")
soup = bs.BeautifulSoup(resp.text,'lxml')
tab = soup.find('div',attrs = {'class':'gsrt'}).find('span').text
  

“ NoneType”对象找不到属性

enter image description here

3 个答案:

答案 0 :(得分:0)

尝试一下...

resp = requests.get("https://www.google.com/search?q=apple+share+price&oq=apple+share&aqs=chrome.0.0j69i57j0l4.11811j1j7&sourceid=chrome&ie=UTF-8")
soup = bs(resp.text,'lxml')
tab = soup.find('div', class_='g').findAll('span')
print(tab[3].text.strip())

或者,如果您只想要价格。

resp = requests.get("https://www.google.com/search?q=apple+share+price&oq=apple+share&aqs=chrome.0.0j69i57j0l4.11811j1j7&sourceid=chrome&ie=UTF-8")
soup = bs(resp.text,'lxml')
tab = soup.find('div', class_='g').findAll('span')
price = tab[3].text.strip()
print(price[:7])`

答案 1 :(得分:0)

您可以使用

soup.select_one('td[colspan="3"] b').text

代码:

import requests
from bs4 import BeautifulSoup as bs

headers = {'User-Agent' : 'Mozilla/5.0'}
res = requests.get('https://www.google.com/search?q=apple+share+price&oq=apple+share&aqs=chrome.0.0j69i57j0l4.11811j1j7&sourceid=chrome&ie=UTF-8', headers = headers)
soup = bs(res.content, 'lxml')
quote = soup.select_one('td[colspan="3"] b').text
print(quote)

答案 2 :(得分:0)

user-agent 未在您的请求中指定。这可能是您得到空结果的原因。这样,Google 会将您的请求视为 python-requests 又名自动脚本,而不是“真实用户”访问。

这很容易做到:

  1. 点击 SelectorGadget Chrome 扩展程序(安装后)。
  2. 点击股票价格并收到 SelectorGadget 提供的 CSS 选择器。
  3. 使用此选择器获取数据。

代码和full example in the online IDE

from bs4 import BeautifulSoup
import requests, lxml

headers = {
    'User-agent':
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582"
}

html = requests.get('https://www.google.com/search?q=nasdaq stock price', headers=headers)
soup = BeautifulSoup(html.text, 'lxml')

current_stock_price = soup.select_one('.wT3VGc').text
print(current_stock_price)

>>> 177,33

或者,您可以使用来自 SerpApi 的 Google Direct Answer Box API 来做同样的事情。这是一个付费 API,可免费试用 5,000 次搜索。

这个例子中最大的不同是你不必弄清楚为什么有些东西不起作用,尽管它应该起作用。已为最终用户完成所有工作(在本例中为所有选择并弄清楚如何抓取此数据),并带有 json 输出。

要集成的代码:

from serpapi import GoogleSearch

params = {
  "api_key": "YOUR_API_KEY",
  "engine": "google",
  "q": "nasdaq stock price",
}

search = GoogleSearch(params)
results = search.get_dict()

current_stock_price = results['answer_box']['price']
print(current_stock_price)

>>> 177.42
<块引用>

免责声明,我为 SerpApi 工作。