Было бы хорошо если бы TC объяснилПриветствую тебя читатель!
Конечно же все вы когда-нибудь пользовались прокси, и сегодня мы научимся делать парсер для добычи оных.
Посмотреть вложение 22957
Прокси-сервер — промежуточный сервер, позволяющий замаскировать собственное местоположение.
Парсер - это программа, которая автоматизирует сбор информации с заданных ресурсов.
Приступим:
Для начала мы накидаем такую конструкцию
Python:import requests from bs4 import BeautifulSoup if __name__ == '__main__': main()
Модуль requests нужен для обращения к серверу, BeautifulSoup анализирует html код, и последняя запись это точка входа в главную функцию main() которую мы напишем в самом конце программы.
Далее создадим функцию get_html которая принимает аргумент site. Переменная r обращается к requests методом get и получает чтение site. Функция возвращает r выведенную в текст.
Python:def get_html(site): r = requests.get(site) return r.text
Далее создаём вторую функцию get_page_data для получения данных со страницы html. Эти сырые данные попадают в переменную soup. Обрабатывает данные BeautifulSoup, принимая код html. И в качестве парсера указываем 'lxml.
Python:def get_page_data(html): soup = BeautifulSoup(html, 'lxml')
Добывать прокси мы будем с Список бесплатных прокси-серверов поэтому заходим по этому адресу, открываем инструменты разработчика кнопкой F12. Удобнее всего, на мой взгляд реализовано в ГуглХром. Кому-то нравится в лисе, но это не так важно. Наша задача определить в исходном коде, где находятся нужные нам строки.
В исходнике мы видим что proxy заключены в таблицу, и у этой таблицы есть id 'theProxyList'
Посмотреть вложение 22960
Внутри таблицы находится тег tbody
Посмотреть вложение 22961
А внутри тега tbody есть теги tr при наведении на которые выделяется строка (линия) с нужными данными.
Посмотреть вложение 22962
Значит чтобы спарсить эту линию добавим в нашу функцию такую строку
Python:line = soup.find('table', id='theProxyList').find('tbody').find_all('tr') # Ищем с помощью find 'tbody' и с помощью find_all все 'tr'
Прекрасно, начало есть. Но это ещё не всё друзья, не так быстро дела делаются
В функцию get_page_data теперь добавим цикл, в котором мы будем обращаться по индексу к нужным данным. Дата и время проверки не будем парсить, так как это не такая нужная информация. Остальное преобразуем в текст с помощью text
Python: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
Теперь полученные данные запишем в словарь
Python:data = {'ip': ip, 'Порт': port, 'Страна': country, 'Анонимность': anonym, 'Тип': types, 'Время отклика': time}
И выведем на печать print(data).
Осталось написать главную функцию, в ней мы принимаем url сайта, и по цепочке идёт обработка предыдущими функциями.
Python:def main(): url = 'http://foxtools.ru/Proxy' get_page_data(get_html(url))
Наконец-то запускаем скрипт и видим следующую картину:
Посмотреть вложение 22965
Данные успешно спарсились, но картинка не такая как хотелось бы. Присутствует куча мусора в виде \xa0, \r\n, \r\n\t\t\t\t\t
Значит будем от него избавляться. С помощью replace удалим всё лишнее, и для этого поправим наш цикл
Python: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
Запускаем по новой - другое дело, уже всё читабельно.
Посмотреть вложение 22966
Python: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()
Ну вот мы и научились некоторым приёмам парсинга страниц. В следующей статье мы продолжим работать с этим парсером и добавим функционал.
До встречи!![]()
Для начала мы накидаем такую конструкцию
Python:
import requests
from bs4 import BeautifulSoup
if __name__ == '__main__':
main()
В чем и в какой программе ее накидывать и подробности а то ваще нечего не понятно зачем создавать тему для новичков не знаю A прыгать на C
Комментарии
30