@ru_python

Страница 2163 из 9768
Maxim robox
07.02.2017
10:55:01


I
07.02.2017
10:55:48
хоп - а товарищ Майор уже сзади тебя

намасливает бутылочку

Андрей
07.02.2017
11:07:00
намасливает бутылочку
что за европейские традиции? в россии не намасливают!

Google
Rookie
07.02.2017
11:10:37
что за европейские традиции? в россии не намасливают!
Ложь. "Петушок Золотой гребешок. Шёлкова бородушка, масляна головушка..." (с)

Андрей
07.02.2017
11:11:13
ну тогда еще демократии не было

Rookie
07.02.2017
11:14:07
Точно. Это я упустил из вида(

Хоть бы Головатый.

Evgen
07.02.2017
11:20:23
Фига вас тут

2032

Было время...

Octo@dshacks
07.02.2017
11:22:04
https://yls8.mtheall.com/ninupdates/reports.php Вот сайт. Как мне взять данные из таблицы после Systems? Никаких ID кроме name у <a> нету

Nikolay
07.02.2017
11:23:10
cssselect использовать

ищешь по table и берешь второй элемент

не?

Octo@dshacks
07.02.2017
11:24:37
cssselect использовать
Спасибо, посмотрю

Rookie
07.02.2017
11:26:28
не?
Да. Только в xpath [2]

Google
Sergei
07.02.2017
11:26:30
Есть задачи для python программиста. Пишите в ЛС

Nikolay
07.02.2017
11:26:37
Sergei
07.02.2017
11:26:40
кто заинтересован

Nikolay
07.02.2017
11:26:46
Ilia
07.02.2017
11:27:38
Семён Семёныч?

Octo@dshacks
07.02.2017
11:35:40
from lxml.etree import fromstring import urllib.request from cssselect import HTMLTranslator expression = HTMLTranslator().css_to_xpath('table.content') ninupdates = urllib.request.urlopen("https://yls8.mtheall.com/ninupdates/reports.php") readable = str(ninupdates.read(), "utf-8") document = fromstring(readable) [e.get('border') for e in document.xpath(expression)]



Что ему не так?

<body> <h3><a name=Reports href=#Reports>Reports</a></h3><table border="1"> - 4 строка

Aragaer
07.02.2017
11:40:39
кавычки прочит

name="Reports" href="#Reports"

Rookie
07.02.2017
11:41:06
Да.

Но, это же разметка донора, как я понимаю?

Octo@dshacks
07.02.2017
11:41:38
ninupdates = urllib.request.urlopen("https://yls8.mtheall.com/ninupdates/reports.php") parser = XMLParser(recover=True) document = parse(ninupdates, parser)

переделал так, он сьел

Но я чет не понимаю как мне получать таблицы

Aragaer
07.02.2017
11:42:26
красивым супом?

Rookie
07.02.2017
11:43:02
html/body/table[1]/tbody/tr[2]

Отвечали уже. Столбец после System

Octo@dshacks
07.02.2017
11:44:23
Чето он мне пустоту выдает

Google
Octo@dshacks
07.02.2017
11:44:33
from lxml.etree import XMLParser, parse import urllib.request from cssselect import HTMLTranslator expression = HTMLTranslator().css_to_xpath('table.content') ninupdates = urllib.request.urlopen("https://yls8.mtheall.com/ninupdates/reports.php") parser = XMLParser(recover=True) document = parse(ninupdates, parser) """ readable = str(ninupdates.read(), "utf-8") document = fromstring(readable) """ print(document.xpath(expression))

Возвращает []

(если что - я дебил который не может в документацию)

Aragaer
07.02.2017
11:46:33
вот это вот с HTMLTranslator и XMLParser оно не нужно, нужен красивый суп

Aragaer
07.02.2017
11:47:45
по ссылке наверно должно быть что-то интересное, но почему-то открылся какой-то яндекс

Octo@dshacks
07.02.2017
11:52:01
почему я раньше не знал о этой либе

Nikolay
07.02.2017
11:54:23
почему я раньше не знал о этой либе
она всем хороша, только медленнее lxml

Octo@dshacks
07.02.2017
12:15:05
def getVersions(): ninupdates_raw = urllib.request.urlopen( "https://yls8.mtheall.com/ninupdates/reports.php") ninupdates_str = str(ninupdates_raw.read(), "utf-8") #print(ninupdates_str) ninupdates_soup = BeautifulSoup(ninupdates_str, "lxml") systems_raw = ninupdates_soup.find_all("table")[1] systems = systems_raw.find_all("tr")[1:] consoles = {} for item in systems: info = item.find_all("td") version = info[2].get_text().split("(")[1].split(")")[0] consoles[info[0].get_text()] = version return consoles

Насколько плох этот код?

Igor
07.02.2017
12:15:31
функцию переименовать в get_versions

Pavel
07.02.2017
12:15:50
BS вроде бы умеет xpath, можно найти сразу все td

Roman
07.02.2017
12:16:19


Artem
07.02.2017
12:17:33
еще прикольный апи у pyquery

Google
Igor
07.02.2017
12:17:55
вроде бы вместо .get_text() можно воспользоваться более лаконичным .text

Octo@dshacks
07.02.2017
12:18:08
попробую

Работает



10/10

идеально

Igor
07.02.2017
12:22:57
первые строчки можно упростить

Admin
ERROR: S client not available

Igor
07.02.2017
12:23:00
page = urllib.request.urlopen("https://yls8.mtheall.com/ninupdates/reports.php") soup = BeautifulSoup(page, "lxml", from_encoding="utf-8")

bs4 умеет жрать на вход файловые объекты urlopen возвращает файловый объект нафига ебаться с str и read()

Octo@dshacks
07.02.2017
12:24:15
Ну я не шарю

Я только ссейчас узнал про суп

Igor
07.02.2017
12:27:48
s.split("(")[1].split(")")[0] это жесть какая-то)) имхо, так проще: s[s.find('(') + 1:s.find(')')]

