小编Ath*_*euz的帖子

用rowpan和colspan解析一张桌子

我有一张桌子需要解析,特别是这是一个有4个时间段的学校时间表,每周5个时段.我试图解析它,但老实说还没有走得太远因为我对如何处理rowspan和colspan属性感到困惑,因为它们本质上意味着我需要继续缺少数据.

作为我想要做的一个例子,这是一个表:

<tr>
    <td colspan="2" rowspan="4">#1</td>
    <td rowspan="4">#2</td>
    <td rowspan="2">#3</td>
    <td rowspan="2">#4</td>
</tr>

<tr>
</tr>

<tr>
    <td rowspan="2">#5</td>
    <td rowspan="2">#6</td>
</tr>

<tr>
</tr>
Run Code Online (Sandbox Code Playgroud)

我想把那个表转换成这个列表:

[[1,1,2,3,4],
 [1,1,2,3,4],
 [1,1,2,5,6],
 [1,1,2,5,6]]
Run Code Online (Sandbox Code Playgroud)

现在我得到一个平面列表,类似于:

[1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)

但是在字典形式中,有关于它跨越多少列和行的信息,它的描述以及它的周.

显然,这需要适用于rowspan/colspan的所有可能性,并且需要在同一个表中使用多周.

html并不像我描述的那样干净,我遗漏了许多属性,文本显然不像1,2,3,4那样简洁,而是描述性文本块.但是,如果我能够解决这个问题,那么它应该很容易融入我已经写过的内容中.

我一直在使用lxml.html和Python来做这件事,但如果它提供了更简单的解决方案,我愿意使用其他模块.

我希望有人可以帮助我,因为我真的不知道该怎么做.

编辑:

<table>
    <tr>
        <td> </td>
        <td> </td>
        <td> </td>
        <td rowspan="4">Thing</td>
        <td> </td>
    </tr>
    <tr>
        <td> </td>
        <td> </td>
        <td> </td>
        <td> </td>
    </tr>
    <tr>
        <td> </td>
        <td> </td>
        <td> </td>
        <td> </td>
    </tr>
    <tr>
        <td> </td>
        <td> </td>
        <td> </td>
        <td> </td>
    </tr>
</table> …
Run Code Online (Sandbox Code Playgroud)

python lxml html-table html-parsing

13
推荐指数
1
解决办法
8442
查看次数

试图在graphviz点中可视化抽象语法树,它太宽了.怎么修?

所以我正在研究一种语言,我想,主要是出于好奇,看看我是否能够可视化文件的抽象语法树.经过一番环顾,我发现了graphviz dot,转换了我的AST prettyprinter,可以输出到这种格式:

digraph G {
    main -> parse -> execute;
    main -> init;
    main -> cleanup;
    execute -> make_string;
    execute -> printf
    init -> make_string;
    main -> printf;
    execute -> compare;
}
Run Code Online (Sandbox Code Playgroud)

但我的问题是,当我跑

dot -Tpng dotf.gv -o graph.png
Run Code Online (Sandbox Code Playgroud)

在输入文件中,我最终得到一个宽度为8000像素的文件,这是不切实际的.看到这里.

我不知道是否可以修复,但如果有人可以感激我.

parsing abstract-syntax-tree graphviz

5
推荐指数
1
解决办法
1547
查看次数

使用Flask-Cache缓存lxml.html对象

我正在尝试创建一个Flask Web应用程序,您必须要求整个非本地网站,我想知道是否可以将其缓存以加快速度,因为网站不会经常更改但我仍然希望它每天更新缓存一次.

无论如何,我查了一下,找到了Flask-Cache,它似乎做了我想要的,所以我对它进行了适当的修改,并提出了添加:

from flask.ext.cache import Cache
[...]
cache = Cache()
[...]
cache.init_app(app)
[...]
@cache.cached(timeout=86400, key_prefix='content')
def get_content():
    return lxml.html.fromstring(urllib2.urlopen('http://WEBSITE.com').read())
Run Code Online (Sandbox Code Playgroud)

然后我从需要内容的函数中调用,如下所示:

content = get_content()
Run Code Online (Sandbox Code Playgroud)

现在我希望每次调用时都重用缓存的lxml.html对象,但这不是我所看到的.每次进行呼叫时对象的ID都会改变,并且根本没有加速.那么我误解了Flask-Cache的功能,或者我在这里做错了什么?我尝试过使用memoize装饰器,我已经尝试过减少超时或者将它们全部一起删除,但似乎没有任何改变.

谢谢.

python caching flask

1
推荐指数
1
解决办法
1015
查看次数