Пишем парсер на Python - грабим Proxy ч.1

  • Автор темы HHIDE_DUMP
  • Дата начала
  • Просмотры 2K
  • На форуме работает ручное одобрение пользователей. Это значит, что, если Ваша причина регистрации не соответствует тематике форума, а также Вы используете временную почту, Ваша учётная запись будет отклонена без возможности повторной регистрации. В дальнейшем - пожизненная блокировка обоих аккаунтов за создание мультиаккаунта.
  • Мы обновили Tor зеркало до v3!
    Для входа используйте следующий url: darkv3nw2...bzad.onion/
  • Мы вновь вернули telegram чат форуму, вступайте, общайтесь, задавайте любые вопросы как администрации, так и пользователям!
    Ссылка: https://t.me/chat_dark_time

HHIDE_DUMP

Гость
H

HHIDE_DUMP

Гость
Конечно же все вы когда-нибудь пользовались прокси, и сегодня мы научимся делать парсер для добычи оных.


Прокси-сервер — промежуточный сервер, позволяющий замаскировать собственное местоположение.

Парсер - это программа, которая автоматизирует сбор информации с заданных ресурсов.



Приступим:

Для начала мы накидаем такую конструкцию

Код:
import requests
from bs4 import BeautifulSoup


if __name__ == '__main__':
    main()
Модуль requests нужен для обращения к серверу, BeautifulSoup анализирует html код, и последняя запись это точка входа в главную функцию main() которую мы напишем в самом конце программы.



Далее создадим функцию get_html которая принимает аргумент site. Переменная r обращается к requests методом get и получает чтение site. Функция возвращает r выведенную в текст.


Код:
def get_html(site):
    r = requests.get(site)
    return r.text
Далее создаём вторую функцию get_page_data для получения данных со страницы html. Эти сырые данные попадают в переменную soup. Обрабатывает данные BeautifulSoup, принимая код html. И в качестве парсера указываем 'lxml.

Код:
def get_page_data(html):
    soup = BeautifulSoup(html, 'lxml')
Добывать прокси мы будем с
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
поэтому заходим по этому адресу, открываем инструменты разработчика кнопкой F12. Удобнее всего, на мой взгляд реализовано в ГуглХром. Кому-то нравится в лисе, но это не так важно. Наша задача определить в исходном коде, где находятся нужные нам строки.



В исходнике мы видим что proxy заключены в таблицу, и у этой таблицы есть id 'theProxyList'


Внутри таблицы находится тег tbody


А внутри тега tbody есть теги tr при наведении на которые выделяется строка (линия) с нужными данными.


Значит чтобы спарсить эту линию добавим в нашу функцию такую строку



Код:
line = soup.find('table', id='theProxyList').find('tbody').find_all('tr')
# Ищем с помощью find 'tbody' и с помощью find_all все 'tr'
Прекрасно, начало есть. Но это ещё не всё друзья, не так быстро дела делаются.

В функцию get_page_data теперь добавим цикл, в котором мы будем обращаться по индексу к нужным данным. Дата и время проверки не будем парсить, так как это не такая нужная информация. Остальное преобразуем в текст с помощью text

Код:
for tr in line:
        td = tr.find_all('td')
        ip = td[1].text
        port = td[2].text
        country = td[3].text
        anonym = td[4].text
        types = td[5].text
        time = td[6].text
Теперь полученные данные запишем в словарь

Код:
      data = {'ip': ip,
                'Порт': port,
                'Страна': country,
                'Анонимность': anonym,
                'Тип': types,
                'Время отклика': time}
И выведем на печать print(data).



Осталось написать главную функцию, в ней мы принимаем url сайта, и по цепочке идёт обработка предыдущими функциями.

Код:
def main():
    url = 'http://foxtools.ru/Proxy'
    get_page_data(get_html(url))
Наконец-то запускаем скрипт и видим следующую картину:


Данные успешно спарсились, но картинка не такая как хотелось бы. Присутствует куча мусора в виде \xa0, \r\n, \r\n\t\t\t\t\t

Значит будем от него избавляться. С помощью replace удалим всё лишнее, и для этого поправим наш цикл



Код:
    for tr in line:
        td = tr.find_all('td')
        ip = td[1].text
        port = td[2].text
        country = td[3].text.replace('\xa0', '')
        anonym = td[4].text.replace('\r\n        ', '')
        types = td[5].text.replace('\r\n\t\t\t\t\t', '').replace('\r\n        ', '')
        time = td[6].text
Запускаем по новой - другое дело, уже всё читабельно.


Исходник:

Код:
import requests
from bs4 import BeautifulSoup


def get_html(site):
    r = requests.get(site)
    return r.text


def get_page_data(html):
    soup = BeautifulSoup(html, 'lxml')
    line = soup.find('table', id='theProxyList').find('tbody').find_all('tr')

    for tr in line:
        td = tr.find_all('td')
        ip = td[1].text
        port = td[2].text
        country = td[3].text.replace('\xa0', '')
        anonym = td[4].text.replace('\r\n        ', '')
        types = td[5].text.replace('\r\n\t\t\t\t\t', '').replace('\r\n        ', '')
        time = td[6].text

        data = {'ip': ip,
                'Порт': port,
                'Страна': country,
                'Анонимность': anonym,
                'Тип': types,
                'Время отклика': time}

        print(data)


def main():
    url = 'http://foxtools.ru/Proxy'
    get_page_data(get_html(url))


if __name__ == '__main__':
    main()
Ну вот мы и научились некоторым приёмам парсинга страниц. В следующей статье мы продолжим работать с этим парсером и добавим функционал.

До встречи! ;)
 

О нас

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

    Dark-Time 2015 - 2022

    При поддержке: XenForo.Info

Быстрая навигация

Меню пользователя