Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как вернуть содержимое Javascript c помощью Python?


(Alex.A) #1

Всем привет,

Есть html страница, на которой присутствует <script type="text/javascript">, который содержит следующий код

$j(document).ready(function() {
 
if (!($j.cookie("ios"))) {
new $c.free.widgets.FreeAdvDialog().open();
$j.cookie("ios", "seen", { path: '/', expires: 10000});
};
 
ajax_keys = ["b8a7b9a9659a495fd8a7483a7f699d7420a60dc1", "3ab02913b6f3b5abf1ec44ac10aa93ace6c537c0", "53c248ed515fafc48efa0ca7d2b6656eea745324", "1618817133a29d61ba5200ae516a0c7e007a5940"];
var is_dm = false;
 
/* async chart loader */
var chart = new $c.free.widgets.Chart({
target: $j('#graph'),
width: 990,
height: 275,
site: "tut.by",
source_panel: 'us'
});
 
var chart_view = new $c.free.widgets.ChartView({
chart: chart,
csv_button: 'csv-export',
save_button: 'graph-image',
embed_button: 'embed-graph',
key: ajax_keys[1]
});
chart_view.render();
...
 
Как получить содержимое ajax_keys(например вывести значение b8a7b9a9659a495fd8a7483a7f699d7420a60dc1)?  Как парсить html разобрался, но вот подлезть к содержимому яваскрипта не получается.
 
Заранее спасибо.
 
 

(Mykhailo Poliarush) #2

а как вы считываете html страницу? есть публичный пример html, что вам написать конкретный код?


(Mykhailo Poliarush) #3

тут проще и быстрее всего использовать регулярные выражения

знаете, как их написать?


(Alex.A) #4

Cпасибо. Регулярными выражениями пользуюсь не часто, но попробую. У меня подход был такой: распарсил html страницу, потом подобрался к нужному скрипту при помощи Хpath. При попытке вывести содержимое элемента, выводит только что-то аля <Element script at 350ad08>.


(jackkainov) #5

Каким инструментом парсите html?


(Alex.A) #6

из lxml импортирую html ('import lxml.html'), а также BeautifulSoup - можно почитать тут


(Mykhailo Poliarush) #7

можно значительно проще, если вам просто надо достать айдишники (конечно, если более сложная задача, тогда может быть надо другой подход выбирать, все зависит от случая  и контекста)

- получать html код страницы с помощью urllib

- получить нужный код с помощью регулярных выражений, тут просто надо написать правильное регулярное выражение

 

например, могу показать такой вот код, 

 

import re, urllib, pprint
COUNT = 3
 
url = "https://news.google.com/?ned=us"
ufile = urllib.urlopen(url)
text = ufile.read()
 
title = re.findall("<h2 class=\"esc-lead-article-title\"><a.*><span class=\"titletext\">(.*)</span></a></h2>", text)
headline = re.findall("<div class=\"esc-lead-snippet-wrapper\">(.*)</div>", text)
pprint.pprint(title)
 
for title, headline in zip(title[:COUNT], headline[:COUNT]):
print "Title: %s\n%s\n%s\n\n" % (title, headline, "-"*60) 

(jackkainov) #8

Михаил, а в данном случае не съест ли звезда (*) </div> как любой символ "." ? Вроде же * жадная.


(Mykhailo Poliarush) #9

ну у меня не было цели, написать код под именно эту задачу

еще раз повторусь, регулярное выражение надо переделать

но отвечая на вопрос, чтобы не съела надо добавить (.*?)

тогда будут искаться все символы до первой встречи </div>

 


(jackkainov) #10

Я поэтому и задал вопрос :-) Потому что Вы забыли знак "?")
Спасибо.


(Mykhailo Poliarush) #11

а ну ок, придираетесь уже :)