正确使用HTMLParser.getpos()的方法?

时间:2017-07-23 01:44:56

标签: python-3.x html-parsing

使用Python 3 html.parser getpos()方法的正确方法是什么?

我使用以下示例来探索html.parser方法的子集:

https://docs.python.org/3/library/html.parser.html#examples

我的复制粘贴演示程序有效。但现在我想使用 html.parser getpos()方法来获取标记的行号和偏移量。

经过多次实验,包括尝试在示例中给出的类中添加单独的 def getpos()方法(输出什么都没有),这是我能够实现的唯一方法让getpos()返回它的行号和偏移元组是通过在以下代码片段的每一行插入一行(在我看来是什么)笨拙和丑陋的代码:

<link rel="stylesheet" href="<?=base_url('assets/dist/css/singup.css');?>">
<div class="container">
    <div class="col-md-6">
        <div id="logbox">
            <form id="signup" method="post">
                <h1>create an account</h1>
                <input name="user[name]" type="text" placeholder="What's your username?" pattern="^[\w]{3,16}$" autofocus="autofocus" required="required" class="input pass" />
                <select name="profile_id" id="profile_id">
                    <option value="">Select a Profile</option>
                    <?php foreach ($profile as $value): ?>
                      <option value="<?php echo $value['id'];?>"><?php echo $value['profile']; ?></option>
                    <?php endforeach ?>
                </select>
                <input name="user[password]" type="password" placeholder="Choose a password" required="required" class="input pass" />
                <input name="user[password2]" type="password" placeholder="Confirm password" required="required" class="input pass" />
                <input name="user[email]" type="email" placeholder="Email address" class="input pass" />
                <input type="submit" value="Sign me up!" class="inputButton" />
                <div class="text-center">
                    already have an account? <a href="#" id="login_id">login</a>
                </div>
            </form>
        </div>
    </div>
</div>

这样做 - 只举一个例子,它打印的HTML输入文件第5行的零缩进开始标记:

from html.parser import HTMLParser
...
class FlareTopicParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        # Following line inserted by me into class's examples.
        print("  Line, offset ==", HTMLParser.getpos(self))
        # This working code from examples per
        # https://docs.python.org/3/library/html.parser.html#examples
        print("  Start tag:", tag)
        for attr in attrs:
        print("  attr:", attr)

但是示例代码第4行中的 Line, offset == (5, 0) 构造(对于这只偶然的Python 3编码器)似乎是笨拙和错误的。

使用getpos()的方法是正确的,或者更好的方法是什么?

1 个答案:

答案 0 :(得分:0)

无需在解析器中覆盖getpos;我建议按如下方式重写第4行:

(line, column) = self.getpos()
print("line %d column %d") % (line, column)

通过此getpos()来电,您也可以独立使用linecolumn