Python инструменты решения типичных задач
Transcript of Python инструменты решения типичных задач
Python: инструменты решения
типичных задач
@sapronovalex92
vk.com/pynsk
facebook.com/PyNskCom
@py_nsk
Александр Сапронов:
В начале был... Гвидо!
В феврале 1991 года опубликован код языка
2
Популярность сейчас
6 место
6 место
4 место
1 место
60k+ модулей на pypi.python.org
3
➔Скриптинг приложений (Blender, Inkscape)
➔Сетевые приложения (ABC bittorrent client)
➔Для “склейки” компонентов➔Web-проекты➔Игры ➔Системные утилиты ➔GUI-программы➔Обработка данных➔Научное моделирование
Где Python хорош?
4
Python не подходит для
Задач где:
- нужен максимально быстрый отклик
- требуется крайне низкое потребление RAM
- надо быстро масштабировать решение
5
Типичные задачи- Парсеры- Генерация отчетов- CMS, простые сайты- SRM, CRM- Моделирование (Наука)- Обработка данных- Утилиты c GUI- Утилиты консольные
6
Парсинг
7
stdlib: HTMLParser (2), html.parser (3)
LXML, Beautiful Soup
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser): def handle_starttag(self, tag, attrs): print("Encountered a start tag:", tag) def handle_endtag(self, tag): print("Encountered an end tag :", tag) def handle_data(self, data): print("Encountered some data :", data)
parser = MyHTMLParser()parser.feed('<html><head><title>Test</title></head>' '<body><h1>Parse me!</h1></body></html>')
(2) - Python 2.*(3) - Python 3.*
2. Парсим HTML/XML с помощью
1. Делаем запросы с помощью
urlib, requests
Парсинг по взросломуgrab - http://grablib.org/scrapy - http://scrapy.org/
8
import scrapy
class BlogSpider(scrapy.Spider):
name = 'blogspider'
start_urls = ['http://blog.scrapinghub.com']
def parse(self, response):
for url in response.css('ul li
a::attr("href")').re(r'.*/\d\d\d\d/\d\d/$'):
yield scrapy.Request(response.urljoin(url), self.parse_titles)
def parse_titles(self, response):
for post_title in response.css('div.entries > ul > li
a::text').extract():
yield {'title': post_title}
$ scrapy runspider myspider.py
Генерация отчетов
9
Отчет
График PDF Excel
Генерация отчетов
10
Модуль для создания графики:
matplotlib
Генерация отчетов
11
PDF- xhtml2pdf- pdfkit- PDFMiner- PyPDF2- reportlab
import pdfkit
pdfkit.from_url('http://google.com', 'out.pdf')pdfkit.from_file('test.html', 'out.pdf')pdfkit.from_string('Hello!', 'out.pdf')
Генерация отчетов
12
Excel- xlrd (read)- xlwt (write) - xlutils - XlsxWriter- openpyxl
import xlsxwriterworkbook = xlsxwriter.Workbook('demo.xlsx')worksheet = workbook.add_worksheet()worksheet.set_column('A:A', 20)bold = workbook.add_format({'bold': True})worksheet.write('A1', 'Hello')worksheet.write('A2', 'World', bold)worksheet.write(2, 0, 123)worksheet.write(3, 0, 123.456)worksheet.insert_image('B5', 'logo.png')workbook.close()
Генерация отчетов
13
Отчет
График PDF Excel- xhtml2pdf- pdfkit- PDFMiner- PyPDF2- reportlab
- matplotlib - xlrd (read)- xlwt (write) - xlutils - XlsxWriter- openpyxl
Web
- CRM- SRM- CMS- Web-store- Sites
14
Наука и обработка данных
15
Утилиты с GUI
16
Консольные утилиты- argparse- optparse- Clint- Click- docopt- Cli- Plac- Cliff
17
import [email protected]()@click.option('--count', default=1, help='Number of greetings.')@click.option('--name', prompt='Your name', help='The person to greet.')def hello(count, name): for x in range(count): click.echo('Hello %s!' % name)if __name__ == '__main__': hello()
$ python hello.py --count=3Your name: JohnHello John!Hello John!Hello John!
18
@sapronovalex92
vk.com/pynsk
facebook.com/PyNskCom
@py_nsk
PyNSK контакты: Мои контакты:
ru.linkedin.com/in/alexsapronov
Питоны кончились…Вопросы?