#python #web-scraping #beautifulsoup #google-search-api #google-search-console
#python #очистка веб-страниц #beautifulsoup #google-search-api #google-поиск-консоль #google-search-console
Вопрос:
Я пытаюсь очистить результаты поиска Google. Таким образом, перейдите в Google и найдите «apple». Вы увидите, что в правой колонке результатов поиска в окне знаний есть «Цена акций: AAPL»
Мне нужно очистить AAPL из результатов поиска. Как только я проверяю источник, я нахожу его как «kno-fv».
page = requests.get("https://www.google.com/search?rlz=1C1CHBF_enUS916US916amp;ei=R3VZX_OGNvG9gge5n42YDwamp;q=appleamp;oq=aapleamp;gs_lcp=CgZwc3ktYWIQAzIQCC4QsQMQxwEQowIQQxCTAjIECAAQQzILCC4QsQMQxwEQowIyCAgAELEDEIMBMgQIABBDMgcIABCxAxBDMgUIABCxAzICCAAyBQgAELEDMggILhDHARCvAVAAWABgiiBoAHAAeACAAZIBiAGSAZIBAzAuMZgBAKoBB2d3cy13aXrAAQEamp;sclient=psy-abamp;ved=0ahUKEwizxsCurN3rAhXxnuAKHblPA_MQ4dUDCA0amp;uact=5")
soup = BeautifulSoup(page.content, 'html.parser')
ticker=soup.find('span', attrs={'class': "kno-fv"})
data = ticker.get_text()
Однако он продолжает выдавать мне ошибку или не может найти «AAPL».
Комментарии:
1. результат поиска запускает результат, который извлекает данные из источника. вы также можете получить информацию напрямую для Google Finance Pypi api. pypi.org/project/googlefinance
2. Спасибо за ответ и вашу любезную помощь, Джон. Я пытаюсь рассмотреть наличие цены акций в результатах поиска в качестве ориентира для определения того, является ли компания публичной или непубличной. У меня есть список из 9000 компаний. проверка слишком много вложена, и я в замешательстве. У вас есть возможность взглянуть?
3. Просто подумал, что окно или панель знаний Google не всегда срабатывает, и с капчей сложно работать, но в данном случае использования это, вероятно, произойдет. итак, если у Nationwide Mutual Insurance нет цены акций, оно является закрытым, а цена акций appl — общедоступной.
4. Так что да, еще раз очень хороший момент. Честно говоря, я не знал, что его название — Google knowledge box. в основном предлагаются платные сервисы API. есть ли у вас какие-либо предложения по удалению окна знаний Google 🙂
5.Google использует JavaScript для отображения результатов, но
requests
BS
не может запустить JavaScript. Как я помню, когда Google видит, что клиент не может использовать JavaScript, он отправляет другой HTML с разными классами и т.д. Отключите JavScript в веб-браузере, а затем выполните поискapple
, чтобы увидеть, что получает ваш скрипт.
Ответ №1:
Google блокирует без надлежащего заголовка user-agent. Я передал строку пользовательского агента в 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_enUS916US916amp;ei=R3VZX_OGNvG9gge5n42YDwamp;q=appleamp;oq=aapleamp;gs_lcp=CgZwc3ktYWIQAzIQCC4QsQMQxwEQowIQQxCTAjIECAAQQzILCC4QsQMQxwEQowIyCAgAELEDEIMBMgQIABBDMgcIABCxAxBDMgUIABCxAzICCAAyBQgAELEDMggILhDHARCvAVAAWABgiiBoAHAAeACAAZIBiAGSAZIBAzAuMZgBAKoBB2d3cy13aXrAAQEamp;sclient=psy-abamp;ved=0ahUKEwizxsCurN3rAhXxnuAKHblPA_MQ4dUDCA0amp;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.
Комментарии:
1. Могу ли я спросить вас, есть ли у SerpApi согласие Google на его API? Поскольку Google не может быть проанализирован, и я хочу использовать ваш api, но я боюсь юридических последствий (чтение robots.txt ).
2. @MatteoBianchi Я не юрист, но очистка общедоступных данных была легальной в Соединенных Штатах совсем недавно. См. HiQ против Linkedin . US Legal Shield — это наш продукт, который защищает наших клиентов от юридических проблем, связанных с утилизацией. Этот продукт представляет собой дополнительный уровень защиты, если закон снова изменится. Очевидно, что оно не будет расширяться, если ваше использование в противном случае незаконно. Например, использование нашего API для поиска целей для кибератак запрещено нашим TOS в соответствии с разделом 13 .
3. Привет, я также скептически относился к тому, чтобы продолжить удаление или нет. Я также прочитал об истории Linkedin, а затем решил написать модуль, распространив этот код на идентификатор компании, который просто определяет, является ли компания публичной или нет, по результатам поисковой выдачи. Я все еще не уверен, легель это или нет. Я использую это как модуль для определения компаний для моего исследования в университете США.