python - 用 bs4 抓取 Google 知识框
问题描述
我正在尝试抓取谷歌搜索结果。这样,去谷歌搜索“苹果”。你会看到在搜索结果的右栏,知识框里有一个“股票价格:AAPL”
我需要从搜索结果中删除 AAPL。一旦我检查了源代码,我发现它是“kno-fv”。
page = requests.get("https://www.google.com/search?rlz=1C1CHBF_enUS916US916&ei=R3VZX_OGNvG9gge5n42YDw&q=apple&oq=aaple&gs_lcp=CgZwc3ktYWIQAzIQCC4QsQMQxwEQowIQQxCTAjIECAAQQzILCC4QsQMQxwEQowIyCAgAELEDEIMBMgQIABBDMgcIABCxAxBDMgUIABCxAzICCAAyBQgAELEDMggILhDHARCvAVAAWABgiiBoAHAAeACAAZIBiAGSAZIBAzAuMZgBAKoBB2d3cy13aXrAAQE&sclient=psy-ab&ved=0ahUKEwizxsCurN3rAhXxnuAKHblPA_MQ4dUDCA0&uact=5")
soup = BeautifulSoup(page.content, 'html.parser')
ticker=soup.find('span', attrs={'class': "kno-fv"})
data = ticker.get_text()
但是,它一直给我错误或找不到 "AAPL" 。
解决方案
Google 在没有适当的用户代理标头的情况下阻止。我已经requests.get
从您的代码示例中传递了用户代理字符串,它成功地提取了该 AAPL 代码。
import requests
from bs4 import BeautifulSoup
headers = {
"User-Agent":
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36"
}
page = requests.get(
"https://www.google.com/search?rlz=1C1CHBF_enUS916US916&ei=R3VZX_OGNvG9gge5n42YDw&q=apple&oq=aaple&gs_lcp=CgZwc3ktYWIQAzIQCC4QsQMQxwEQowIQQxCTAjIECAAQQzILCC4QsQMQxwEQowIyCAgAELEDEIMBMgQIABBDMgcIABCxAxBDMgUIABCxAzICCAAyBQgAELEDMggILhDHARCvAVAAWABgiiBoAHAAeACAAZIBiAGSAZIBAzAuMZgBAKoBB2d3cy13aXrAAQE&sclient=psy-ab&ved=0ahUKEwizxsCurN3rAhXxnuAKHblPA_MQ4dUDCA0&uact=5",
headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')
ticker = soup.find('span', attrs={'class': "kno-fv"})
data = ticker.get_text()
print(data)
输出
AAPL (NASDAQ) $139.07 +2.20 (+1.61%)Jan 22, 4:00 PM EST - Disclaimer
或者,如果您只想访问从搜索结果中提取的数据而不抓取 Google,您可以使用SerpApi。这是一项免费试用的付费服务。
from serpapi import GoogleSearch
import os
params = {
"q": "Apple",
"api_key": os.getenv("API_KEY")
}
search = GoogleSearch(params)
data = search.get_dict()
ticker = data["knowledge_graph"]["stock_price"]
print(ticker)
输出
AAPL (NASDAQ) $139.07 +2.20 (+1.61%)Jan 22, 4 - 00 PM EST - Disclaimer
免责声明:我在 SerpApi 工作。
推荐阅读
- angular - 如何使用 Angular Material Table 值的条件格式
- python - 如何从 HTML 输入元素中检索“值”?
- javascript - 导入一个 js 库并在 vue-cli 组件中全局使用它(vue 2)
- google-cloud-platform - 云代码:部署到云运行不起作用
- javascript - 用对象实例方法链依次解析promise
- java - java.lang.ClassNotFoundException: org.apache.jsp.index_jsp 部署 Spring Boot 应用程序时出错
- android - 在 Android Studio 中添加投影(带有参数颜色、x、y 和模糊)
- javascript - 在 jquery 上收到错误消息“未捕获的 TypeError:无法读取属性 'ownerDocument' of null”
- android-jetpack-compose - Jetpack 在 LazyColumn 和 LazyRow 上编写滚动条
- makefile - 如何在 Clion 中启用 Makefile 插件