在python中使用BeautifulSoup提取html标记之间的数据

2024-10-01 09:20:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想提取html标记“title”和“meta”标记之间的数据,我要提取URL属性的值,以及“?”前面的文本。在

<html lang="en" id="facebook" class="no_js">
<head>
    <meta charset="utf-8" />
    <script>
        function envFlush(a) {function b(c){for(var d in)c[d]=a[d];}if(window.requireLazy){window.requireLazy(['Env'],b);}else{window.Env=window.Env||{};b(window.Env);}}envFlush({"ajaxpipe_token":"AXjbmsNXDxPlvhrf","lhsh":"4AQFQfqrV","khsh":"0`sj`e`rm`s-0fdu^gshdoer-0gc^eurf-3gc^eurf;1;enbtldou;fduDmdldourCxO`ld-2YLMIuuqSdptdru;qsnunuxqd;rdoe"});
    </script>
    <script>CavalryLogger=false;</script>
    <noscript>
        <meta http-equiv="refresh" content="0; URL=/notes/kursus-belajar-bahasa-inggris/bahasa-inggris-siapa-takut-/685004288208871?_fb_noscript=1" />
    </noscript>
    <meta name="referrer" content="default" id="meta_referrer" />
    <title id="pageTitle">
        &quot; CARA CEPAT BELAJAR BAHASA INGGRIS MUDAH DAN MENYENANGKAN &quot;
    </title>
    <link rel="shortcut icon" href="https://fbstatic-a.akamaihd.net/rsrc.php/yl/r/H3nktOa7ZMg.ico" />

即CARA CEPAT BELAJAR BAHASA INGGRIS MUDAH DAN MENYENANGKAN和685004288208871。在

我尝试了以下代码:

^{pr2}$

输出是

[u'" CARA CEPAT BELAJAR BAHASA INGGRIS MUDAH DAN MENYENANGKAN "']

在这里我不想要字符'[]'、'u'和单引号。在

此外,在实施以下方面:

>>> soup.meta.contents

我得到的o/p为:

[]

请帮我这个忙。我是新来美容的。在


Tags: envidtitlescriptwindowmetadanbahasa
2条回答

漂亮的Soup对象的^{}方法返回一个列表。在本例中,它只有一个元素,即Unicode字符串。你应该发现你想要的表达式实际上是

>>> soup.title.contents[0]

注意,单引号的出现只是因为您要求交互式解释器显示一个字符串值。你会发现的

^{pr2}$

显示器

" CARA CEPAT BELAJAR BAHASA INGGRIS MUDAH DAN MENYENANGKAN "

这实际上就是标题标签的内容。您将看到Beautiful Soup已将&quot;HTML实体转换为所需的双引号字符。若要丢失可以使用的引号和相邻空格

soup.title.contents[0][2:-2]

meta标签有点诡计多端。我假设只有一个<meta>标记具有http-equiv属性,其值为"refresh", so the retrieval returns a list of one element。您可以这样检索该元素:

>>> meta = soup.findAll("meta", {"http-equiv": "refresh"})[0]
>>> meta
<meta content="0; URL=/notes/kursus-belajar-bahasa-inggris/bahasa-inggris-siapa-takut-/685004288208871?_fb_noscript=1" http-equiv="refresh"/>

请注意,meta不是一个字符串,而是一个soup元素:

>>> type(meta)
<class 'bs4.element.Tag'>

可以像Python dicts一样使用索引来检索soup元素的属性,因此可以获得content属性的值,如下所示:

>>> content = meta["content"]
>>> content
u'0; URL=/notes/kursus-belajar-bahasa-inggris/bahasa-inggris-siapa-takut-/685004288208871?_fb_noscript=1'

为了提取URL值,可以只需查找第一个等号并获取字符串的其余部分。我更喜欢使用一种更规范的方法,在分号处拆分,然后在等号(只有一个)上拆分右侧元素。在

>>> url = content.split(";")[1].split("=", 1)[1]
>>> url
u'/notes/kursus-belajar-bahasa-inggris/bahasa-inggris-siapa-takut-/685004288208871?_fb_noscript=1'

要从meta标记的url中获取子字符串,您需要使用一些正则表达式。你可以试试这个 soup = BeautifulSoup(<your html string>) meta_url = soup.noscript.meta['content'] url = re.search('\-\/(.*)\?', meta_url).group(1) print url print soup.title.text

希望上面的代码能解决您的问题。在

相关问题 更多 >