2016-04-21 15 views
12

Sto cercando di usare Python e bella zuppa per estrarre la parte dei contenuti dei tag qui sotto:Get meta proprietà content tag con BeautifulSoup e Python

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

che sto ricevendo BeautifulSoup per caricare la pagina proprio bene e trova altre cose (questo prende anche l'id dell'articolo dal tag id nascosto nel sorgente), ma non conosco il modo corretto di cercare l'html e trovare questi bit, ho provato le varianti di find e findAll senza successo . I itera codice oltre un elenco di URL attualmente ...

#!/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) 

Se qualcuno mi può aiutare a ordinare il bit per trovare il og: titolo e og: contenuti che sarebbero stati fantastici!

risposta

11

fornire il nome meta tag come primo argomento a find(). Quindi, utilizzare argomenti a parola chiave per controllare gli attributi specifici:

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") 

I if/else controlli qui sarebbe facoltativa se si sa che le proprietà titolo e l'URL meta sarebbero sempre presente.

+0

non c'è un built-in per i contenuti get, altro ripiego per impostazione predefinita? –

+0

@ChristopheRoussy yup, questo è esattamente ciò che viene mostrato nella risposta. Inoltre, puoi rafforzare la presenza dell'attributo 'content' usando' soup.find ("meta", property = "og: title", content = True) '. Grazie. – alecxe

1

provare questo:

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

Posso chiedere una domanda di follow-up?

Sto cercando di ottenere <meta name='keywords' content=''></> con bs4, ma invece ottenere il risultato di una riga ottengo l'intero meta blocco. Sai perché?

analizzato sito: blocco https://www.bilibili.com/video/av6862467/#page=4

Obiettivo:

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

Codice:

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