Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/56: Рейтинг темы: голосов - 56, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38

Выгрузить табличные данные со страницы html

03.01.2020, 13:48. Показов 12151. Ответов 35

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Очень надо получить данные со страницы, так как разработчик не будет скорее всего дорабатывать выгрузку в Excel, а сама выгрузка не включает некоторых (как-будто пустых) данных, а они нужны.

Я думала, что смогу выгрузить данные напрямую в Excel или Power Bi, но это не получилось. Это моя тема в другом разделе: Выгрузка страницы в виде таблицы в Excel или Power BI.

Затем друг посоветовал применить Python и parsing. Начала погружаться глубже, установила BeautifulSoup, но как я вижу по тексту, получаемому из requests.get (url, auth = (user, pass), я опять не получаю весь код страницы (поэтому и не сработали советы, которые я находила для Power Bi, а именно доныривания до нужного <div) и я не могу пока получить данные с помощью кода:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
def get_html(url, user, pass_):
    res = requests.get(url, auth=(user,pass_))
    return res.text
 
def get_data(html):
    soup = beautifulsoup(html,'lxml')
    h1 = soup.find('div',id='tw-col-1 hor-flex-child').find('title')
 
def main():
    url = 'https://address/'
    user = user_name
    pass_ = password
    print(get_data(get_html(url, user, pass_)))
На картинке я выделила то, что пытаюсь выцепить из страницы (на странице несколько названий tw-col-1 hor-flex-child и в каждом из них несколько tw-col-2 hor-flex-child) То есть в итоге получается, что это табличные данные, которые записаны каждой отдельной строкой. Заголовки этой таблицы хранятся в tw-col-2 hor-flex-child, они выделены на другой картинке.

Смогу ли я с помощью python выгрузить данные или надо искать другие решения?
Могут ли данные быть скрыты?
На форуме видела ответы про CSS Selectorы - могут ли они помочь?
Миниатюры
Выгрузить табличные данные со страницы html   Выгрузить табличные данные со страницы html  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.01.2020, 13:48
Ответы с готовыми решениями:

Как вытащить табличные данные из HTML страницы?
Вообщем такая проблема: надо с одного сайта скачать данные, которые там находятся в табличном виде.. это таблица участников соревнований со...

Как проще всего выгрузить таблицу с HTML страницы в DataGridView
Появилась задача выгрузить таблицу с этого сайта http://www.forexpros.ru/commodities/gold-historical-data в DataGridView под WinForms. Я в...

Выгрузить данные из html таблицы в в Excel
Здравствуйте. Есть файл в нем данные находятся в таблице &lt;table&gt; данные ,как мне из выгрузить в экзель подскажите пож-та ...

35
964 / 719 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
09.01.2020, 16:21
Студворк — интернет-сервис помощи студентам
Python
1
2
3
4
5
6
7
8
9
10
>>> from lxml import html
>>> s = '''<div><span>1</span></div>'''
>>> tree = html.fromstring(s)
>>> tree.find_all('span')
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
AttributeError: 'HtmlElement' object has no attribute 'find_all'
>>> tree.findall('span')
[<Element span at 0x10853b638>]
>>>
с ошибками пишете

Не по теме:

КМК вы verme.ru парсите, что там секретного? я кроме рекламы услуг ничего не увидел

0
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
09.01.2020, 19:08  [ТС]
The error means that the table variable that you are building by doing:

table = BeautifulSoup(r.text).table
is returning None. And for row in table.find_all("tr")[1:]: on a None is throwing the error.

You can check if the url in question has a table in the way you are trying to access it. You can do this by printing out the url constructed by this statement:

BASE_URL.format(row['prefix_1'], year, row['prefix_2'])
and then going to this url in your browser to check if it has the table of your interest.
нашла такой ответ на похожий вопрос... то есть таблицу он не увидел..
но если именно с этого названия table-widget ver-flex-parent shift-assign-table
я могу нажать copy outerHTML и наконец увидеть код, значит, я правильно нашла ..контейнер что ли моих данных.. почему таблица пустая..

увидела ваш ответ, только когда свой начала писать, хотя постоянно обновляла, поэтому код не перепроверяла пока..
там расписание смен, числа месяца и номера магазинов, выгружаются только те, где заполнены смены (из названия таблицы можно увидеть shift-assign-table), а мне на постоянной основе надо видеть те магазины, по которым смены не заполнены..
в любом случае доступ туда с паролем, у меня подписано соглашение о неразглашении..
0
964 / 719 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
09.01.2020, 20:10
HTML элемент состоит из тэга, аттрибутов, текста
HTML5
1
<span id="1" class="bla-bla">spantext</span>
попробуйте хотя бы тэги span найти
Python
1
2
3
tree = html.fromstring(response.text).xpath('//span')
for elem in tree:
    print(elem.tag, elem.attrib, elem.text)
1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
09.01.2020, 20:27  [ТС]
span {'class': 'm-login__title'} Портал внешнего персонала
span {'class': 'm-login__subtitle'} Планирование и предоставление услуг для бизнеса
span {} None
span {} Или войти с помощью
span {} None
span {}

span {} ЭM.Life
span {}

span {} Verme Login
вот что находит, значит на нужную страницу с таблицей я так и не попадаю.....

вернулась к драйверам, но там надо с хромом разбираться, сейчас попробую в файрфоксе

Добавлено через 6 минут
тоже надо настроить
WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
0
964 / 719 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
09.01.2020, 21:03
Цитата Сообщение от Eliy Посмотреть сообщение
WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
http://xn--80afqpaigicolm.xn--... ckodriver/
1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
09.01.2020, 21:21  [ТС]
Code
1
driver = webdriver.Chrome(executable_path=r'C:\Users\elili\Downloads\chromedriver.exe')
я в итоге из ссылки про файрфокс себе хром установила.. и в итоге, у меня даже есть продвижения!
то есть страница открылась и авторизовалась сама, видно на принтскрине.
но теперь я понимаю, почему он таблицу не видит - страница открывается не та.

поможет ли мне redirect какой-то? или просто после драйвера и авторизации я могу взять html другой страницы, с другим адресом?
Миниатюры
Выгрузить табличные данные со страницы html  
0
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
09.01.2020, 21:34  [ТС]
я кажется поняла, надо просто заставить его дальше нажать на ссылку
Миниатюры
Выгрузить табличные данные со страницы html  
0
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
09.01.2020, 21:37  [ТС]
Code
1
2
3
4
5
6
7
8
9
.find_element_by_link_text() finds an A tag by the text inside the A tag, e.g.
 
<a href="publications.html">Publications</a>
You can find this tag using
 
driver.find_element_by_link_text("Publications")
BUT... if you want to find an A tag by the href, you need a different approach.
 
driver.find_element_by_css_selector("a[href='publications.html']")
нашла такой вариант
0
964 / 719 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
09.01.2020, 21:40
https://habr.com/ru/post/250975/
тут хороший мануал
1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
09.01.2020, 21:45  [ТС]
спасибо, да, css_selector пока не вышло, пробую driver.find_element_by_link_text("/promo-schedule/").click() - пока тоже не перешёл..
0
964 / 719 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
09.01.2020, 21:52
вы делайте try/except как у меня в примере, ошибки в консоль выведутся
0
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
09.01.2020, 22:19  [ТС]
NoSuchElementException('no such element: Unable to locate element: {"method":"link text","selector":"/promo-schedule/"}\n (Session info: chrome=79.0.3945.88)', None, None)
0
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
10.01.2020, 07:01  [ТС]
Code
1
driver.get(url)
так он просто перешёл по нужному адресу, но теперь надо его заставить переключить с недели на месяц)
Миниатюры
Выгрузить табличные данные со страницы html   Выгрузить табличные данные со страницы html  
0
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
10.01.2020, 07:30  [ТС]
Code
1
2
3
4
5
6
tree = html.fromstring(driver.page_source)
 
try:
    table = tree.find('.//div[@class="table-widget ver-flex-parent shift-assign-table"]')
except Exception as e:
    print(repr(e))
дальше так написала, всё равно не находит таблицу...

AttributeError Traceback (most recent call last)
<ipython-input-163-dadf35db74b8> in <module>()
25 print(repr(e))
26
---> 27 for shop in table.find_all('.//div[@class=tw-row-hor-flex-parent"]'):
28 data.append(shop.find('.//span[@class="name-head"]').get_text)
29 for day in shop.findall('.//div[@class="day ver-flex-parent"]'):

AttributeError: 'NoneType' object has no attribute 'find_all'
0
964 / 719 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
10.01.2020, 09:18
Цитата Сообщение от Eliy Посмотреть сообщение
--> 27 for shop in table.find_all('.//div[@class=tw-row-hor-flex-parent"]'):
писал же уже про find_all

Добавлено через 4 минуты
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
In [1]: from lxml import html                                                                   
 
In [2]: tree = html.fromstring('<div id=1>123</div>')                                           
 
In [3]: dir(tree)                                                                               
Out[3]: 
['__bool__',
 '__class__',
 '__contains__',
 '__copy__',
 '__deepcopy__',
 '__delattr__',
 '__delitem__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__module__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__reversed__',
 '__setattr__',
 '__setitem__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__weakref__',
 '_init',
 'addnext',
 'addprevious',
 'append',
 'attrib',
 'base',
 'base_url',
 'body',
 'classes',
 'clear',
 'cssselect',
 'drop_tag',
 'drop_tree',
 'extend',
 'find',
 'find_class',
 'find_rel_links',
 'findall',
 'findtext',
 'forms',
 'get',
 'get_element_by_id',
 'getchildren',
 'getiterator',
 'getnext',
 'getparent',
 'getprevious',
 'getroottree',
 'head',
 'index',
 'insert',
 'items',
 'iter',
 'iterancestors',
 'iterchildren',
 'iterdescendants',
 'iterfind',
 'iterlinks',
 'itersiblings',
 'itertext',
 'keys',
 'label',
 'make_links_absolute',
 'makeelement',
 'nsmap',
 'prefix',
 'remove',
 'replace',
 'resolve_base_href',
 'rewrite_links',
 'set',
 'sourceline',
 'tag',
 'tail',
 'text',
 'text_content',
 'values',
 'xpath']
