Последнее на форуме
Последние статьиСейчас на сайтеСейчас на сайте 0 пользователей и 14 гостей.
|
Пара полезных либ для питонаПервая из них - pycurl, как видно из названия, является интерфейсом к стандартной юниксовой либе curl. Кто не в курсе, эта либа служит для общения с интернет-сервисами. Например нужно получить контент какой-то странички - пользуем curl. И это самый примитивный пример использования этой либы. Приведу пример: from pycurl import * from StringIO import * curl = Curl() st = StringIO() curl.setopt(URL,"https://stat.mrk/cgi-bin/traff/ipastat.cgi") curl.setopt(HTTPHEADER,["Referer: https://stat.mrk/cgi-bin/traff/ipastat.cgi"]) curl.setopt(WRITEFUNCTION, st.write) curl.setopt(SSL_VERIFYPEER, 0) curl.setopt(SSL_VERIFYHOST, 0) curl.setopt(POST,1) curl.setopt(POSTFIELDS,"data=") curl.perform() Теперь поясню, что делает этот код. У нас на предприятии веб-траффик лимитируется. И поэтому есть необходимость мониторить статистику по веб-траффику. Для этого я запрашиваю с сервера статистики страничку со своей статистикой и парсю ее (про парсинг поговорим ниже). Трудности возникли такие:
В итоге по окончанию отработки этого участка кода я получаю в объекте st зконтент странички со статистикой. Дошел ход до второй либы - BeautifulSoup. Это универсальный парсер XML-подобных языков и HTML в частности. Либа предоставляет удобный интерфейс, и сейчас я продемонстрирую как легко я распарсил полученную страничку. from BeautifulSoup import * soup = BeautifulSoup(st.getvalue()) r = soup('tr')[-1] t = soup('tr')[-2] remain = float(r('td')[-1]('p')[0].string) total = float(t('td')[-1]('p')[0].string) print "Remaining " + str(int((remain/total)*100)) +"% of "+str(int(total))+ " Mb" В рассматриваемой либе есть два основных класса: BeautifulSoup и BeautifulStoneSoup. Первый заточен для работы с HTML, второй универсален. Я хочу распарсить HTML, поэтому пользую первый класс. Итак, я создаю экземпляр, скармливая при этом тот самый контент, который был получен с сервера статистики. Две следующие строчки кода находят два последних тега <tr> на странице. В этих строках содержится информация об максимальной квоте веб-траффика и текущем остатке. Далее в каждой из этих найденных строк я беру последние столбцы td и, т.к. собственно контент этих ячеек заключен еще и в теги параграфа - <p>, выдираю строковые значения уже из них.И наконец, получив эти два значения рассчитываю процент использования квоты траффика. П.С. Вообще этот код в таком его виде у меня сейчас не используется, т.к. он писался для моего самописного скринлета и его пришлось немного видоизменить и дописать. Но в этом виде он вполне функционален и способен продемонстрировать основные принципы работы с обсуждаемыми либами. П.П.С. Я понимаю, возможно есть решение более элегантное и "правильное", но эта моя писанина работает, делает свое дело, и самое главное - я потихоньку разбираюсь в питоне.
|
ОпросНужно ли делать основным новый сайт beta.lug-mgn.ru ? Да, нужно 83% Нет, не нужно 17% Сначала надо сделать на нём фичу X (указал в комментариях) 0% Сначала надо сделать для него дизайн (готов взяться) 0% Всего голосов: 6 |
Правда, честно говоря, понятия не имею, что оно будет делать с https.
я кстати до перехода в убунту и изучения питона делал эти вещи на перле. там я это делал вообще криво - вызывал wget и потом регексами парсил временный файлик.
Угу, насколько я понимаю,urllib POST вообще не умеет.