@Maxwell012

Как через запросы искать информацию в гугле?

Недавно я выложил вопрос про то как подсчитать количество страниц на сайте, ccылка
Данный вопрос создан чтобы разобрать один из методов подсчета. Методов было несколько:
  • Использовать sitemap.xml
  • Индексация сайтов в гугл, то есть загуглить site:url (url - сайт который нужно искать) через несколько миллисекунд гугл выдаст количество найденных страниц
  • Зайти на страницу сайта и искать все ссылки ведущие на другие страницы сайта и грамотна проверять чтобы не попасть в бесконечный цикл
  • Использование инструментов для собирания информации о сайте (т.к. Screaming Frog)

Это все способы что мне удалось найти. Лично я писал скрипт проходясь по sitemap.xml, какие были у меня проблемы:
  • Маленькая скорость
  • Не все сайты имеют sitemap
  • Разная структура sitemap
  • В данный момент у меня стоит задача подсчитать страницы таких сайтов как википедия, ютуб и т.д., так как эти сайты имеют очень обширную sitemap этот способ не эффективный

Сразу скажу про инструменты такие как Screaming Frog, это было очень медленно и в итоге я не увидел статистики по количеству страниц.
Искать на главной странице ссылки которые ведут на другие странице это нереально долго.
Остается только поиск в гугле. В чем проблема, через selenium получается долго, хотя тоже не плохо если запускать в потоках и на несколько серверов, но проблема в капче и бане от гугла. Я так и не нашел никакого api которое давало бы мне возможность совершать много запросов в секунду. Код для selenium:
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
import time
from fake_useragent import UserAgent


def create_browser():
    ua = UserAgent()
    options = Options()
    options.add_argument(f"user-agent={ua.random}")
    browser = Chrome(options=options)
    return browser

def read_urls_file():
    with open("urls.txt", "r") as file:
        urls = [i for i in file.readlines()]
    return urls

def get_page_count(browser):
    WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, "result-stats")))

    result_text = browser.find_element(by=By.ID, value="result-stats").text

    count = int(result_text[25:result_text.find(" (")].replace(" ", ""))
    return count

def main():
    browser = create_browser()

    urls = read_urls_file()

    for index, url in enumerate(urls):
        browser.get(url)
        page_count = get_page_count(browser)
        print(f"{url.strip()}: {page_count}")

if __name__ == '__main__':
    main()

Также пробовал через запросы, но гугл меня детектит и не дает получить информацию.
Я уже запутался как можно выполнить данную задачу. Возможно я упускаю что-то или просто не понимаю. Возможно кто-то знает какую-то статью которая помогла бы мне с моей проблемой, или кто-то уже сталкивался с этим и знает как это можно решить.
  • Вопрос задан
  • 201 просмотр
Пригласить эксперта
Ответы на вопрос 1
@rPman
В данный момент у меня стоит задача подсчитать страницы таких сайтов как википедия, ютуб и т.д.
простые задачи не для тебя, считай весь интернет перебирать взялся

Правильный подход у тебя описан - перебирать все ссылки (ты еще про map-ы забыл, одно время были популярны, чтобы по ним пройтись можно было прокликать с каким то шагом по всей площади картинки), все остальные подходы - это оптимизации и лимиты.

Если у тебя не стоит задача исполнять javascript (т.е. считать что все ссылки на сайте доступны без его включения) то рекомендую воспользоваться готовыми инструментами, например wget умеет делать полную копию сайта с указанным уровнем вложенности.

Если стоит задача обрабатывать javascript то у тебя проблемы, никаких других универсальных способов, кроме как открывать сайт в браузере - нет, но можно взять старые версии webkit (версии, выпущенные лет 5-10 назад), на их основе мини браузер для анализа сайта будет потреблять очень мало оперативной памяти, а значит на одной машине таких скраперов может быть запущено сотнями, понятно что не все сайты смогут так работать, но процент достаточно высокий.

Так же можно попытаться разработать алгоритмы по определению, требует ли сайт полноценный браузер или ему хватит обычного wget и его аналогов. Что то можно вытащить, определив движок, на котором сайт написан, 90% интернета используют готовые фреймворки, у многих из них свои способы, где то можно попытаться вытащить карту сайта из кода, не выполняя его... стоит ли такая работа экономии на процессорах, хз
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы