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

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

03.01.2020, 13:48. Показов 11821. Ответов 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
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,763
03.01.2020, 15:35
попробуйте такой вариант, будут ли в нем ваши данные
Python
1
2
3
4
5
6
from lxml import html
def get_data(data):
    tree = html.fromstring(data)
    root = tree.getiterator()
    for elem in root:
        print(elem.tag,elem.attrib,elem.text)
Добавлено через 25 минут
я супом не пользуюсь, но КМК у вас в тексте нет аттрибута 'id', есть 'class'
1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
03.01.2020, 19:04  [ТС]
я попробовала, пока опять ничего не произошло.. я же правильно поняла, что data - это уже полученный html текст отсюда?

Code
1
2
3
def get_html(url, user, pass_):
    res = requests.get(url, auth=(user,pass_))
    return res.text
как я понимаю, у меня в том и проблема, что я не могу получить весь текст html, там как будто div вложено в div и так далее..
по элементно я могу нажать inspect и увидеть код, но выгрузить его пока не могу(
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,763
03.01.2020, 19:21
data здесь res.text, покажите его
возможно страница динамическая и get-запросом сервер не выдает

Добавлено через 11 минут
то что тэги вложены - не то, парсер увидит все тэги
Python
1
2
3
4
5
6
7
8
9
10
>>> from lxml import html
>>> s='''<div id=1><div id=2><div id=3></div></div></div>'''
>>> tree = html.fromstring(s)
>>> root = tree.iter()
>>> for elem in root: print(elem.tag,elem.attrib)
 
div {'id': '1'}
div {'id': '2'}
div {'id': '3'}
>>>
1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
03.01.2020, 19:55  [ТС]
Я теперь ещё раз полазила и почти уверена, что код в одном месте написан, то есть посмотрев один элемент,я могу и остальные раскрыть, поэтому надеюсь, что страница не динамическая, но в тексте полная белебирда видна.
может быть проблема в том, что мне надо ещё авторизоваться, поэтому в супе я могла написать user и password, а в lxml я не могу так сделать? По одному и тому же адресу под разными логинами я вижу разную информацию!...

Code
1
''\n<!DOCTYPE html>\n<html lang="en">\n<!-- begin::Head -->\n<head>\n\t<meta charset="utf-8"/>\n\t<title>\n\t\tПортал внешнего персонала\n\t\n\t</title>\n\t<meta name="description" content="">\n\t<meta http-equiv="X-UA-Compatible" content="IE=edge">\n\t<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">\n\t<!--begin::Web font -->\n    <script type="text/javascript" src="/static/CACHE/js/d8e181db3def.js"></script>\n\t<script>\n\t\tWebFont.load({\n\t\t\tgoogle: {"families":["Roboto:300,400,500,600,700"]},\n\t\t\tactive: function () {\n\t\t\t\tsessionStorage.fonts = true;\n\t\t\t}\n\t\t});\n\t</script>\n\t<!--end::Web font -->\n\t<!--begin::Base Styles -->\n\t\n\t\t<link rel="stylesheet" href="/static/CACHE/css/c5aa9b1a408e.css" type="text/css" />\n\t\n\t<!--end::Base Styles -->\n\t<link rel="shortcut icon" href="/static/img/favicon.png" />\n\t\n\t\n\t\n\t\n\n\n\n<script type="text/javascript" src="/static/CACHE/js/4babc01763aa.js"></script>\n</head>\n<!-- end::Head -->\n<!-- end::Body -->\n\n<body class="m-brand--minimize m-aside-left--minimize m--skin- m-header--fixed m-header--fixed-mobile m-aside-left--enabled m-aside-left--skin-dark m-aside-left--fixed m-aside-left--offcanvas m-footer--push m-aside--offcanvas-default">\n<!-- begin:: Page -->\n\n\n\n\t\t<!-- begin:: Page -->\n<div class="m-grid m-grid--hor m-grid--root m-page">\n\t<div class="m-grid__item m-grid__item--fluid m-grid m-grid--desktop m-grid--ver-desktop m-grid--hor-tablet-and-mobile m-login m-login--6" id="m_login">\n\t\t<div class="m-grid__item m-grid__item--order-tablet-and-mobile-2  m-grid m-grid--hor m-login__aside " style="background-image: url(/static/assets/app/media/img/bg/bg-4.jpg">\n\t\t\t<div class="m-grid__item">\n\t\t\t\t<div class="m-login__logo">\n\t\t\t\t\t<a href="#">\n\t\t\t\t\t\t<img src="/static/img/logo_big.png" style="max-height: 60px;">\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="m-grid__item m-grid__item--fluid m-grid m-grid--ver">\n\t\t\t\t<div class="m-grid__item m-grid__item--middle">\n\t\t\t\t\t<span class="m-login__title">Портал внешнего персонала</span>\n\t\t\t\t\t<span class="m-login__subtitle">Планирование и предоставление услуг для бизнеса</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="m-grid__item">\n\t\t\t\t<div class="m-login__info">\n\t\t\t\t\t<div class="m-login__section">\n\t\t\t\t\t\t<a href="https://verme.ru/" class="m-link" target="_blank">© 2019 Верме</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="m-login__section">\n\t\t\t\t\t\t<a href="https://verme.ru/" class="m-link" target="_blank">Контакты</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="m-grid__item m-grid__item--fluid  m-grid__item--order-tablet-and-mobile-1  m-login__wrapper">\n\t\t\t<!--begin::Body-->\n\t\t\t<div class="m-login__body">\n\t\t\t\t<!--begin::Signin-->\n\t\t\t\t<div class="m-login__signin">\n\t\t\t\t\t<div class="m-login__title">\n\t\t\t\t\t\t<h3>Авторизация</h3>\n\t\t\t\t\t</div>\n\t\t\t\t\t<!--begin::Form-->\n\t\t\t\t\t<form class="m-login__form m-form" action="">\n\t\t\t\t\t\t<div class="form-group m-form__group">\n\t\t\t\t\t\t\t<input class="form-control m-input" type="text" placeholder="Пользователь" name="login" autocomplete="off">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="form-group m-form__group">\n\t\t\t\t\t\t\t<input class="form-control m-input m-login__form-input--last" type="password" placeholder="Пароль" name="password">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</form>\n\t\t\t\t\t<!--end::Form-->\n\t\t\t\t\t<!--begin::Action-->\n\t\t\t\t\t<div class="m-login__action">\n\t\t\t\t\t\t<a href="#">\n\t\t\t\t\t\t\t<button id="m_login_signin_submit" class="btn btn-primary m-btn m-btn--**** m-btn--custom m-btn--air m-login__btn m-login__btn--primary">Войти</button>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<!--end::Action-->\n\t\t\t\t\t\n\t\t\t\t\t<!--begin::Divider-->\n\t\t\t\t\t<div class="m-login__form-divider">\n\t\t\t\t\t\t<div class="m-divider">\n\t\t\t\t\t\t\t<span></span>\n\t\t\t\t\t\t\t<spsrc="data:image/png;base64,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" style="max-height: 20px !important;"></img>\n\t\t\t\t\t\t\t\t\t<span>Verme Login</span>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\n\t\t\t\t\t</div>\n\t\t\t\t\t<!--end::Options-->\n\t\t\t\t\t\n\t\t\t\t</div>\n\t\t\t\t<!--end::Signin-->\n\t\t\t</div>\n\t\t\t<!--end::Body-->\n\t\t</div>\n\t</div>\n</div>\n\n\n<!-- end:: Page -->\n<!--begin::Base Scripts -->\n\n\t<script type="text/javascript" src="/static/CACHE/js/a975f93eccfd.js"></script>\n\n\n<!--end::Base Scripts -->\n<!--begin::Page Content Scripts -->\n\n\n<!--end::Page Content Scripts -->\n<!--begin::Page Snippets -->\n\n\t<script type="text/javascript" src="/static/CACHE/js/b5cc7ee8ac33.js"></script>\n\t<link rel="stylesheet" href="/static/CACHE/css/7a3b91da8af2.css" type="text/css" />\n\n<!--end::Page Snippets -->\n\n</body>\n<!-- end::Body -->\n</html>\n'
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,763
03.01.2020, 20:02
авторизация идет через requests, суп и lxml - парсинг полученного текста
https://python-scripts.com/requests
1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
04.01.2020, 11:03  [ТС]
Теперь я думаю, что может всё-таки динамически, раз я не могу получить данные. В sources в одном месте написано
Code
1
2
3
4
5
6
7
8
9
10
                <div class="m-stack__item m-stack__item--fluid m-header-head" id="m_header_nav">
                    <div id="m_header_menu" class="m-header-menu m-aside-header-menu-mobile
                        m-aside-header-menu-mobile--offcanvas  m-header-menu--skin-light
                        m-header-menu--submenu-skin-light m-aside-header-menu-mobile--skin-dark
                        m-aside-header-menu-mobile--submenu-skin-dark ">
                        <ul class="m-menu__nav m-menu__nav--submenu-arrow ">
                            <!-- Формируется динамически - см. блок инициализации данных-->
                            <script>
                                var request_page_party = 'promo'
                            </script>
а дальше там как раз кусок, который везде повторяется, который мне нужен
Code
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
<div class="tw-body ver-flex-child-long" 
                ref="table_body" @scroll="onScroll" 
                :class="{'selecting-via-mouse': isSelectingViaMouse}"
                :style="{height: bodyHeightCss, maxHeight: bodyHeightCss, 'overflow-y': overflowY, 'padding-right': paddingRight}"
            >
            <div :style="{height: bodyPaddingTopCSS}"></div>
            <div v-if="!blocks.length && !isLoading || (blocks.length && !blocks[0].rows.length)" class="empty-table-placeholder" v-text="emptyTablePlaceholderErrored || settings.emptyTablePlaceholder"></div>
            <div v-if="!blocks.length && isLoading" class="empty-table-placeholder">
                <i class="fas fa-spinner fa-spin m--font-success" style="font-size: 24px"></i>
            </div>
            <div v-for="block in blocks" :key="block.id" v-if="!block.isHiddenByScrolling"><!--для блока-->
                <div class="tw-row hor-flex-parent row-separator" v-if="blocks.length > 1"> <!--заголовок блока-->
                    <div class="tw-col-1 hor-flex-child"></div>
                    <div class="tw-col-2 hor-flex-child-long" v-text="block.name"></div>
                </div>
                <div class="tw-row hor-flex-parent" 
                    v-for="row in block.rows" 
                    :key="row.code"
                    v-if="!row.isHiddenByScrolling"
                    > <!--для строки внутри блока-->
                    <div class="tw-col-1 hor-flex-child">
                        <div class="empl-block hor-flex-parent" @click="onEmplRowClick(row)" :class="{'selected': ~selectedURowCodes.indexOf(row.urows[0].code)}">
                            <div class="icon hor-flex-child">
                                <i class="fa" :class="row.area.icon ? ('fa-'+ row.area.icon) : 'fa-store'" :style="{color: row.area.color || 'black'}"></i>
                            </div>
                            <div class="name hor-flex-child-long">
                                <span class="name-head" v-text="row.organization.name" :title="row.organization.name" :style="{cursor:'pointer'}"></span>
                                <br>
                                <span class="name-captions">
                                    <!-- <span class="name-caption" v-for="c in row.captions" v-text="c.label" :style="{color: c.color}"></span> -->
                                    <span class="name-caption" v-text="row.area.name" :style="{color: row.area.color || 'black'}"></span>
                                </span>
                            </div>
                            <div class="summ hor-flex-child">
                                <div class="top-summ" :text-content.prop="row.shiftsDurationSumm | timeDeltaHM"></div>
                            </div>
                        </div>
                        <!-- пустые блоки для подсветки во время выделения -->
                        <div class="empl-block hor-flex-parent" 
                            v-for="(urow, urow_index) in row.urows" 
                            v-if="urow_index > 0"
                            :class="{'selected': ~selectedURowCodes.indexOf(urow.code)}">
                            <div class="icon hor-flex-child">
                            </div>
                            <div class="name hor-flex-child-long">
                                <span class="name-head"></span>
                                <br>
                                <span class="name-captions">
                                    <span class="name-caption"></span>
                                </span>
                            </div>
где я могу поискать про выгрузку данных с динамической страницы?

*белиберда (выше в сообщении, а то исправить его уже не могу)

Добавлено через 40 минут
мне видимо надо selenium разбирать...
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,763
04.01.2020, 13:19
на javascript форуме, но точно сказать трудно, надо копать

Добавлено через 8 минут
если вы в браузере ланные ваши видите, можно сохранить в файл потом распарсить.
а автоматом - нада в инспекторе network смотреть какой запрос идет на получение данных
1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
04.01.2020, 22:52  [ТС]
да, я как раз смотрела тут Парсер таблицы
нашла network, но всё боялась нажать ctrl +R.. вроде что-то выгрузилось, но всё таки пока ещё не то, что надо..
Code
1
2
3
4
"content": {
            "size": 12629,
            "mimeType": "application/x-javascript",
            "text": ";(function(){function aa(a,b,c){return a.call.apply(a.bind,arguments)}function ba(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}function n(a,b,c){n=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?aa:ba;return n.apply(null,arguments)}var p=Date.now||function(){return+new Date};function r(a,b){this.F=a;this.k=b||a;this.H=this.k.document}var ca=!!window.FontFace;r.prototype.createElement=function(a,b,c){a=this.H.createElement(a);if(b)for(var d in b)b.hasOwnProperty(d)&&(\"style\"==d?a.style.cssText=b[d]:a.setAttribute(d,b[d]));c&&a.appendChild(this.H.createTextNode(c));return a};function s(a,b,c){a=a.H.getElementsByTagName(b)[0];a||(a=document.documentElement);a.insertBefore(c,a.lastChild)}\nfunction t(a,b,c){b=b||[];c=c||[];for(var d=a.className.split(/\\s+/),e=0;e<b.length;e+=1){for(var f=!1,g=0;g<d.length;g+=1)if(b[e]===d[g]){f=!0;break}f||d.push(b[e])}b=[];for(e=0;e<d.length;e+=1){f=!1;for(g=0;g<c.length;g+=1)if(d[e]===c[g]){f=!0;break}f||b.push(d[e])}a.className=b.join(\" \").replace(/\\s+/g,\" \").replace(/^\\s+|\\s+$/,\"\")}function u(a,b){for(var c=a.className.split(/\\s+/),d=0,e=c.length;d<e;d++)if(c[d]==b)return!0;return!1}\nfunction v(a){if(\"string\"===typeof a.fa)return a.fa;var b=a.k.location.protocol;\"about:\"==b&&(b=a.F.location.protocol);return\"https:\"==b?\"https:\":\"http:\"}function x(a,b,c){function d(){l&&e&&f&&(l(g),l=null)}b=a.createElement(\"link\",{rel:\"stylesheet\",href:b,media:\"all\"});var e=!1,f=!0,g=null,l=c||null;ca?(b.onload=function(){e=!0;d()},b.onerror=function(){e=!0;g=Error(\"Stylesheet failed to load\");d()}):setTimeout(function(){e=!0;d()},0);s(a,\"head\",b)}\nfunction y(a,b,c,d){var e=a.H.getElementsByTagName(\"head\")[0];if(e){var f=a.createElement(\"script\",{src:b}),g=!1;f.onload=f.onreadystatechange=function(){g||this.readyState&&\"loaded\"!=this.readyState&&\"complete\"!=this.readyState||(g=!0,c&&c(null),f.onload=f.onreadystatechange=null,\"HEAD\"==f.parentNode.tagName&&e.removeChild(f))};e.appendChild(f);setTimeout(function(){g||(g=!0,c&&c(Error(\"Script load timeout\")))},d||5E3);return f}return null};function z(){this.S=0;this.K=null}function A(a){a.S++;return function(){a.S--;B(a)}}function C(a,b){a.K=b;B(a)}function B(a){0==a.S&&a.K&&(a.K(),a.K=null)};function D(a){this.ea=a||\"-\"}D.prototype.d=function(a){for(var b=[],c=0;c<arguments.length;c++)b.push(arguments[c].replace(/[\\W_]+/g,\"\").toLowerCase());return b.join(this.ea)};function E(a,b){this.Q=a;this.M=4;this.L=\"n\";var c=(b||\"n4\").match(/^([nio])([1-9])$/i);c&&(this.L=c[1],this.M=parseInt(c[2],10))}E.prototype.getName=function(){return this.Q};function da(a){return F(a)+\" \"+(a.M+\"00\")+\" 300px \"+G(a.Q)}function G(a){var b=[];a=a.split(/,\\s*/);for(var c=0;c<a.length;c++){var d=a[c].replace(/['\"]/g,\"\");-1!=d.indexOf(\" \")||/^\\d/.test(d)?b.push(\"'\"+d+\"'\"):b.push(d)}return b.join(\",\")}function I(a){return a.L+a.M}\nfunction F(a){var b=\"normal\";\"o\"===a.L?b=\"oblique\":\"i\"===a.L&&(b=\"italic\");return b}function ea(a){var b=4,c=\"n\",d=null;a&&((d=a.match(/(normal|oblique|italic)/i))&&d[1]&&(c=d[1].substr(0,1).toLowerCase()),(d=a.match(/([1-9]00|normal|bold)/i))&&d[1]&&(/bold/i.test(d[1])?b=7:/[1-9]00/.test(d[1])&&(b=parseInt(d[1].substr(0,1),10))));return c+b};function fa(a,b){this.a=a;this.j=a.k.document.documentElement;this.O=b;this.f=\"wf\";this.e=new D(\"-\");this.da=!1!==b.events;this.u=!1!==b.classes}function ga(a){a.u&&t(a.j,[a.e.d(a.f,\"loading\")]);J(a,\"loading\")}function K(a){if(a.u){var b=u(a.j,a.e.d(a.f,\"active\"))
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,763
04.01.2020, 23:11
когда-то пользовался
Selenium IDE

Selenium IDE – плагин к браузеру Firefox, который может записывать действия пользователя, воспроизводить их, а также генерировать код для WebDriver или Selenium RC, в котором выполняются те же самые действия. В общем, это «Selenium-рекордер».
Добавлено через 2 минуты
https://habr.com/ru/company/uniweb/blog/117648/
1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
08.01.2020, 18:23  [ТС]
sess = requests.Session()
data = {"login":"name", "password":"secret"}
url = "address"
res = sess.post(url, data=data)

print(res.content)

выходит вот что - ничего похожего на то, что я вижу в html
и написано там forbidden,
может ли быть так, что доступ нельзя просто так получить к коду?

Code
1
b'\n<!DOCTYPE html>\n<html lang="en">\n<head>\n  <meta http-equiv="content-type" content="text/html; charset=utf-8">\n  <meta name="robots" content="NONE,NOARCHIVE">\n  <title>403 Forbidden</title>\n  <style type="text/css">\n    html * { padding:0; margin:0; }\n    body * { padding:10px 20px; }\n    body * * { padding:0; }\n    body { font:small sans-serif; background:#eee; color:#000; }\n    body>div { border-bottom:1px solid #ddd; }\n    h1 { font-weight:normal; margin-bottom:.4em; }\n    h1 span { font-size:60%; color:#666
вопрос, если мне нужно зайти на сайт, но вход осуществляется с другой страницы, нужно ли мне указывать адрес страницы с формой для ввода логина и пароля, а потом перенаправиться на другую страницу на этом сайте?
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,763
08.01.2020, 20:06
ставьте тэг HTML в коде
сервер вам говорит - вход запрещен
вот вам пример с selenium
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
from selenium import webdriver
 
mail = 'mymail'
pas = 'mypassword'
 
def init_driver():
    driver = webdriver.Firefox()
    driver.set_window_size(800,600)
    driver.set_window_position(0, 0)
    driver.implicitly_wait(5) # seconds
    return driver
 
def dropbox_auth(driver,mail,pas):
    try:
        driver.get('https://www.dropbox.com/login')
        driver.find_element_by_name('login_email').send_keys(mail)
        driver.find_element_by_name('login_password').send_keys(pas)
        driver.find_element_by_xpath( '//button[@class="login-button signin-button button-primary"][@type="submit"]').click()
    except Exception as e:
        print(repr(e))
            
if __name__ == "__main__":
    driver = init_driver()
    dropbox_auth(driver,mail,pas)
    input('?')
    driver.quit()
1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
08.01.2020, 20:20  [ТС]
Спасибо! Я сейчас попробую к себе приспособить, ещё вот что нашла, думала использую
https://stackoverflow.com/ques... er-postman
Код из ответа:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 import requests
url = "http://test:180/test.aspx"
session = requests.Session()
session.trust_env = False #disable OS proxy
headers = {
    'authorization': "Basic d3NndWVzdDpzbWMxxjMhQA==",
    'cache-control': "no-cache",
    'postman-token': "157e52fa-95f5-5287-9ee0-xxxxxxxx"
}
 
response = session.get(url, headers=headers)
print(response.text)
 
#use empty proxy instead
proxies = {
  "http": None,
  "https": None,
}
response = requests.get(url, auth=HTTPBasicAuth('test', 'test'), proxies=proxies)
print (response)
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,763
08.01.2020, 20:27
Лучший ответ Сообщение было отмечено Eliy как решение

Решение

КМК вам с selenium проще будет, можно в браузере видеть результат

Добавлено через 2 минуты
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
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
 
def init_driver():
    driver = webdriver.Firefox()
    driver.set_window_size(800,600)
    driver.set_window_position(0, 0)
    driver.implicitly_wait(5) # seconds
    return driver
 
def query(driver,q_str):
    try:
        driver.get('http://ya.ru')
        text = driver.find_element_by_id('text')
        text.send_keys(q_str)
        text.send_keys(Keys.RETURN)
    except Exception as e:
            print(repr(e))
            
if __name__ == "__main__":
    driver = init_driver()
    query(driver,'selenium python 3 парсинг динамических страниц')
    input('?')
    driver.quit()
1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
08.01.2020, 21:45  [ТС]
честно говоря, я пока застряла, так как у меня хром, я написала ему Chrome(), он наругался, что ChromeDrivera у него нет...

WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chr... river/home

я пошла по ссылке, он открыл cmd и написал:

Starting ChromeDriver 79.0.3945.36 (3582db32b33893869b8c1339e8f4d9ed1816f14 3-refs/branch-heads/3945@{#614}) on port 9515
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.

зато я поняла, в виде какой таблицы у меня данные.. и мне просто надо по классам пройтись одним и тем же...

и я наконец достала данные таблицы, нажав Copy outerHTML table-widget ver-flex-parent shift-assign-table
то есть мне надо внутри неё пробежаться как-то...

Code
1
2
3
4
5
6
7
8
9
10
def get_data(html):
    soup = BeautifulSoup(html)
    data=[]
    table = soup.find("table-widget ver-flex-parent shift-assign-table")
    for tw-row in table.find_all("tw-row hor-flex-child"):
        data.append([tw-row.get_text() for tw-col1 in span.find_all("title")])...
дальше надо дописать
        
    data = pd.DataFrame(data[1:], columns=["shop","schedule"])
    print (data)
Миниатюры
Выгрузить табличные данные со страницы html  
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,763
08.01.2020, 22:09
Лучший ответ Сообщение было отмечено Eliy как решение

Решение

Цитата Сообщение от Eliy Посмотреть сообщение
он наругался, что ChromeDrivera у него нет...
https://selenium-python.com/in... ver-chrome
на скрине я не вижу никаких данных, одни заголовки
1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
08.01.2020, 22:18  [ТС]
да, сорри, данные не могу показать, я и так много выкладываю, но данные примерные можно увидеть на принтскринах выше, где я замазывала конкретные места, то есть в целом это то, что мне надо обработать/получить и до текущего момента я даже не могла это получить в текстовом виде, а теперь оно у меня полностью есть без необходимости нажимать на треугольнички и раскрывать, и я рада, хотя там и пока много ещё лишних div, span
Миниатюры
Выгрузить табличные данные со страницы html  
0
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
08.01.2020, 22:37  [ТС]
и Xpath теперь нашла к таблице!
/html/body/div[1]/div/div[2]/div/div/div[2]/div[2]/div
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,763
08.01.2020, 22:52
можно проще
//span[@class="time-start"]
//span[@class="time-end"]
1
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 38
09.01.2020, 12:28  [ТС]
почти, но пока нет результата итогого(((
он опять ругается..


Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
payload = {"login":"name", "password":"secret"}
url = "https://address/page/"
data=[]
response = requests.get(url, params=payload)
tree = html.fromstring(response.text)
----> суп пока убрала, на него тоже ругался  soup = BeautifulSoup(response.content, 'lxml')
table = tree.find('.//div[@class="table-widget ver-flex-parent shift-assign-table"]')
for shop in table.find_all('.//div[@class=tw-row-hor-flex-parent"]'):
    data.append(shop.find('.//span[@class="name-head"]').get_text)
    for day in shop.find('.//div[@class="day ver-flex-parent"]'):
        if day.find('.//div[@class="time"]') is None:
            data.append("0,0,0")
        else:
            data.append(day.find('.//span[@class="time-start"]').get_text)
            data.append(day.find('.//span[@class="time-end"]').get_text)
            data.append(day.find('.//span[@class="owner-name"]').get_text)
print (table.text)
вот, что пишет
AttributeError Traceback (most recent call last)
<ipython-input-118-800a9e83b99f> in <module>()
16 soup = BeautifulSoup(response.content, 'lxml')
17 table = tree.find('.//div[@class="table-widget ver-flex-parent shift-assign-table"]')
---> 18 for shop in table.find_all('.//div[@class=tw-row-hor-flex-parent"]'):
19 data.append(shop.find('.//span[@class="name-head"]').get_text)
20 for day in shop.find('.//div[@class="day ver-flex-parent"]'):

AttributeError: 'NoneType' object has no attribute 'find_all'
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.01.2020, 12:28
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru