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

在python中使用BeautifulSoup在html标记之间提取数据,python,html,beautifulsoup,extraction,Python,Html,Beautifulsoup,Extraction,我想提取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

我想提取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" />
输出为

[u'" CARA CEPAT BELAJAR BAHASA INGGRIS MUDAH DAN MENYENANGKAN "']
在这个例子中,我不需要字符“[]”、“u”和单引号

此外,关于实施下列各项:

>>> soup.meta.contents
我得到的o/p为:

[]
请帮我做这个。我是新来的

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

>>> soup.title.contents[0]
请注意,单引号仅出现是因为您要求交互式解释器显示字符串值。你会发现

>>> print(soup.title.contents[0])
显示

" CARA CEPAT BELAJAR BAHASA INGGRIS MUDAH DAN MENYENANGKAN "
这就是标题标签的内容。您将看到Beauty Soup已将
HTML实体转换为所需的双引号字符。若要丢失引号和相邻空格,可以使用

soup.title.contents[0][2:-2]
meta标记有点小把戏。我假设只有一个
标记具有
http equiv
属性,其值为
“refresh”,因此检索返回一个元素的列表。您可以这样检索该元素:

>>> 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"/>
为了提取URL值,您可以只查找第一个等号,然后取字符串的其余部分。我更喜欢使用一种更严格的方法,在分号处拆分,然后在等号上拆分拆分该拆分的右侧元素(仅一个)

>>> url = content.split(";")[1].split("=", 1)[1]
>>> url
u'/notes/kursus-belajar-bahasa-inggris/bahasa-inggris-siapa-takut-/685004288208871?_fb_noscript=1'
Beautiful Soup对象的方法返回一个列表。在本例中,它只有一个元素,即Unicode字符串。您应该发现所需的表达式实际上是

>>> soup.title.contents[0]
请注意,单引号的出现只是因为您要求交互式解释器显示字符串值

>>> print(soup.title.contents[0])
显示

" CARA CEPAT BELAJAR BAHASA INGGRIS MUDAH DAN MENYENANGKAN "
这实际上就是标题标签的内容。您将看到Beautiful Soup已将
HTML实体转换为所需的双引号字符。若要丢失引号和相邻空格,可以使用

soup.title.contents[0][2:-2]
meta标签有点小把戏。我假设只有一个
标记具有
http equiv
属性,其值为
“refresh”,因此检索返回一个元素的列表。您可以这样检索该元素:

>>> 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"/>
为了提取URL值,您可以只查找第一个等号并获取字符串的其余部分。我更喜欢使用一种更严格的方法,在分号处拆分,然后在等号(只有一个)上拆分拆分右边的元素

>>> url = content.split(";")[1].split("=", 1)[1]
>>> url
u'/notes/kursus-belajar-bahasa-inggris/bahasa-inggris-siapa-takut-/685004288208871?_fb_noscript=1'
Beauty Soup对象的方法返回一个列表。在本例中,它只有一个元素,即Unicode字符串。你应该发现你想要的表达式实际上是

>>> soup.title.contents[0]
请注意,单引号仅出现是因为您要求交互式解释器显示字符串值。你会发现

>>> print(soup.title.contents[0])
显示

" CARA CEPAT BELAJAR BAHASA INGGRIS MUDAH DAN MENYENANGKAN "
这就是标题标签的内容。您将看到Beauty Soup已将
HTML实体转换为所需的双引号字符。若要丢失引号和相邻空格,可以使用

soup.title.contents[0][2:-2]
meta标记有点小把戏。我假设只有一个
标记具有
http equiv
属性,其值为
“refresh”,因此检索返回一个元素的列表。您可以这样检索该元素:

>>> 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"/>
为了提取URL值,您可以只查找第一个等号,然后取字符串的其余部分。我更喜欢使用一种更严格的方法,在分号处拆分,然后在等号上拆分拆分该拆分的右侧元素(仅一个)

>>> url = content.split(";")[1].split("=", 1)[1]
>>> url
u'/notes/kursus-belajar-bahasa-inggris/bahasa-inggris-siapa-takut-/685004288208871?_fb_noscript=1'
Beautiful Soup对象的方法返回一个列表。在本例中,它只有一个元素,即Unicode字符串。您应该发现所需的表达式实际上是

>>> soup.title.contents[0]
请注意,单引号的出现只是因为您要求交互式解释器显示字符串值

>>> print(soup.title.contents[0])
显示

" CARA CEPAT BELAJAR BAHASA INGGRIS MUDAH DAN MENYENANGKAN "
这实际上就是标题标签的内容。您将看到Beautiful Soup已将
HTML实体转换为所需的双引号字符。若要丢失引号和相邻空格,可以使用

soup.title.contents[0][2:-2]
meta标签有点小把戏。我假设只有一个
标记具有
http equiv
属性,其值为
“refresh”,因此检索返回一个元素的列表。您可以这样检索该元素:

>>> 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"/>
为了提取URL值,您可以只查找第一个等号并获取字符串的其余部分。我更喜欢使用一种更严格的方法,在分号处拆分,然后在等号(只有一个)上拆分拆分右边的元素

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

要从元标记的url获取子字符串,您需要使用一些正则表达式。我想你可以试试这个

汤=美汤
meta_url=soup.noscript.meta['content']
url=re.search('\-\/(.*)\?',meta\u url)。组(1)
打印url
打印汤.标题.文本


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

要从元标记的url获取子字符串,您需要使用一些正则表达式。我想你可以试试这个

汤=美汤
meta_url=soup.noscript.meta['content']
url=re.search('\-\/(.*)\?',meta\u url)。组(1)
打印url
打印汤.标题.文本


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

要从元标记的url获取子字符串,您需要使用一些正则表达式。我想你可以试试这个

汤=美汤
meta_url=soup.noscript.meta['content']
url=re.search('\-\/(.*)\?',meta\u url)。组(1)
打印url
打印汤.标题.文本


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

从元数据的url获取子字符串