LINUX.ORG.RU

Подскажите алгоритм для генерации чего-то похожего на отпечаток пальца

 


0

1

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

Нужно описание алгоритма чего-то типа такого:

Я не знаю как эту штуку назвать. Гугель, возможно забанит если двигаться спиралью… У меня пока идей нет

Я так понимаю есть куча точек на карте, надо их обойти каким то непохожим на робота образом?

Вариантов довольно много, непонятно же как гугель определяет робот/не робот.

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

AntonI ★★★★★
()
Ответ на: комментарий от AntonI

Ну можно представить что у тебя что-то типа направления и начальных координат, выбираешь точку из узкого угла обзора, ну там градусов 30 вправо или влево и «идешь в этом направлени» от 100-200 пикселей, потом опять выбираешь точку и идешь вперед… и так пока до края не дойдешь, потом мышку «отпускаем» и ведем в центр (так же по кривой блуждая), и все по новой, выбрав рандомное направление, он не должен понять, просто не хочется чтобы гугель блоканул. он мне уже блочил один айпи - все что кроме почты 403 ошибку показывало. Тут дело такое, что сапер ошибается один раз

rtxtxtrx ★★
() автор топика
Последнее исправление: rtxtxtrx (всего исправлений: 2)
Ответ на: комментарий от rtxtxtrx

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

rtxtxtrx ★★
() автор топика
Ответ на: комментарий от AntonI

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

rtxtxtrx ★★
() автор топика
Ответ на: комментарий от AntonI

Нет. Он просто ответ с задержкой отдает. Ну там rate limit быстро перемещаться нельзя, где-то 5000 сайтов можно спарсить минут за 15, но это очень нудно

rtxtxtrx ★★
() автор топика
Ответ на: комментарий от AntonI

Я пробовал рандомные точки на противоположных сторонах рабочей области карты. Гугель не блокирует, но так уходишь в океан, где нет фирм (меня интересуют различные американские провайдеры для пентеста их жоп)

class Point(typing.NamedTuple):
    x: int
    y: int


def random_opposite_points(
    width: int,
    height: int,
) -> tuple[Point, Point]:
    if random.random() > 0.5:
        # Пара сторон AB и CD
        x1 = random.randint(0, width)
        x2 = random.randint(0, width)

        point1 = Point(x1, 0)
        point2 = Point(x2, height)
    else:
        # Пара сторон BC и DA
        y1 = random.randint(0, height)
        y2 = random.randint(0, height)
        point1 = Point(width, y1)
        point2 = Point(0, y2)

    # случайное направление
    return [
        (point1, point2),
        (point2, point1),
    ][random.getrandbits(1)]

Мож кому интересно будет: гугель никак не борется с ботами, собирающими ссылки на компании с гуглокарт

rtxtxtrx ★★
() автор топика

используй метод монте-карло, люк !!
берешь некоторый bbox и генеришь рандомные точки в нем, выдергиая тайлы. чтобы не повторятся можно фильтровать выхлоп рандома на повторяемость.

upd: контуры городов или штатов вытяни с опенстритмап

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от pfg

это так не работает. на гуглокартах ты левую кнопку зажимаешь, а потом перемещая мышь, тянешь карту. там у тебя не айфрем, где какая-то большая карта 100000 пикселей на 100000 пикселей, а канвас под размер экрана, где в реальном времени что-то отрисовывается. у тебя каждый раз система координат «обнуляется»: есть только 0, 0 в левом краю и ширина и высота канваса.

rtxtxtrx ★★
() автор топика
Ответ на: комментарий от rtxtxtrx

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

Tark ★★
()
Ответ на: комментарий от PPP328

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

rtxtxtrx ★★
() автор топика
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от PPP328

Это JS API - для подгрузки карты на твой говносайт 😏. А Places API, которое позволяет ссылки на сайты получить платное с жесткими ограничениями на количество обращений

rtxtxtrx ★★
() автор топика
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от Puzan

В случае с углокартами нужно протягивать экран: программно зажал левую, переместил мышь в противоположную сторону, переместился на один экран. Там такие сложности ни к чему:

steps = 0
max_steps = 10


while steps <= max_steps:
    for direction in ["down", "right", "up", "left"]:
        if direction == "down" or direction == "up":
            steps += 1
        for _ in range(steps):
            match direction:
                case "down":
                    print("up -> down")
                case "right":
                    print("left -> right")
                case "up":
                    print("down -> up")
                case "left":
                    print("right -> left")

Я не знаю как обозвать такой способ перемещения.

Графически это выглядит так:

https://gist.github.com/s3rgeym/537cfbfe88d55b4f1d71c1e6eb17ca1e

Я просто думал, что меня гугель опазнает по странной манере перемещения, но ему плевать. Я 10 часов карты парсил, он только небольшую задержку дает (~2 секунды) при подгрузке информации о компаниях

rtxtxtrx ★★
() автор топика
Последнее исправление: rtxtxtrx (всего исправлений: 3)