Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 17, 2023 05:35:05

Scorp_1978
Зарегистрирован: 2023-02-03
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг сайта

Доброе утро.
Помогите спарсить сайт с bs4 разобраться не могу.

 response_gippo = requests.get('https://my.omesc.ru/meas/inp.htm?ls=13601608335')
soup = BeautifulSoup(response_gippo.text, "html.parser")
paragraphs = []
for x in soup.findAll('td'):
    paragraphs.append(str(x))
    i=i+1
i = 0
z = 0
while i < len(paragraphs):
    if paragraphs[i].find('Электроэнергия')>1:
        string = paragraphs[i]
        z=i
        break
    i = i + 1

вот начал писать код, думал в массив текстовый загнать, но оттуда не понятно как вытаскивать. Как через теги понять не могу.

сайт https://my.omesc.ru/meas/inp.htm?ls=13601608335
нужно все данные по электроэнергии загнать в массив двумерный.
Подскажите

Офлайн

#2 Окт. 17, 2023 06:51:01

Scorp_1978
Зарегистрирован: 2023-02-03
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг сайта

Может можно как то использовать xpath

/html/body/table/tbody/tr/td[4]/div/form/table[1]/tbody/tr[1]/td[2]     Номер счетчика 1
/html/body/table/tbody/tr/td[4]/div/form/table[1]/tbody/tr[1]/td[3] Тариф
/html/body/table/tbody/tr/td[4]/div/form/table[1]/tbody/tr[1]/td[5]/div показания

/html/body/table/tbody/tr/td[4]/div/form/table[1]/tbody/tr[2]/td[1] Тариф
/html/body/table/tbody/tr/td[4]/div/form/table[1]/tbody/tr[2]/td[2]/div показания

/html/body/table/tbody/tr/td[4]/div/form/table[1]/tbody/tr[3]/td[1] Тариф
/html/body/table/tbody/tr/td[4]/div/form/table[1]/tbody/tr[3]/td[2]/div показания

------------------------------------------------------------------------------------------------

/html/body/table/tbody/tr/td[4]/div/form/table[1]/tbody/tr[4]/td[2] Номер счетчика 2
/html/body/table/tbody/tr/td[4]/div/form/table[1]/tbody/tr[4]/td[3] Тариф
/html/body/table/tbody/tr/td[4]/div/form/table[1]/tbody/tr[4]/td[5]/div показания

вытащить в массив все что после

/html/body/table/tbody/tr/td[4]/div/form/table[1]/tbody

Офлайн

#3 Окт. 17, 2023 07:33:55

Scorp_1978
Зарегистрирован: 2023-02-03
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг сайта


 import requests
from bs4 import BeautifulSoup
from lxml import etree
dom = etree.HTML (str(soup))
elements = dom.xpath('//.*[@class="a-table create"]')[0]
print(elements)

не работает

Traceback (most recent call last):
File "C:\Users\Дом\PycharmProjects\telegram_bot\Net-query.py", line 35, in <module>
elements = dom.xpath('//.*[@class="a-table create"]')[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "src\lxml\etree.pyx", line 1600, in lxml.etree._Element.xpath
File "src\lxml\xpath.pxi", line 305, in lxml.etree.XPathElementEvaluator.__call__
File "src\lxml\xpath.pxi", line 225, in lxml.etree._XPathEvaluatorBase._handle_result
lxml.etree.XPathEvalError: Invalid expression

Офлайн

#4 Окт. 17, 2023 08:19:00

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9844
Репутация: +  853  -
Профиль   Отправить e-mail  

Парсинг сайта

Scorp_1978
elements = dom.xpath('//.*[@class="a-table create"]')[0]
А что там точка делает? XPath - это не регулярные выражения, это вообще другой язык.



Офлайн

#5 Окт. 17, 2023 08:22:25

Scorp_1978
Зарегистрирован: 2023-02-03
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг сайта

py.user.next

Ошибку выдавать перестал… прогресс, но и массив пустой

Офлайн

#6 Окт. 17, 2023 08:26:55

Scorp_1978
Зарегистрирован: 2023-02-03
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг сайта

print (dom.xpath('//*[@class="a-table create"]')[0])
Traceback (most recent call last):
File "C:\Users\Дом\PycharmProjects\telegram_bot\Net-query.py", line 32, in <module>
print (dom.xpath('//*[@class="a-table create"]')[0])
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range

Офлайн

#7 Окт. 17, 2023 08:46:13

Scorp_1978
Зарегистрирован: 2023-02-03
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг сайта

Сработала вот эта конструкция

import requests
from bs4 import BeautifulSoup
from lxml import etree
response_gippo = requests.get('https://my.omesc.ru/meas/inp.htm?ls=13601608335')
soup = BeautifulSoup(response_gippo.text, "html.parser")
dom = etree.HTML(str(soup))
i=0
while i < len(dom.xpath('//div/text()')):
print (dom.xpath('//div/text()')[i])
i=i+1
C:\Users\Дом\PycharmProjects\telegram_bot\venv\Scripts\python.exe C:\Users\Дом\PycharmProjects\telegram_bot\Net-query.py 
909
18460
4722
11320
уже что-то ВОПРОС как сделать чтоб в лист собирались одновременно и div и td
print (dom.xpath('//div/text()')[i])
print (dom.xpath('//td/text()')[i])

Офлайн

#8 Окт. 17, 2023 09:36:24

Scorp_1978
Зарегистрирован: 2023-02-03
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг сайта

вот так не работает

dom.xpath('[//td/ and //div/]text()')
dom.xpath('[//td/text() and //div/]text()')
dom.xpath('[//td/text()' and '//div/]text()')

подскажите

Отредактировано Scorp_1978 (Окт. 17, 2023 09:38:26)

Офлайн

#9 Окт. 17, 2023 09:58:25

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Парсинг сайта

Наверное стоит перестать угадывать и почитать что нить на предмет  xpath
https://www.w3schools.com/xml/xpath_syntax.asp

 //td | //div



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#10 Окт. 17, 2023 10:37:57

Scorp_1978
Зарегистрирован: 2023-02-03
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг сайта

ZerG, спасибо за ссылочку но

 suite = dom.xpath('[//td/ | //div/]text()')
suite = dom.xpath('[//td/text() | //div/]text()')
suite = dom.xpath('[//td/text()' | '//div/]text()')

не работает

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version