Google Search Web Scraping с Python

В последнее время я много изучал Python, чтобы работать над некоторыми проектами на работе.

В настоящее время мне нужно сделать некоторую очистку веб-страниц с результатами поиска Google. Я нашел несколько сайтов, которые продемонстрировали, как использовать ajax google api для поиска, однако после попытки его использования он, похоже, больше не поддерживается. Какие-либо предложения?

Я долго искал способ найти способ, но, похоже, не могу найти никаких решений, которые в настоящее время работают.

 Ares27 июл. 2016 г., 20:45
Я написал поискового бота Google, он прекрасно работает, но поскольку использование бота напрямую нарушает ToS for Google, я не собираюсь его публиковать. Все, что вы пытаетесь сделать, возможно, пройти через официальные API.
 Ares27 июл. 2016 г., 19:30
ВыМожно ищите в Google без API, но вы, вероятно, забаните Google, если они подозревают, что вы бот. Прочитайте TOS, вам, вероятно, придется заплатить, чтобы использовать их API любым существенным способом.
 pbell27 июл. 2016 г., 20:34
Я исследовал, как это сделать без API, я должен изменить свой заголовок / информацию о пользовательском агенте. Но даже когда я делаю это, я все еще не могу получить результаты. Если бы это сработало, я бы просто поместил таймер сна между каждым запросом, чтобы его не рассматривали как бота.

Ответы на вопрос(3)

Вот еще один сервис, который можно использовать для очистки поисковой выдачи (https://zenserp.com) Это не требует клиента и дешевле.

Вот пример кода Python:

import requests

headers = {
    'apikey': '',
}

params = (
    ('q', 'Pied Piper'),
    ('location', 'United States'),
    ('search_engine', 'google.com'),
    ('language', 'English'),
)

response = requests.get('https://app.zenserp.com/api/status', headers=headers, params=params)
 Dominik Kukacka28 мая 2019 г., 12:59
Я пользуюсь API уже 2 месяца, так как он был единственным, предлагающим бесплатный план для начала. Работает хорошо и не имеет проблем до сих пор!

Вы также можете использовать сторонний сервис, такой какSerp API это результаты поиска в Google. Это решает проблемы блокировки, и вам не нужно арендовать прокси и делать результат, анализируя себя.

Это легко интегрировать с Python:

from lib.google_search_results import GoogleSearchResults

params = {
    "q" : "Coffee",
    "location" : "Austin, Texas, United States",
    "hl" : "en",
    "gl" : "us",
    "google_domain" : "google.com",
    "api_key" : "demo",
}

query = GoogleSearchResults(params)
dictionary_results = query.get_dictionary()

GitHub:https://github.com/serpapi/google-search-results-python

Решение Вопроса

Вы всегда можете напрямую пересмотреть результаты Google. Для этого вы можете использовать URLhttps://google.com/search?q=<Query> это вернет 10 лучших результатов поиска.

Тогда вы можете использоватьLXML например для разбора страницы. В зависимости от того, что вы используете, вы можете запросить результирующее дерево узлов с помощью CSS-селектора (.r a) или с помощью XPath-Selector (//h3[@class="r"]/a)

В некоторых случаях полученный URL-адрес будет перенаправлен в Google. Обычно он содержит параметр запросаqкоторый будет содержать фактический URL-адрес запроса.

Пример кода с использованием lxml и запросов

from urllib.parse import urlencode, urlparse, parse_qs

from lxml.html import fromstring
from requests import get

raw = get("https://www.google.com/search?q=StackOverflow").text
page = fromstring(raw)

for result in pg.cssselect(".r a"):
    url = result.get("href")
    if url.startswith("/url?"):
        url = parse_qs(urlparse(url).query)['q']
    print(url[0])

Примечание о запрете вашего IP-адреса в Google. По моему опыту, Google запрещает только, если вы начинаете рассылать в Google спам-запросы. Он ответит 503, если Google считает, что вы бот.

 pbell28 июл. 2016 г., 16:39
Спасибо, я смог получить что-то похожее на это.
 Billy Jhon19 мар. 2017 г., 21:19
@Lane Rettig Работает нормально.
 Lane Rettig06 мар. 2017 г., 16:35
На сегодняшний день это не работает для меня. Когда я просматриваю исходную и DOM-структуру страницы результатов поиска Google, создается впечатление, что результаты загружаются и отображаются в JavaScript, что предотвратит этот вид наивного анализа. Это работает для кого-то еще?

Ваш ответ на вопрос