
Evgen
08.01.2017
17:34:52
И так несколько раз

Igor
08.01.2017
17:35:32
таааак

Johnnie
08.01.2017
17:36:37
O_O

Google

Johnnie
08.01.2017
17:36:49
lxml какой версии?

Evgen
08.01.2017
17:36:51
Так что насчёт моего вопроса?

Igor
08.01.2017
17:37:22

Evgen
08.01.2017
17:37:26
Нее
Как общаться с программой

Igor
08.01.2017
17:37:57
как запихнуть данные в другую программу, чтобы она их через stdin вытянула?

Evgen
08.01.2017
17:38:01
Максимум до куда я дошёл — вторая итерация

Igor
08.01.2017
17:38:39
да, потому что как только данные заканчиваются, отправляется то ли EOF, то ли NULL-байт, и данные более не читаются
lxml какой версии?
сорри, я спизднул. не читается. там надо файлоподобную хуйню подавать, а не строку
или пользоваться fromstring
In [12]: xml_feed_url = 'https://www.coursera.org/sitemap~www~courses.xml'
...: xml = requests.get(xml_feed_url)
...: doc = etree.fromstring(xml.content)
...:
In [13]: doc
Out[13]: <Element {http://www.sitemaps.org/schemas/sitemap/0.9}urlset at 0x10e9868c0>

Johnnie
08.01.2017
17:41:09
def get_courses_list(url='https://www.coursera.org/sitemap~www~courses.xml'):
return requests.get(url)
def get_courses_list_tree(courses_list):
return etree.XML(courses_list.content)
вот так взлетело вроде
пойду попробую пройтись по этой херне в цикле

Google

Igor
08.01.2017
17:41:41
ну я б таки fromstring заюзал

Denis
08.01.2017
17:42:18
Для более сложных операций есть модуль subprocess, там всякие штуки вроде Popen и PIPE

Evgen
08.01.2017
18:17:55
Я знаю
Этим я и пользуюсь

Denis
08.01.2017
18:18:23
В чем проблема?

b0g3r
08.01.2017
18:21:53

Johnnie
08.01.2017
18:22:46
уже вот так переделал, проверили и закрыли таск))

b0g3r
08.01.2017
18:23:14
В данном случае вообще непонятно зачем нужен has_digit. 0 и 1 это типа False и True?
Тогда достаточно return not re.findall(..)
Ага

Johnnie
08.01.2017
18:23:44
просто в цикл вытащил этот иф из каждой ф-ии

b0g3r
08.01.2017
18:42:48

Johnnie
08.01.2017
18:43:15
проверки туда напихал все

b0g3r
08.01.2017
18:43:19
почему в сет?)
кстати, если интересно научиться, то вот такую задачу "регистрирования" функций можно делать через декораторы

Johnnie
08.01.2017
18:43:28
чтоб без дубликатов :D
ты предлагаешь в тупл?

b0g3r
08.01.2017
18:43:42
угу

Google

b0g3r
08.01.2017
18:43:51
т.к. декораторы выполняются в момент импорта

Denis
08.01.2017
18:44:48
Немного оффтопа: как решать задачу регистрации функций на с++?

Johnnie
08.01.2017
18:45:02

b0g3r
08.01.2017
18:45:17
ну в данном случае - заносить их в какой-нибудь список
чтоб потом смотреть в него в get_password_strength
то есть все check-функции оборачиваешь в декоратор, и не надо париться над сетами/туплами, набиваемыми вручную
мне казалось, что я видел пример в "Python. К вершинам мастерства", но может и не там
а вообще оно гуглится по python registry decorator

Johnnie
08.01.2017
18:53:23
т.е. на каждую функцию-проверку вешать декоратор и внутри get_password_strength проходить по списку зарегистрированных?

Проксимов
08.01.2017
19:17:07

Johnnie
08.01.2017
19:17:20
https://devman.org

Проксимов
08.01.2017
19:19:02

b0g3r
08.01.2017
19:19:06

53r63rn4r
08.01.2017
21:40:01
guys
help
2017/01/09 00:13:03 [error] 30589#30589: *238 connect() to unix:///tmp/uwsgi.sock failed (111: Connection refused) while connecting to upstream, client: 176.36.191.191, server: serbernar.in.ua, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///tmp/uwsgi.sock:", host: "serbernar.in.ua"

Johnnie
08.01.2017
22:18:34

b0g3r
08.01.2017
22:20:17
Получилось?

Johnnie
08.01.2017
22:26:01
если ты про декораторы, то не пробовал) пилю пока задачку по парсингу курсеры

Google

Johnnie
08.01.2017
22:31:23
Started at (UTC): 2017-01-08 22:30:17.196435
Finished at (UTC): 2017-01-08 22:31:13.134697
Elapsed: 0:00:55.938262
20 рандомных курсов парсит
столько времени
че-то надо прикрутить? мульти[процессинг/трединг]?

Denis
08.01.2017
22:33:16
Прикрути

Johnnie
08.01.2017
22:33:35
а какой из них? я помню тут был пример, но чето не найду пока

Denis
08.01.2017
22:33:42
Трединг
Процессинг не нужен

Vova
08.01.2017
22:34:54
Ку

Johnnie
08.01.2017
22:37:31
from concurent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=5) as executor:
executor.map(processing_function, list_of_urls)
вот вроде
эм ,бля
Started at (UTC): 2017-01-08 22:39:18.677907
Finished at (UTC): 2017-01-08 22:40:14.107720
Elapsed: 0:00:55.429813
это после прикручивания этого добра
:D
я что-то делаю не так?

b0g3r
08.01.2017
22:42:24
?

Johnnie
08.01.2017
22:43:09
ну как бы в 1 поток 55 сек, в 5 потоков 55 сек

b0g3r
08.01.2017
22:43:10
ну попробуй поиграться с количеством потоков

Johnnie
08.01.2017
22:43:11
так и должно быть?

Google

b0g3r
08.01.2017
22:43:24
почитай про GIL
если упростить, то задачки, которые используют процессор - не позволяют потокам в питоне работать эффективно
треды - эффективно для io-задачек
посмотри сколько времени тратится на загрузку странички - если оно мало от общего времени работы, то попробуй мультипроцессинг
может придёт ещё кто умнее и меня поправит

Johnnie
08.01.2017
22:56:47
<method 'read' of '_ssl._SSLSocket' objects> 862 45733 45733
профайлер сказал, что вот это жрет 81% времени
забью тогда пока
это я тупил :) не до конца переделал
courses_info_list = list()
with ThreadPoolExecutor(max_workers=5) as executor:
for course_info in executor.map(get_course_info, courses_urls):
courses_info_list.append(course_info)
Started at (UTC): 2017-01-08 23:12:38.379916
Finished at (UTC): 2017-01-08 23:12:52.604903
Elapsed: 0:00:14.224987
20 воркеров - 5 сек 20 страниц обрабатывает
красота

tufedtm
08.01.2017
23:27:08
как все <item>...</item>, а именно содержимое атрибутов, вложенных элементов перенести в базу?
с сохранением уровней вложенности (которая там разная)
https://paste.ubuntu.com/23767479/
к каком направлении смотреть?

Romka
08.01.2017
23:28:27
Регулярки
Но нужно попотеть
Или, можешь проходить циклом каждую строку

Johnnie
08.01.2017
23:32:54
регулярками тут охуеешь имхо
Эта группа больше не существует