Как получить значение переменной из функции JSON в разделе HTML-страницы с помощью Python?

Появилась надобность создать скрипт на Python, который должен спарсить данные о проверке скорости интернета с нескольких страниц результата, расположенных на сайте Speedtest, в формат JSON, и потом оттуда - в файл CSV.

import requests
from bs4 import BeautifulSoup

r = requests.get('https://www.speedtest.net/result/*') # * - любое число

soup = BeautifulSoup(str(r), "html.parser")

print(r.text) # для отладки

Есть небольшая проблема. Дело в том, что когда я пытался сделать сначала удаление лишнего при помощи следующей функции наподобие этой ( [14::][:-2]​ ), у меня всё время получалось "обрезание" нужной переменной с JS-скрипта в разделе HTML-страницы с результатом проверки, причём "обрезание" каждый раз происходило по разному: то точно там где надо (т. е. перед названием параметра), то в его названии, а иногда шло до обрезания значения переменной. И решив посмотреть, почему это так происходит, сделав это...

import requests
from bs4 import BeautifulSoup

r1 = requests.get('https://www.speedtest.net/result/*') # скрыто
r2 = requests.get('https://www.speedtest.net/result/*') # скрыто

soup = BeautifulSoup(str(r), "html.parser")

print(r.text)

...я увидел то, что каждый раз длины кода страниц отличаются, и не равны друг другу.

Сначала я захотел решить проблему библиотекой requests_html:

from requests_html import HTMLSession
import html
session = HTMLSession()

r = session.get('https://www.speedtest.net/result/*') # скрыто
speedtest_data = r.html.find('window.OOKLA.INIT_DATA')

print(speedtest_data)

Но значение переменной не вывелось в консоль, показав две квадратный скобки, то бишь пустой лист.

Потом я пробовал решить проблему так:

import json
import re
import urllib2, io

text = urllib2.urlopen('https://www.speedtest.net/result/*').read() # скрыто
speedtest_data = json.loads(text)

print(speedtest_data)

Но опять безуспешно:

Traceback (most recent call last):
  File "C:\Users\Home\pythonProject\eeexperiment\int_test.py", line 3, in <module>
    import urllib2, io
  File "C:\Users\Home\pythonProject\eeexperiment\venv\Lib\site-packages\urllib2.py", line 91, in <module>
    import httplib
  File "C:\Users\Home\pythonProject\eeexperiment\venv\Lib\site-packages\httplib.py", line 208, in <module>
    class HTTPMessage(mimetools.Message):
                      ^^^^^^^^^^^^^^^^^
AttributeError: module 'mimetools' has not found

Более того, модуля mimetools, скорее всего, не существует в природе.

Ситуация повторилась абсолютно также даже после установки модуля Products.MIMETools:

Traceback (most recent call last):
  File "C:\Users\Home\pythonProject\eeexperiment\int_test.py", line 3, in <module>
    import urllib2, io
  File "C:\Users\Home\pythonProject\eeexperiment\venv\Lib\site-packages\urllib2.py", line 91, in <module>
    import httplib
  File "C:\Users\Home\pythonProject\eeexperiment\venv\Lib\site-packages\httplib.py", line 208, in <module>
    class HTTPMessage(mimetools.Message):
                      ^^^^^^^^^^^^^^^^^
AttributeError: module 'Products.MIMETools' has no attribute 'Message'

Но на сей раз программа требовала функцию, которая у установленной библиотеки просто отсутствует.

Что ж делать-то мне? И задача ведь простая: найти значение нужной переменной в скрипте JS в HTML-странице результата проверки скорости Интернета на сайте Speedtest, преобразовать его в JSON, а из него в CSV.

Как быть? Уже часов 5 непрерывно сижу над этим во всю НЕработающим кодом, и никак не могу нормально сделать его.


Ответы (0 шт):