CoderCastrov logo
CoderCastrov
Парсер

Как я смог собрать более 100 тысяч недвижимости с испанского сайта недвижимости

Как я смог собрать более 100 тысяч недвижимости с испанского сайта недвижимости
просмотров
4 мин чтение
#Парсер
Table Of Content

    Когда я начал этот проект, у меня не было ни малейшего представления о том, как собирать данные с веб-сайта. Я знал, что нужно обрабатывать полученные данные из ответа и сохранять их, скажем, в pandas dataframe. Но я не имел понятия, как сделать запросы без риска быть заблокированным или добавленным в черный список. К счастью, мне удалось разработать метод, который сделал процесс действительно простым. Следуя нескольким простым шагам, я смог получить информацию о более чем ста тысячах недвижимости на территории Испании!

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

    • Изменение IP-адреса, используемого для запросов, через определенный период времени. Это скроет вашу истинную личность и защитит вас от блокировки.
    • Постоянное изменение user-agent, чтобы было сложнее для ботов определить вашу активность.
    • Умеренность в скорости автоматических запросов, чтобы они выглядели так, будто их делает человек, или по крайней мере, чтобы не перегружать трафик сервера.

    Процесс установкиДля достижения указанных выше целей я использовал:

    • Во-первых, виртуальную машину Ubuntu, где я установил все необходимое программное обеспечение. (Мне нравится VirtualBox, но любой другой менеджер виртуальных машин должен подойти).
    • После установки Ubuntu я использовал miniconda, чтобы создать среду Python, в которой я установил необходимые библиотеки.
    • Чтобы скрыть мой IP-адрес, я использовал tor и socks5.
    • Функцию, которая будет случайным образом изменять время между каждым запросом.

    БиблиотекиНам нужно всего несколько библиотек Python, некоторые из них требуют установки, другие нет. Я использовал следующие:

    pip install pysocks>>> pip install requests

    (Обратите внимание, что мы пишем код только для получения файлов html в формате .txt, в которых хранится информация, которую мы ищем. Как я обработал эти файлы, чтобы получить нужные мне данные, рассказано в этом посте.)

    Для установки tor:

    После установки tor, запустите его в фоновом режиме с помощью команды _"tor &"_

    Обратите внимание на строку, где tor открывает «Socks listener on 127.0.0.1:9050». Это информация о прокси, которую мы собираемся использовать.

    Теперь мы готовы начать писать код :)

    Сделаем запрос, чтобы проверить, работает ли прокси

    Давайте сделаем запрос на http://httpbin.org/ip. Он вернет IP-адрес, с которого мы сделали запрос, позволяя нам проверить, работает ли наш код или есть некоторые проблемы.

    Подключитесь к указанному выше адресу и порту.

    socks.setdefaultproxy(proxy_type=socks.PROXY_TYPE_SOCKS5, addr="127.0.0.1", port=9050)>>> socket.socket = socks.socksocket

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

    Случайная смена user-agent

    После того, как у меня появились вращающиеся IP-адреса, я мог начать писать функцию случайной смены user-agent. Это оказалось довольно просто:

    (На самом деле, я просто скопировал/вставил эту функцию из Google)

    Существует множество сайтов, где можно получить строки user-agent, написание функции, которая будет возвращать одну из них случайным образом, сделает трюк.

    Создание функции и итерация

    На веб-сайте, с которым я работал, максимальное количество недвижимости, перечисленной на каждой странице, составляло 30. Сначала я попытался собрать информацию о всех недвижимости в Испании, но не смог пройти за 999-ю страницу. Поэтому я решил, что будет лучше итерировать определенное количество раз для каждого автономного сообщества в стране. Я рассчитал, сколько страниц нужно, чтобы получить информацию о 100 тысячах недвижимости. Поскольку в Испании есть 17 автономных сообществ, мне нужно было примерно 6000 домов, перечисленных в каждом из них, чтобы превысить 100 тысяч. Учитывая 30 объявлений на каждой странице, это в общей сложности 200 страниц для каждого сообщества. Поскольку веб-сайт заканчивал каждый URL номером страницы, было очень просто итерировать запросы с помощью цикла for.

    Так что код делал запрос и ожидал случайное количество секунд, указанное в списке. Он также проверял, сколько запросов было сделано с одним и тем же IP-адресом. После десяти запросов код спал в течение минуты, а затем продолжал работу. Это сильно замедляет процесс, но, безусловно, не перегружает сервер. Если IP-адрес изменялся до достижения лимита в 10 запросов, счетчик обнулялся, и user-agent менялся.

    Вот как выглядела функция сборщика.

    Консоль давала мне информацию о том, как проходит процесс:

    И каждый ответ сохранялся в той же папке в формате .txt:

    Я оставил его работать всю ночь. На следующее утро у меня было в общей сложности 3 476 файлов, в сумме 100 745 строк данных:

    Как видите, этот метод легко настраивается и используется. Одна вещь, о которой стоит помнить, заключается в том, что некоторые веб-сайты могут обнаружить tor IP и предотвратить получение ответа 200. Так что он не является безошибочным.

    Надеюсь, вам понравился пост! Увидимся в следующий раз.