Python 从特定数据库获取特定数据<;脚本类型=";text/javascript“&燃气轮机;

Python 从特定数据库获取特定数据<;脚本类型=";text/javascript“&燃气轮机;,python,regex,Python,Regex,我有一个带有多个javascript标记的html页面。我想从特定标记中提取数据的问题: <head> ... </head> <body> ... <script type="text/javascript"> $j(document).ready(function() { if (!($j.cookie("ios"))) { new $c.free.widgets.FreeAdvDialog(

我有一个带有多个javascript标记的html页面。我想从特定标记中提取数据的问题:

<head>
...
</head>
<body>
...
<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 = ["d24349f205e3deb7f1015f42d3a14da7205b62e4", "0ae78c4797d47745ebd44e2754367da10c6f56a4", "567b2bfb6fd1aee784115da54e5e116a280ee225", "fc5cd251be46ff101c471553d52c07bf08c9aa65"];
        var is_dm = false;

        /* async chart loader */
        var chart = new $c.free.widgets.Chart({
            target: $j('#graph'),
            width: 990,
            height: 275,
            site: "911.com",
            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();

        /* zoom info initialization */
        var zoom_info = new $c.free.widgets.ZoomInfo({
            site: "911.com",
            el: '#zoominfo',
            key: ajax_keys[3]
        });
        zoom_info.load();


        /* compete numbers initialization */
        var compete_numbers = new $c.free.widgets.CompeteNumbers({
            site: "911.com",
            key: ajax_keys[0],
            el: '#compete_numbers'
        });
        compete_numbers.load();

        /* DM Marketing widget init */
        new $c.free.widgets.DMSignupMessage({
            is_dm: is_dm,
            compete_numbers: compete_numbers
        });

        /* personalization initialization */


            var logged_in_as = null;


        var d = {
          site_name: "911.com",
          logged_in_as: logged_in_as,
          current_source_panel: {"display_abbreviation": "us", "panel_name": "us", "image_url": "http://media.compete.com/site_media/images/icons/flag_us.gif", "id": 1, "display_name": "United States"}
        };

        var auth_model = new $c.free.widgets.FreeLoginModel(d);
        var links_opts = { model: auth_model };
        var links_view = new $c.free.widgets.FreeAccountLinksView(links_opts);

        var sites_view = new $c.free.widgets.FollowSiteButtonView(links_opts);
        var manage_view = new $c.free.widgets.ManageSitesListButtonView(links_opts);

        var sites = new $c.free.widgets.SimilarSitesCollection([], {
            site: "911.com",
            source_panel: 'us',
            key: ajax_keys[2],
            auth: auth_model
        });
        var graph = new $c.free.widgets.BarGraph({
            el: $j('#similar-sites'),
            collection: sites
        });

        // tell KISSMetrics where we are
        // also identify user so KM console can refer to them by email
        if(logged_in_as != null) {
            _kmq.push(['identify', logged_in_as]);
        }
        _kmq.push(['record', 'Viewed Free Site Analytics Report (M)']);
    });

