【问题标题】:Python 3 BeautifulSoup with regex returns None带有正则表达式的 Python 3 BeautifulSoup 返回无
【发布时间】:2020-11-22 04:08:50
【问题描述】:

我无法使用正则表达式让 BeautifulSoup 正常工作。我已经测试了正则表达式,它似乎可以工作,但 BeautifulSoup 仍然返回 None。

我要查找的代码示例

body class="page-template-default page page-id-1864

我的代码:

 element = soup.find(text=re.compile(r"((body class).*.(page-id-\d+))"))

我也尝试了以下,它仍然返回 None

element = soup.find(text=re.compile(r"(body class)"))

我可以确认该部分是response.content的一部分

【问题讨论】:

  • 页面可能是动态加载的,请分享网址
  • 我认为这不是问题,因为内容在 response.content 中。我想获得的内容可以在任何 Wordpress 网站上找到。例如crimestoppervic.com.au
  • text= 搜索特定文本。你确定这就是你想要的吗?
  • 是的。我想将文本从正文类获取到页面 ID(根据正则表达式)
  • 这里会发生什么?

标签: python-3.x regex beautifulsoup


【解决方案1】:

你可以试试这个:

from bs4 import BeautifulSoup
    
data = """
    <body class="home page-template-default page page-id-10 original wpb-js-composer js-comp-ver-6.4.1 vc_responsive" data-footer-reveal="false" data-footer-reveal-shadow="none" data-header-format="default" data-body-border="off" data-boxed-style="" data-header-breakpoint="1000" data-dropdown-style="minimal" data-cae="linear" data-cad="650" data-megamenu-width="contained" data-aie="none" data-ls="none" data-apte="standard" data-hhun="0" data-fancy-form-rcs="default" data-form-style="default" data-form-submit="default" data-is="minimal" data-button-style="default" data-user-account-button="false" data-flex-cols="true" data-col-gap="default" data-header-inherit-rc="false" data-header-search="false" data-animated-anchors="false" data-ajax-transitions="false" data-full-width-header="false" data-slide-out-widget-area="true" data-slide-out-widget-area-style="slide-out-from-right" data-user-set-ocm="off" data-loading-animation="none" data-bg-header="false" data-responsive="1" data-ext-responsive="true" data-header-resize="1" data-header-color="custom" data-transparent-header="false" data-cart="false" data-remove-m-parallax="" data-remove-m-video-bgs="" data-m-animate="0" data-force-header-trans-color="light" data-smooth-scrolling="0" data-permanent-transparent="false" cz-shortcut-listen="true">...</body>
"""
soup = BeautifulSoup(data, "html.parser")

找到body并得到它的class,切片得到前4个类:

classText = soup.find('body').attrs['class'][:4]

list 转换为stringslice 最后一个字符:

' '.join(map(str, classText))[:-2]

输出:

'home page-template-default page page-id-'

不是防弹的,但有那么一点上下文。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    相关资源
    最近更新 更多