
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

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 оно не нужно, нужен красивый суп

Octo@dshacks
07.02.2017
11:47:02
борщечок

Pavel
07.02.2017
11:47:28

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

Octo@dshacks
07.02.2017
11:48:25
Last Report

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

Nikolay
07.02.2017
11:54:23

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
я когда пытаюсь понять регексы

Artem
07.02.2017
12:43:38

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

Python'ер
07.02.2017
12:56:30
Так нормально?

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