在 Python 中用 str.split 解析 HTML

Parsing HTML with str.split in Python

我正在用请求模块解析一个网站,我试图在不使用 BeautifulSoup.这是我要解析的部分代码:

<td class="notranslate" style="height:25px;">
    <a class="post-list-subject" href="/Forum/ShowPost.aspx?PostID=80631954">
        <div class="thread-link-outer-wrapper">
            <div class="thread-link-container notranslate">
                Forum Rule: Don&#39;t Spam in Any Way
            </div>

我正在尝试获取标签内的文本:

/Forum/ShowPost.aspx?PostID=80631954

问题是,因为我正在解析一个论坛网站,所以这些分隔标签有多种用途。我想使用 string.split 检索 table 的 post 个 URL,代码类似于:

htmltext.split('<a class="post-list-subject" href="')[1].split('"><div class="thread-link-outer-wrapper">')[0]

HTML 代码中没有任何内容指示页面上的 post 编号,只有链接。

考虑使用 Beautiful Soup。它会让你的生活更轻松。注意解析器的选择,以便您可以获得适合您的任务的速度和宽容度的平衡。

在不建立瓶颈的情况下尝试预优化似乎真的很冒险 html 解析。如果您担心性能,为什么不使用 lxml?模块导入几乎从来不是瓶颈,这听起来像是搬起石头砸自己的脚。

就是说,这在技术上可以满足您的需求,但实际上它并不比在长 运行 中使用像 lxml 这样的 HTML 解析器更高效。明确避免 HTML 解析器也可能会大大增加您的开发时间,因为您会找出晦涩的字符串操作片段,而不是仅仅使用您通过 HTML.

免费获得的漂亮树结构。
strcleaner = lambda x : x.replace('\n', '').replace(' ', '').replace('\t', '')
S = strcleaner(htmltext)
S.split(strcleaner('<a class="post-list-subject" href="'))[1].split(strcleaner('"><div class="thread-link-outer-wrapper">'))[0]

您发布的代码的问题是空格和换行符也是字符。

在我看来,有更好的方法可以做到这一点。即使您不想使用 BeautifulSoup,我也会倾向于使用正则表达式。但是,使用您想要的代码绝对可以完成该任务。这是一种使用列表理解的方法:

 results = [chunk.split('">')[0] for chunk in htmltext.split('<a class="post-list-subject" href="')[1:]]

我试图尽可能地根据您的基本代码对其进行建模,但我确实简化了其中一个拆分参数以避免空白问题。

如果正则表达式是公平的游戏,你可以这样做:

import re
target = '<a class="post-list-subject" href="(.*)">'
results = re.findall(target, htmltext)