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