2016-04-21 1 views
12

Ich versuche, Python und schöne Suppe zu verwenden, um den Inhalt Teil der unten angegebenen Tags zu extrahieren:Get-Meta-Tag Inhalt Eigenschaft mit BeautifulSoup und Python

<meta property="og:title" content="Super Fun Event 1" /> 
<meta property="og:url" content="http://superfunevents.com/events/super-fun-event-1/" /> 

BeautifulSoup Ich erhalte die Seite zu laden, ganz gut und finde andere Sachen (das packt auch die Artikel-ID aus dem ID-Tag, das in der Quelle versteckt ist), aber ich kenne nicht die richtige Art, den HTML-Code zu suchen und diese Bits zu finden. Ich habe Varianten von find und findAll vergeblich versucht . Die Code iteriert über eine Liste von URLs derzeit ...

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

#importing the libraries 
from urllib import urlopen 
from bs4 import BeautifulSoup 

def get_data(page_no): 
    webpage = urlopen('http://superfunevents.com/?p=' + str(i)).read() 
    soup = BeautifulSoup(webpage, "lxml") 
    for tag in soup.find_all("article") : 
     id = tag.get('id') 
     print id 
# the hard part that doesn't work - I know this example is well off the mark!   
    title = soup.find("og:title", "content") 
    print (title.get_text()) 
    url = soup.find("og:url", "content") 
    print (url.get_text()) 
# end of problem 

for i in range (1,100): 
    get_data(i) 

Wenn jemand kann mir das etwas helfen sortieren Sie die og zu finden: Titel und og: Inhalte, die fantastisch sein würde!

Antwort

11

Geben Sie die meta Variablennamen als erstes Argument an find(). Dann verwenden Sie Schlüsselwort-Argumente, die spezifischen Attribute zu überprüfen:

title = soup.find("meta", property="og:title") 
url = soup.find("meta", property="og:url") 

print(title["content"] if title else "No meta title given") 
print(url["content"] if url else "No meta url given") 

Die if/else Kontrollen wären hier optional, wenn Sie wissen, dass die Titel und die URL Metaeigenschaften immer vorhanden sein würden.

+0

ist kein eingebaut für get Inhalt, sonst Rückfall auf Standard? –

+0

@ChristopheRoussy Yup, das ist genau das, was in der Antwort gezeigt wird. Außerdem können Sie das Präsenzattribut "content" mit 'soup.find (" meta ", property =" og: title ", content = True)' verstärken. Vielen Dank. – alecxe

1

versuchen Sie dies:

soup = BeautifulSoup(webpage) 
for tag in soup.find_all("meta"): 
    if tag.get("property", None) == "og:title": 
     print tag.get("content", None) 
    elif tag.get("property", None) == "og:url": 
     print tag.get("content", None) 
0

darf ich eine Nachfolgefrage stellen?

Ich versuche, <meta name='keywords' content=''></> mit bs4 zu bekommen, aber stattdessen das Ergebnis der Zeile 1 bekomme ich den gesamten Meta-Block. Weißt du zufällig warum?

Website Analysierte: https://www.bilibili.com/video/av6862467/#page=4

Zielblock:

<meta name="keywords" content="【SNH48】20161028 原创公演 TeamX《梦想的旗帜》首演 全场 CUT,娱乐,明星,SNH48-TeamX应援会,,哔哩哔哩,Bilibili,B站,弹幕" /> 

Code:

metatags = soup.find_all('meta',attrs={'name':'keywords'})                
for tag in metatags: 
    print(tag)