...
...
$j(文档).ready(函数(){
如果(!($j.cookie(“ios”)){
新的$c.free.widgets.FreeAdvDialog().open();
$j.cookie(“ios”,“seen”,{path:'/',expires:10000});
};
ajax_key=[“d24349f205e3deb7f1015f42d3a14da7205b62e4”,“0AE78C4797D4774EBD44E2754367DA10C6F56A4”,“567b2bfb6fd1aee784115da54e5e116a280ee225”,“fc5cd251be46ff101c471553d52c07bf08c9aa65”];
var为_dm=假;
/*异步图表加载器*/
var chart=new$c.free.widgets.chart({
目标:$j(“#图”),
宽度:990,
身高:275,
网站:“911.com”,
资料来源:“美国”
});
var chart_view=new$c.free.widgets.ChartView({
图表:图表,
csv_按钮:“csv导出”,
保存按钮:“图形图像”,
嵌入按钮:“嵌入图形”,
键:ajax_键[1]
});
chart_view.render();
/*缩放信息初始化*/
var zoom_info=new$c.free.widgets.ZoomInfo({
网站:“911.com”,
el:“#zoominfo”,
键:ajax_键[3]
});
zoom_info.load();
/*竞争号码初始化*/
var compete_numbers=新的$c.free.widgets.CompeteNumbers({
网站:“911.com”,
键:ajax_键[0],
el:“#竞争数字”
});
竞争数字。加载();
/*DM营销小部件初始化*/
新的$c.free.widgets.DMSignupMessage({
is_dm:is_dm,
竞争号码:竞争号码
});
/*个性化初始化*/
var logged_in_as=null;
变量d={
网站名称:“911.com”,
登录身份:登录身份,
当前源面板:{“显示”缩写:“美国”,“面板名称”:“美国”,“图像url”:http://media.compete.com/site_media/images/icons/flag_us.gif,“id”:1,“显示名称”:“美国”}
};
var auth_model=new$c.free.widgets.FreeLoginModel(d);
var links_opts={model:auth_model};
var links\u view=new$c.free.widgets.FreeAccountLinksView(links\u opts);
var sites\u view=new$c.free.widgets.FollowSiteButtonView(links\u opts);
var manage_view=new$c.free.widgets.ManageSitesListButtonView(links_opts);
var sites=new$c.free.widgets.similarisitescollection([]{
网站:“911.com”,
资料来源"美国",,
键:ajax_键[2],
auth:auth_模型
});
var-graph=new$c.free.widgets.BarGraph({
el:$j(“#类似站点”),
收藏:网站
});
//告诉我我们在哪里
//还要识别用户,以便KM控制台可以通过电子邮件向他们推荐
if(登录为!=null){
_kmq.push(['identify',logged_in_as]);
}
_kmq.push(['record','Viewed Free Site Analytics Report(M)]);
});
...

如何从页面的特定标记获取ajax_键(即“d24349f205e3deb7f1015f42d3a14da7205b62e4”)

p、 我尝试在python脚本中使用正则表达式,但无法从标记中检索必要的元素


谢谢您的帮助。

如果您使用像BeautifulSoup这样的库,您可以获取特定的脚本标记,然后对标记的内容而不是整个文档使用正则表达式

也就是说,假设只有一个
ajax\u键,正则表达式似乎可以工作:

import re

ajaxre = re.compile(r"^\s+ajax_keys = ([^;]+)", re.MULTILINE)
ajax_string = ajaxre.match(source).group(1)

# to get it as a python list
import json
ajax_keys = json.loads(ajax_string)

编辑:感谢@Karl Knechtel提供json。加载

“总体上要小心”——没有借口;您需要
ast.literal\u eval
。或者甚至可能
json.loads
。eval是邪恶的。很好的json.loads调用,更新应答谢谢!另一个问题是我有多个没有标签id的标签。我尝试了smth。如下所示:从bs4导入BeautifulSoup导入重新导入urllib2数据=urllib2.urlopen('url')。读取()soup=BeautifulSoup(数据)到\u extract=soup.findAll('script'),以便将中的项导入到\u extract:item.extract()-这正好从页面的所有标记打印出数据。如果特定的标签没有任何id,我如何找到它?如果你没有任何id,但你知道它的位置,你可以使用索引。例如,第三个脚本标记
soup.findAll(“脚本”)[2]
,最后一个脚本标记
soup.findAll(“脚本”)[-1]
等等。源代码只是HTML作为一个大字符串(不分行)或脚本标记的内容。正则表达式匹配所有以空格开头然后有
ajax\u键=
的行。只要html中只有一行是这样的,您就可以在整个页面上运行它。否则,只要脚本标记中只有一行是这样的,它就可以用于脚本文本。