Очистите несколько макетов блоков ответов Google с помощью Python

В этом сообщении в блоге рассказывается, как очищать: погоду, акции, конвертер, калькулятор, номер телефона, адрес, население, перевод, словарь, совпадения, рейсы, формулы и органические результаты с несколькими макетами ответов с помощью Python.

Примечание. Здесь рассматриваются не все возможные макеты. Некоторые из них я мог просто не видеть.

вступление

Вы увидите использование if/elif/else, try/except, list понимания, использование функции. Простые вещи, но если вы немного новичок в этом, обязательно посмотрите, что делают некоторые вещи, так как не будет никакого правильного объяснения. Будет показано альтернативное решение API.

Предпосылки

Знакомство с библиотеками beautifulsoup, requests, selenium и селекторами CSS.

Чтобы получить селекторы CSS, взгляните на расширение SelectorsGadget для Chrome, чтобы легко получить селекторы CSS, щелкнув нужный элемент в браузере. CSS селекторов ссылка.

Очистить окно ответов калькулятора Google

Очистите окно ответов Google Weather

Очистите окно ответов Google Stock

В настоящее время существует два макета в зависимости от страны, из которой был инициирован поиск ('gl'='COUNTRY' параметр запроса):

Очистите окно ответов Google Population

Очистить окно ответов Google Converter

Очистите окно ответа словаря Google

Очистите поле Google First Organic Answer Box

Очистите второе органическое окно ответов Google

Очистите третье поле органических ответов Google

Очистить окно ответов Google Translation

Очистите поля ответов Google Formula

В настоящее время я нашел два макета формул, этот и тот, что ниже. С первым все просто, со вторым немного сложнее.

Второй макет отличается тем, что при разборе таких формул ( скриншот ниже) в таком макете нет <img> опции очистки, вместо этого это обычный текст, который не имеет никакого смысла.

Чтобы заставить его работать, мы можем сделать снимок экрана через .screenshot('filename.png') и сделать запрос post и обработать это изображение снимка экрана в код.

Примечание. Использование замедляет все достаточно сильно.

Скриншоты от Selenium:

И несколько примеров реальных скриншотов:

Для преобразования изображений с помощью нам необходимо обработать изображение и преобразовать скриншоты в код Latex.

  1. Сделайте авторизацию.
  2. Сделайте post запрос и пришлите уже сделанные скриншоты.
import requests
import json

r = requests.post("https://api.mathpix.com/v3/text",
    files={"file": open("YOUR_IMAGE_FILE.png","rb")},
    data={
      "options_json": json.dumps({
        "math_inline_delimiters": ["$", "$"],
        "rm_spaces": True
      })
    },
    headers={
        "app_id": "APP_ID",
        "app_key": "APP_KEY"
    }
)
print(json.dumps(r.json(), indent=4, sort_keys=True))

Получить ответ:

{
  "auto_rotate_confidence": 0.0046418966250847404,
  "auto_rotate_degrees": 0,
  "confidence": 0.9849104881286621,
  "confidence_rate": 0.9849104881286621,
  "is_handwritten": true,
  "is_printed": false,
  "latex_styled": "f(x)=\\left\\{\\begin{array}{ll}\nx^{2} & \\text { if } x<0 \\\\\n2 x & \\text { if } x \\geq 0\n\\end{array}\\right.",
  "request_id": "bd02af63ef187492c085331c60151d98",
  "text": "$f(x)=\\left\\{\\begin{array}{ll}x^{2} & \\text { if } x<0 \\\\ 2 x & \\text { if } x \\geq 0\\end{array}\\right.$"
}
...

Примечание: возможно, использование mathpix будет достаточно для вашей задачи, но если это не так, используйте вместо этого Wolfram Alpha, это их предметная область.

Посмотрите другие доступные параметры запроса и описание формата. Их цена API.

Очистите блоки ответов Google Flights

Очистить окна ответов Google Matches

Очистите поле ответа адреса Google

Очистка окна ответов Google с помощью SerpApi

SerpApi — это платный API с бесплатным планом.

Отличие в том, что все, что было сделано выше и даже больше, уже присутствует по умолчанию и нет необходимости поддерживать парсер со временем, если что-то в верстке HTML изменится и сломает парсер.

Вместо этого единственное, что действительно нужно сделать, — это перебрать структурированный JSON и быстро получить нужные данные.

Пример кода для всех упомянутых макетов, кроме второго макета формулы:

Ссылки

Код в онлайн-среде разработкиGoogle Direct Answer Box APIMathpixWolfram Alpha

Outro

Если у вас есть какие-либо вопросы, или что-то работает неправильно, или у вас есть какие-либо предложения, не стесняйтесь оставлять комментарии в разделе комментариев или через Twitter на @serp_api. Если вы нашли ошибку при использовании SerpApi, пожалуйста, добавьте эту ошибку на Форум SerpApi.

Ваш,

Дмитрий и остальные члены команды SerpApi.

Первоначально опубликовано на https://serpapi.com 29 сентября 2021 г.