2015-02-08 89 views
1

我试图创建一个python函数,它接受一个youtube url视频链接,并返回描述(如果存在)作为一个字符串,并将所有非ascii字符替换为一个空格。尽管如此,我仍然遇到了一些麻烦。使用BeautifulSoup获取youtube描述?

任何人都有任何想法。我认为<p id="eow-description" ></p>被用于所有视频来保存说明,但我无法弄清楚如何让它返回整个字符串,格式化了我们如何看待它,而不是如何在页面源中格式化。

我正在使用这两个视频来测试它是否带有说明。
https://www.youtube.com/watch?v=9bZkp7q19f0
https://www.youtube.com/watch?v=eHvccEXfacM

video_source = requests.get("https://www.youtube.com/watch?v=9bZkp7q19f0") 
parsed_soup = BeautifulSoup(video_source.content) 
print parsed_soup.find_all("p", {"id": "eow-description"})[0] 

我不知道如何去有关格式化为一个字符串。

+0

u能告诉我们你的代码这么远? – 2015-02-08 10:32:38

+0

您是否考虑过使用[YouTube数据API](https://developers.google.com/youtube/v3/docs/videos)?它允许您使用'/ list'端点一次获得多个视频的信息,并且返回的信息包含描述。 – 2015-02-08 10:32:48

+0

否则,请向我们展示您的实际代码,也许您有错误? – 2015-02-08 10:33:07

回答

3

你会好得多使用YouTube Data API,有list端点会返回详细信息一或者每个API调用更多ID

抓住一个API密钥(请参阅instructions,对于您的计算机上的脚本使用服务器API密钥)和Python client libraries;安装这些与pip install --upgrade google-api-python-client

那么清单描述可以用做:

from apiclient.discovery import build 

DEVELOPER_KEY = '<API key provided by Google>' 
youtube = build('youtube', 'v3', developerKey=DEVELOPER_KEY) 

ids = '9bZkp7q19f0,eHvccEXfacM' 
results = youtube.videos().list(id=ids, part='snippet').execute() 
for result in results.get('items', []): 
    print result['id'] 
    print result['snippet']['description'] 
    print '-----' 

演示:

>>> from apiclient.discovery import build 
>>> DEVELOPER_KEY = '<get your own key here>' 
>>> youtube = build('youtube', 'v3', developerKey=DEVELOPER_KEY) 
>>> ids = '9bZkp7q19f0,eHvccEXfacM' 
>>> results = youtube.videos().list(id=ids, part='snippet').execute() 
>>> for result in results.get('items', []): 
...  print result['id'] 
...  print result['snippet']['description'] 
...  print '-----' 
... 
9bZkp7q19f0 
▶ Watch HANGOVER feat. Snoop Dogg M/V @ 
http://youtu.be/HkMNOlYcpHg 

PSY - Gangnam Style (강남스타일) 
▶ Available on iTunes: http://Smarturl.it/psygangnam 
▶ Official PSY Online Store US & International : http://psy.shop.bravadousa.com/ 
▶ About PSY from YG Ent.: http://smarturl.it/YGfamilyAboutPSY 
▶ PSY's Products on eBay: http://stores.ebay.com/ygentertainment 
▶ YG-eShop: http://www.ygeshop.com 

For More Information @ 
http://www.facebook.com/officialpsy 
http://twitter.com/psy_oppa 
http://twitter.com/ygent_official 
http://me2day.net/psyfive 
http://www.psypark.com 
App Store: http://goo.gl/l9TU6 
Google Play: http://goo.gl/UiEn1 

© YG Entertainment Inc. All rights reserved. 
----- 
eHvccEXfacM 

----- 
+0

对于链接的说明中的步骤5,我该怎么做? – Johnny 2015-02-08 11:19:04

+0

@Johnny使用API​​密钥;我的代码将其命名为“DEVELOPER_KEY”。 – 2015-02-08 11:58:48

+1

@约翰尼:对不起;我已经有一个API密钥,并且很久以前忘记了有不同的类型。我会为脚本使用服务器API密钥。 – 2015-02-08 12:23:34

1

Beautifulsoup很慢,最好的方法是使用Google's YouTube API正如评论中所建议的。这是简单得多:

def PrintEntryDetails(entry): 
    print 'Video description: %s' % entry.media.description.text 

不是你想要的,让我知道