Aragaer
07.02.2017
12:30:11
re.split('[()]', s)[1]

Igor
07.02.2017
12:30:36
тоже думал re предложить

но боялся именно такой реакции

Octo@dshacks
07.02.2017
12:35:01
надо бы подучить регексы

Aragaer
07.02.2017
12:35:44
ну в данном случае "любая из скобок"

Igor
07.02.2017
12:36:15
эх, return {c.find('td').text: c.find_all('td')[2].text.split('(')[1].split(')')[0] for c in consoles} в 80 символов не влезает!

Google
Octo@dshacks
07.02.2017
12:36:23
я когда пытаюсь понять регексы

Octo@dshacks
07.02.2017
12:47:08
Можно сделать неограниченное число аргументов у функции?

Artem
07.02.2017
12:47:39
да, def f(*args):

Octo@dshacks
07.02.2017
12:47:40
Python-telegram-bot передает одной функции аргументы которой не нужны вообще аргументы, а баллы в pylint снижаются за неиспользованные

Aragaer
07.02.2017
12:49:11
можно даже def f(*_)

тогда пилинт поймет, что они неиспользуются

Python'ер
07.02.2017
12:50:52
Можно сделать неограниченное число аргументов у функции?
Да, пишешь * перед именем аргумента, и получаешь кортеж всех значений которые попали в него. Пишешь ** перед именем аргумента, и все именованые аргументы отсутствующие у функции попадают в словарь.

Rookie
07.02.2017
12:52:20
Если уж взялись расписывать, то укажите разницу. Позиционные, именованные и т.д.

Octo@dshacks
07.02.2017
12:54:01


Igor
07.02.2017
12:54:35
константы должны быть капслоком

Octo@dshacks
07.02.2017
12:54:55
А, ну они только пока константы

А по поводу f?

Aragaer
07.02.2017
12:55:52
имена короче 3 символов считаются плохими

Octo@dshacks
07.02.2017
12:55:58
Все, заменил f на output

Rookie
07.02.2017
13:00:02
А что будет, если поменять * и ** местами, а почему? А что если есть ещё аргумент, который нужно передать явно? А куда его? А почему именно туда?

Страница 2163 из 9768