Найти - Пользователи
Полная версия: Парсинг сайта
Начало » Python для новичков » Парсинг сайта
1 2
Scorp_1978
Доброе утро.
Помогите спарсить сайт с 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
нужно все данные по электроэнергии загнать в массив двумерный.
Подскажите
Scorp_1978
Может можно как то использовать 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
Scorp_1978

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

Ошибку выдавать перестал… прогресс, но и массив пустой
Scorp_1978
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
Scorp_1978
Сработала вот эта конструкция
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])
Scorp_1978
вот так не работает
dom.xpath('[//td/ and //div/]text()')
dom.xpath('[//td/text() and //div/]text()')
dom.xpath('[//td/text()' and '//div/]text()')

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

 //td | //div
Scorp_1978
ZerG, спасибо за ссылочку но

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

не работает
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB