Как получить значение переменной из функции 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 непрерывно сижу над этим во всю НЕработающим кодом, и никак не могу нормально сделать его.