Все чаще и чаще проекты в области науки о данных (и не только) требуют дополнительных данных, которые можно получить с помощью веб-скрейпинга. Поиск в Google - не редкость.

В этом руководстве мы рассмотрим сценарий, который получает ссылки из результатов поиска Google.

Начнем с импорта, чтобы получить ссылки с первых n страниц результатов поиска Google, я использую селен и BeautifulSoup.

from bs4 import BeautifulSoup
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

Я также использую пакет webdriver_manager, который иногда бывает весьма кстати. Используя этот пакет, нет необходимости загружать веб-драйвер на локальный компьютер, если у вас его нет, это также помогает избежать ручного ввода пользовательского пути к веб-драйверу. Пакет поддерживает большинство браузеров.

Затем мы настроим некоторые настройки для веб-браузера. Чтобы веб-браузер не всплывал при запуске кода, я использую аргумент «без головы». Есть также несколько других опций, которые позволяют настроить веб-браузер в соответствии с поставленной задачей.

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")

Теперь мы можем запустить ChromeDriver. Для первого входного аргумента требуется путь к драйверу, однако с помощью webdriver_manager мы можем вместо этого использовать установку.

driver = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=chrome_options)

После настройки веб-драйвера мы можем перейти к основной части кода, где мы получаем веб-ссылки для результатов поиска Google.

# Query to obtain links
query = 'comprehensive guide to web scraping in python'
links = [] # Initiate empty list to capture final results
# Specify number of pages on google search, each page contains 10 #links
n_pages = 20 
for page in range(1, n_pages):
    url = "http://www.google.com/search?q=" + query + "&start=" +      str((page - 1) * 10)
    driver.get(url)
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    # soup = BeautifulSoup(r.text, 'html.parser')

    search = soup.find_all('div', class_="yuRUbf")
    for h in search:
        links.append(h.a.get('href'))

Код требует двух входных данных, интересующего запроса и количества страниц в поиске Google, которые нужно просмотреть. Каждая страница содержит 10 результатов поиска.

После того, как параметры настроены, мы загружаем URL-адрес с помощью selenium webdriver, а затем с помощью BeautifulSoup анализируем данные веб-сайта с помощью html.parser. Данные веб-сайта поступают в формате html, мы можем просмотреть сценарий, лежащий в основе веб-сайта, проверив веб-страницу.

Нас интересуют гиперссылки на результаты поиска, которые хранятся в контейнере ‹div class =’ yuRUbf ’›. Все элементы находятся с помощью команды BeautifulSoup .find_all (), где мы указываем элемент и класс в качестве входных данных.

search = soup.find_all('div', class_="yuRUbf")

Для каждого полученного нами результата поиска нам нужно извлечь гиперссылку, которая хранится как атрибут href элемента ‹a›.

for h in search:
        links.append(h.a.get('href'))

Теперь у нас есть все блоки кода, необходимые для получения ссылок на результаты поиска Google.