очистка Google Knowledge box с помощью bs4

#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, а затем решил написать модуль, распространив этот код на идентификатор компании, который просто определяет, является ли компания публичной или нет, по результатам поисковой выдачи. Я все еще не уверен, легель это или нет. Я использую это как модуль для определения компаний для моего исследования в университете США.