0
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
10.01.2020, 10:11  [ТС]
Code
1
2
3
4
try:
    table = driver.find_element_by_class_name('.//div[@class="table-widget ver-flex-parent shift-assign-table"]')
except Exception as e:
    print(repr(e))
пока бросила find_all, решила через driver...
с find_all, я думала там ошибка в нижнем подчеркивании, но он ни так, ни эдак не хотел
подумаю ещё что-то дальше)

InvalidSelectorException('invalid selector: An invalid or illegal selector was specified\n (Session info: chrome=79.0.3945.88)', None, None)
Добавлено через 5 минут
думала, что проблема скорее в пустом объекте...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.01.2020, 10:11

Нужно макросом выгрузить данные из страницы интернета
&quot;https://fgis.gost.ru/fundmetrology/registry/4/items/1390777&quot; Помогите выгрузить данные из этой страницы. p, Добавлено через 5 часов...

Как выгрузить данные из мемо поля базы Access в Html с сохранением переноса строки ?
Как выгрузить данные из мемо поля базы Access в Html с сохранением переноса строки ?

Не работают табличные тэги html в PHP
Нужно вывести данные из БД в виде таблицы, но тэги tr и td не работают - данные выводятся сплошным текстом. function...

Табличные данные
Здравствуйте, подскажите; имеется таблица с числами в виде нескольких столбцов, по ним делает расчёт. Проблема в том что прописал все...

Получить данные со страницы HTML
Открыл такую тему в ветке по Делфям, но потом понял, что наверное, не совсем там спросил. Продублирую здесь - возможно, кто-то поможет,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru