2016-04-21 13 views
12

Tôi cố gắng để sử dụng python và súp đẹp để trích xuất các phần nội dung của các thẻ bên dưới:Nhận hữu nội dung thẻ meta với BeautifulSoup và Python

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

Tôi nhận được BeautifulSoup để tải trang tốt và tìm các thứ khác (điều này cũng lấy id bài viết từ thẻ id ẩn trong nguồn), nhưng tôi không biết chính xác cách nào để tìm kiếm html và tìm các bit này, tôi đã thử các biến thể tìm và findAll để không có kết quả . Các lặp mã trên một danh sách các url có mặt tại ...

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

Nếu bất cứ ai có thể giúp tôi sắp xếp các bit để tìm ra og: Tiêu đề và og: Nội dung mà muốn được tuyệt vời!

Trả lời

11

Cung cấp tên meta thẻ như là đối số đầu tiên find(). Sau đó, sử dụng đối số từ khóa để kiểm tra các thuộc tính cụ thể:

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

Các if/else kiểm tra ở đây sẽ không bắt buộc nếu bạn biết rằng các thuộc tính tiêu đề và url meta sẽ luôn có mặt.

+0

là không có built-in cho nội dung get, nếu không dự phòng để mặc định? –

+0

@ChristopheRoussy yup, đây chính xác là những gì được hiển thị trong câu trả lời. Ngoài ra, bạn có thể tăng cường sự hiện diện thuộc tính 'content' bằng cách sử dụng' soup.find ("meta", property = "og: title", content = True) '. Cảm ơn. – alecxe

1

thử điều này:

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

tôi có thể hỏi một câu hỏi tiếp theo không?

Tôi đang cố gắng để có được <meta name='keywords' content=''></> với bs4, nhưng thay vào đó nhận được kết quả một dòng tôi nhận được toàn bộ khối meta. Bạn có biết tại sao không?

phân tích phân tại chỗ: https://www.bilibili.com/video/av6862467/#page=4

Target khối:

<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) 
Các vấn đề liên quan