我想在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">
" CARA CEPAT BELAJAR BAHASA INGGRIS MUDAH DAN MENYENANGKAN "
</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.
我尝试了以下代码:
>>> soup.title.contents
输出
[u'" CARA CEPAT BELAJAR BAHASA INGGRIS MUDAH DAN MENYENANGKAN "']
在这里我不想要字符'[]','u'和单引号。
此外,在实施以下内容时:
>>> soup.meta.contents
我得到o / p为:
[]
请帮帮我。我是BeautifulSoup的新手。
答案 0 :(得分:2)
Beautiful Soup对象的.contents()
方法返回一个列表。在这种情况下,它只有一个元素,即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", 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不是字符串而是汤元素:
>>> type(meta)
<class 'bs4.element.Tag'>
您可以使用索引来检索汤元素的属性,就像Python dicts一样,因此您可以获得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'
答案 1 :(得分:1)
要从元标记的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
希望上面的代码可以解决您的问题。