web-dev-qa-db-ja.com

BeautifulSoupおよびPythonでメタタグコンテンツプロパティを取得

私はpythonと美しいスープを使用して、以下のタグのコンテンツ部分を抽出しようとしています:

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

BeautifulSoupにページをうまくロードして他のものを見つけるようにしています(これはソースに隠されているidタグから記事IDを取得します)が、htmlを検索してこれらのビットを見つける正しい方法がわかりません、 findとfindAllのバリエーションを試しましたが、役に立ちませんでした。コードは現在、URLのリストを反復処理します...

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

誰かが私が素晴らしいことだと思うog:titleとog:contentを見つけるためにビットをソートするのを手伝うことができるなら!

26
the_t_test_1

find()の最初の引数としてmetaタグ名を指定します。次に、キーワード引数を使用して特定の属性を確認します。

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

ここでのif/elseチェックは、タイトルおよびurlメタプロパティが常に存在することがわかっている場合はオプションです。

37
alecxe

これを試して :

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)
12
Hackaholic