С тех пор как Google прикрыл свой Google Web Search Api в 2011, было очень сложно найти альтернативу. Нам нужно было получать ссылки из Google поиска с помощью скрипта на Python. Итак, мы сделали свой, и покажем небольшой гайд о том, как парсить Google поиск при помощи библиотеки requests и Beautiful Soup.
Для начала, давайте установим зависимости. Сохраним следующую информацию в файле requiriments.txt
requests bs4
Теперь, в командной строке, запустим pip install -r requiriments.txt для того, чтобы эти зависимости установить. Затем импортируем эти модули в скрипт:
import urllib import requests from bs4 import BeautifulSoup
Для выполнения поиска, Google ожидает, что запрос будет в параметрах URL. Кроме того, все пробелы должны быть заменены на знак ‘+’. Чтобы построить URL, мы правильно отформатируем запрос и поместим его в параметр q.
query = "hackernoon How To Scrape Google With Python" query = query.replace(' ', '+') URL = f"https://google.com/search?q={query}"
Google возвращает разные результаты поиска для мобильных и настольных компьютеров. Таким образом, в зависимости от варианта использования, мы должны указать соответствующий user-agent.
# desktop user-agent USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0" # mobile user-agent MOBILE_USER_AGENT = "Mozilla/5.0 (Linux; Android 7.0; SM-G930V Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36"
Сделать запрос легко. Однако requests ожидает, что user-agent будет в заголовках. Чтобы правильно установить заголовки, мы должны передать словарь для них.
headers = {"user-agent" : MOBILE_USER_AGENT} resp = requests.get(URL, headers=headers)
Теперь нам нужно проверить, проходит ли наш запрос. Самый простой способ — проверить статус-код. Если он возвращает значение 200, это значит, что запрос прошел успешно. Затем нам нужно поместить ответ на наш запрос в Beautiful Soup для разбора содержимого.
if resp.status_code == 200: soup = BeautifulSoup(resp.content, "html.parser")
Далее идет анализ данных и извлечение всех якорных ссылок со страницы. Это легко делается при помощи библиотеки Beautiful Soup. Поскольку мы итерируемся через якоря, нам нужно сохранить результаты в списке.
results = [] for g in soup.find_all('div', class_='r'): anchors = g.find_all('a') if anchors: link = anchors[0]['href'] title = g.find('h3').text item = { "title": title, "link": link } results.append(item) print(results)
Вот и все. Этот скрипт довольно прост и подвержен всякого рода ошибкам. Но вы ведь должны с чего-либо начать. Вы можете клонировать или скачать весь скрипт из git-репозитория.
Есть также некоторые предостережения, которые стоит учитывать при парсинге Google. Если вы выполняете слишком много запросов в течение короткого периода времени, Google начнет выдавать вам капчи. Это раздражает и будет ограничивать, вас в скорости и количестве запросов.
Вот почему был создан RapidAPI Google Search API, который позволяет выполнять неограниченный поиск, не беспокоясь о капчах.