正则表达式在Python中的高级应用:从HTML中提取数据
创始人
2024-12-28 02:11:39
0次

正则表达式在Python中的高级应用:从HTML中提取数据

作为一名资深的Python程序员,我深知正则表达式在文本处理中的重要性。尤其是在处理HTML文档时,正则表达式可以成为我们提取数据的强大工具。在本文中,我将通过一个实际的例子,介绍如何使用正则表达式从HTML文件中提取电影排名、名称、导演和主演的信息。

引言

在Web开发和数据抓取中,经常需要从HTML文档中提取有用的信息。虽然有许多库(如BeautifulSoup)可以简化这一过程,但有时我们可能需要更灵活或更轻量级的解决方案。正则表达式提供了一种强大的方式来匹配和提取文本模式。

环境准备

首先,确保你的Python环境中已经安装了re模块。这是Python的标准库之一,用于处理正则表达式。

读取HTML文件

我们从一个名为top250.html的文件开始,假设这个文件包含了电影排名的HTML内容。

import re  f = open('top250.html', mode="r", encoding="utf-8") content = f.read() f.close() 

正则表达式的应用

编译正则表达式

为了提高效率,我们首先编译一个正则表达式,用于匹配

  • 标签内的所有内容。

    obj_li = re.compile(r"
  • (?P
  • .*?)
  • ", re.S)

    这里使用了re.S标志,它使得.匹配包括换行符在内的任何字符。

    分解提取每一项内容

    接下来,我们定义多个正则表达式,分别用于提取排名、名称、导演和主演的信息。

    obj_rank = re.compile(r'(?P.*?)') obj_title = re.compile(r'(?P.*?)</span>') obj_dao = re.compile(r'导演: (?P<dao>.*?) ') obj_zhu = re.compile(r'主演: (?P<zhu>.*?)<br>') obj_zhu_2 = re.compile(r'主演: (?P<zhu>.*?)<p>') </code></pre> <h4>迭代提取每一项数据</h4><p>我们使用<code>finditer</code>方法迭代匹配到的每个<code><li></code>标签,并使用定义好的正则表达式提取相关信息。</p> <pre><code class="prism language-python">li_iter = obj_li.finditer(content) for li in li_iter:     li_code = li.group("li")     rank = obj_rank.search(li_code).group("rank")     title = obj_title.search(li_code).group("title")     dao = obj_dao.search(li_code).group("dao")      zhu1 = obj_zhu.search(li_code)     if zhu1:         zhu = zhu1.group("zhu")     else:         zhu2 = obj_zhu_2.search(li_code)         if zhu2:             zhu = zhu2.group("zhu")         else:             zhu = ""      print(rank, title, zhu) </code></pre> <h3>处理特殊情况</h3><p>在实际应用中,HTML的结构可能会有所不同。为了应对这种情况,我们提供了多个正则表达式来匹配不同的格式。例如,主演信息可能在不同的标签中显示。</p><h3>总结</h3><p>通过使用正则表达式,我们可以灵活地从HTML文档中提取所需的数据。尽管这种方法在某些情况下可能不如使用专门的HTML解析库(如BeautifulSoup)直观,但它提供了一种快速、灵活且不依赖外部库的解决方案。</p><h3>进一步的思考</h3><p>虽然正则表达式在许多情况下非常有效,但它们也有一些局限性。例如,正则表达式不擅长处理嵌套的HTML标签。在这种情况下,使用HTML解析库可能是更好的选择。此外,正则表达式的性能也可能受到复杂度的影响,因此在处理大量数据时需要谨慎。</p><p>希望本文能够帮助你更好地理解和应用正则表达式在Python中的高级应用。如果你有任何问题或需要进一步的帮助,请随时与我联系。让我们一起探索Python编程的更多可能性!</p><link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-f23dff6052.css" rel="stylesheet"><link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-c216769e99.css" rel="stylesheet">                <!--end::Text-->
                </div>
                <!--end::Description-->
                <div class="mt-5">
                    <!--关键词搜索-->
                                </div>
                <div class="mt-5">
                    <p class="fc-show-prev-next">
                        <strong>上一篇:</strong><a href="/kaifa/616455.html">6分钟了解!(五喜休闲)外挂辅助器插件!(透视)详细教程(2022已更新)(哔哩哔哩)</a><br>
                    </p>
                    <p class="fc-show-prev-next">
                        <strong>下一篇:</strong><a href="/kaifa/616460.html">7分钟了解!wepoke软件透明挂辅助神器,微扑克真的有挂存在的(有挂存在)-哔哩哔哩</a>                </p>
                </div>
                <!--begin::Block-->
                <div class="d-flex flex-stack mb-2 mt-10">
                    <!--begin::Title-->
                    <h3 class="text-dark fs-5 fw-bold text-gray-800">相关内容</h3>
                    <!--end::Title-->
                </div>
                <div class="separator separator-dashed mb-9"></div>
                <!--end::Block-->
                <div class="row g-10">
                   
    
                </div>
    
    
            </div>
            <!--end::Table widget 14-->
        </div>
        <!--end::Col-->
    
        <!--begin::Col-->
        <div class="col-xl-4 mt-0">
            <!--begin::Chart Widget 35-->
            <div class="card card-flush h-md-100">
                <!--begin::Header-->
                <div class="card-header pt-5 ">
                    <!--begin::Title-->
                    <h3 class="card-title align-items-start flex-column">
                        <!--begin::Statistics-->
                        <div class="d-flex align-items-center mb-2">
                            <!--begin::Currency-->
                            <span class="fs-5 fw-bold text-gray-800 ">热门资讯</span>
                            <!--end::Currency-->
                        </div>
                        <!--end::Statistics-->
                    </h3>
                    <!--end::Title-->
                </div>
                <!--end::Header-->
                <!--begin::Body-->
                <div class="card-body pt-3">
    
                                    <!--begin::Item-->
                    <div class="d-flex flex-stack mb-7">
                        <!--begin::Symbol-->
                        <div class="symbol symbol-60px symbol-2by3 me-4">
                            <div class="symbol-label" style="background-image: url('https://img2.pic99.top/ypkjmy/202411/063de7042079bb0.jpg')"></div>
                        </div>
                        <!--end::Symbol-->
                        <!--begin::Title-->
                        <div class="m-0">
                            <a href="/kaifa/3519719.html" class="text-dark fw-bold text-hover-primary fs-6">终于清楚辅助!七七娱乐辅助AI...</a>
                            <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">终于清楚辅助!七七娱乐辅助AI插件,七七娱乐多功能一直真的有辅助插件1、完成七七娱乐有辅助插件,帮助...</span>
                        </div>
                        <!--end::Title-->
                    </div>
                                    <!--begin::Item-->
                    <div class="d-flex flex-stack mb-7">
                        <!--begin::Symbol-->
                        <div class="symbol symbol-60px symbol-2by3 me-4">
                            <div class="symbol-label" style="background-image: url('https://img2.pic99.top/ypkjmy/202412/5e1c664c59fea44.jpg')"></div>
                        </div>
                        <!--end::Symbol-->
                        <!--begin::Title-->
                        <div class="m-0">
                            <a href="/kaifa/3519715.html" class="text-dark fw-bold text-hover-primary fs-6">一秒答解外挂!天天卡五星外挂A...</a>
                            <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">一秒答解外挂!天天卡五星外挂AI攻略,天天卡五星多功能本来真的是有外挂攻略1、操作简单,无需天天卡五...</span>
                        </div>
                        <!--end::Title-->
                    </div>
                                    <!--begin::Item-->
                    <div class="d-flex flex-stack mb-7">
                        <!--begin::Symbol-->
                        <div class="symbol symbol-60px symbol-2by3 me-4">
                            <div class="symbol-label" style="background-image: url('/uploadfile/202509/f59a18013c5fcfd.jpg')"></div>
                        </div>
                        <!--end::Symbol-->
                        <!--begin::Title-->
                        <div class="m-0">
                            <a href="/kaifa/3519711.html" class="text-dark fw-bold text-hover-primary fs-6">玩家必备教程辅助器!心悦辽宁麻...</a>
                            <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">玩家必备教程辅助器!心悦辽宁麻将辅助器AIapp,心悦辽宁麻将多功能一直存在有辅助器app所有人都在...</span>
                        </div>
                        <!--end::Title-->
                    </div>
                                    <!--begin::Item-->
                    <div class="d-flex flex-stack mb-7">
                        <!--begin::Symbol-->
                        <div class="symbol symbol-60px symbol-2by3 me-4">
                            <div class="symbol-label" style="background-image: url('https://img2.pic99.top/ypkjmy/202411/e7454104204e14b.jpg')"></div>
                        </div>
                        <!--end::Symbol-->
                        <!--begin::Title-->
                        <div class="m-0">
                            <a href="/kaifa/3519707.html" class="text-dark fw-bold text-hover-primary fs-6">重大来袭辅助器!残局斗地主辅助...</a>
                            <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">重大来袭辅助器!残局斗地主辅助器AI插件,残局斗地主多功能确实是有辅助器插件1、起透看视 残局斗地主...</span>
                        </div>
                        <!--end::Title-->
                    </div>
                                    <!--begin::Item-->
                    <div class="d-flex flex-stack mb-7">
                        <!--begin::Symbol-->
                        <div class="symbol symbol-60px symbol-2by3 me-4">
                            <div class="symbol-label" style="background-image: url('/uploadfile/202509/338ddff0c4bb192.jpg')"></div>
                        </div>
                        <!--end::Symbol-->
                        <!--begin::Title-->
                        <div class="m-0">
                            <a href="/kaifa/3519703.html" class="text-dark fw-bold text-hover-primary fs-6">盘点十款辅助!小熊猫麻将辅助A...</a>
                            <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">盘点十款辅助!小熊猫麻将辅助AI脚本,小熊猫麻将多功能果然是真的有辅助脚本小熊猫麻将脚本下载中分为三...</span>
                        </div>
                        <!--end::Title-->
                    </div>
                                    <!--begin::Item-->
                    <div class="d-flex flex-stack mb-7">
                        <!--begin::Symbol-->
                        <div class="symbol symbol-60px symbol-2by3 me-4">
                            <div class="symbol-label" style="background-image: url('https://img2.pic99.top/ypkjmy/202412/5e1c664c59fea44.jpg')"></div>
                        </div>
                        <!--end::Symbol-->
                        <!--begin::Title-->
                        <div class="m-0">
                            <a href="/kaifa/3519699.html" class="text-dark fw-bold text-hover-primary fs-6">必看攻略辅助!创乐缘辅助AI技...</a>
                            <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">必看攻略辅助!创乐缘辅助AI技巧,创乐缘多功能原来真的有辅助技巧1、起透看视 创乐缘辅助软件价格2、...</span>
                        </div>
                        <!--end::Title-->
                    </div>
                                    <!--begin::Item-->
                    <div class="d-flex flex-stack mb-7">
                        <!--begin::Symbol-->
                        <div class="symbol symbol-60px symbol-2by3 me-4">
                            <div class="symbol-label" style="background-image: url('https://img2.pic99.top/ypkjmy/202412/5e1c664c59fea44.jpg')"></div>
                        </div>
                        <!--end::Symbol-->
                        <!--begin::Title-->
                        <div class="m-0">
                            <a href="/kaifa/3519695.html" class="text-dark fw-bold text-hover-primary fs-6">重大通报透视挂!熊猫互娱透视挂...</a>
                            <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">重大通报透视挂!熊猫互娱透视挂AI插件,熊猫互娱多功能竟然有透视挂插件1、让任何用户在无需熊猫互娱安...</span>
                        </div>
                        <!--end::Title-->
                    </div>
                                    <!--begin::Item-->
                    <div class="d-flex flex-stack mb-7">
                        <!--begin::Symbol-->
                        <div class="symbol symbol-60px symbol-2by3 me-4">
                            <div class="symbol-label" style="background-image: url('https://img2.pic99.top/ypkjmy/202412/5e1c664c59fea44.jpg')"></div>
                        </div>
                        <!--end::Symbol-->
                        <!--begin::Title-->
                        <div class="m-0">
                            <a href="/kaifa/3519691.html" class="text-dark fw-bold text-hover-primary fs-6">程序员教你辅助器!联众娱乐辅助...</a>
                            <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">程序员教你辅助器!联众娱乐辅助器AI技巧,联众娱乐多功能一贯有辅助器技巧1、联众娱乐免费辅助多个强度...</span>
                        </div>
                        <!--end::Title-->
                    </div>
                                    <!--begin::Item-->
                    <div class="d-flex flex-stack mb-7">
                        <!--begin::Symbol-->
                        <div class="symbol symbol-60px symbol-2by3 me-4">
                            <div class="symbol-label" style="background-image: url('/uploadfile/202508/d77859926789b9.jpg')"></div>
                        </div>
                        <!--end::Symbol-->
                        <!--begin::Title-->
                        <div class="m-0">
                            <a href="/kaifa/3519687.html" class="text-dark fw-bold text-hover-primary fs-6">科普分享作弊器!推筒子作弊器A...</a>
                            <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">科普分享作弊器!推筒子作弊器AI插件,推筒子多功能原来是有作弊器插件所有人都在同一条线上,像星星一样...</span>
                        </div>
                        <!--end::Title-->
                    </div>
                                    <!--begin::Item-->
                    <div class="d-flex flex-stack mb-7">
                        <!--begin::Symbol-->
                        <div class="symbol symbol-60px symbol-2by3 me-4">
                            <div class="symbol-label" style="background-image: url('https://img2.pic99.top/ypkjmy/202412/5e1c664c59fea44.jpg')"></div>
                        </div>
                        <!--end::Symbol-->
                        <!--begin::Title-->
                        <div class="m-0">
                            <a href="/kaifa/3519683.html" class="text-dark fw-bold text-hover-primary fs-6">一分钟揭秘开挂!牛大亨开挂AI...</a>
                            <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">一分钟揭秘开挂!牛大亨开挂AI攻略,牛大亨多功能真是真的有开挂攻略1、牛大亨透视辅助软件激活码多个强...</span>
                        </div>
                        <!--end::Title-->
                    </div>
                    
                </div>
                <!--end::Body-->
            </div>
            <!--end::Chart Widget 35-->
        </div>
        <!--end::Col-->
    </div>
    
    
    
    </div>
    <!--end::Content container-->
    </div>
    <!--end::Content-->
    </div>
    <!--end::Content wrapper-->
    <!--begin::Footer-->
    <div id="kt_app_footer" class="app-footer">
        <!--begin::Footer container-->
        <div class="app-container container-xxl d-flex flex-column flex-md-row flex-center flex-md-stack py-3">
            <!--begin::Copyright-->
            <div class="text-dark order-2 order-md-1">
                <span class="text-muted fw-semibold me-1">2026 ©</span>
                一品科技<a href="http://www.mj938.cn/">民间生活网</a><a href="http://code.shayuweb.com/">鲨鱼编程</a>        </div>
            <!--end::Copyright-->
            <!--begin::Menu-->
            <ul class="menu menu-gray-600 menu-hover-primary fw-semibold order-1">
                            <li class="menu-item">
                    <a href="/news/" target="_blank" class="menu-link px-2">科技资讯</a>
                </li>
                            <li class="menu-item">
                    <a href="/kaifa/" target="_blank" class="menu-link px-2">开发测试</a>
                </li>
                            <li class="menu-item">
                    <a href="/jishu/" target="_blank" class="menu-link px-2">技术分享</a>
                </li>
                            <li class="menu-item">
                    <a href="/zhishi/" target="_blank" class="menu-link px-2">知识问答</a>
                </li>
                        </ul>
            <!--end::Menu-->
        </div>
        <!--end::Footer container-->
    </div>
    <!--end::Footer-->
    </div>
    <!--end:::Main-->
    </div>
    <!--end::Wrapper-->
    </div>
    <!--end::Page-->
    </div>
    <!--end::App-->
    <div id="kt_scrolltop" class="scrolltop" data-kt-scrolltop="true">
        <!--begin::Svg Icon | path: icons/duotune/arrows/arr066.svg-->
        <span class="svg-icon">
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                <rect opacity="0.5" x="13" y="6" width="13" height="2" rx="1" transform="rotate(90 13 6)" fill="currentColor"></rect>
                <path d="M12.5657 8.56569L16.75 12.75C17.1642 13.1642 17.8358 13.1642 18.25 12.75C18.6642 12.3358 18.6642 11.6642 18.25 11.25L12.7071 5.70711C12.3166 5.31658 11.6834 5.31658 11.2929 5.70711L5.75 11.25C5.33579 11.6642 5.33579 12.3358 5.75 12.75C6.16421 13.1642 6.83579 13.1642 7.25 12.75L11.4343 8.56569C11.7467 8.25327 12.2533 8.25327 12.5657 8.56569Z" fill="currentColor"></path>
            </svg>
        </span>
        <!--end::Svg Icon-->
    </div>
    <!--begin::Javascript-->
    <script>var hostUrl = "/static/default/pc/";</script>
    <!--begin::Global Javascript Bundle(mandatory for all pages)-->
    <script src="/static/default/pc/plugins/global/plugins.bundle.js"></script>
    <script src="/static/default/pc/js/scripts.bundle.js"></script>
    <!--end::Global Javascript Bundle-->
    
    <!--end::Javascript-->
    </body>
    <!--end::Body-->
    </html>