使用BeautifulSoup获取youtube描述?

时间:2015-02-08 10:29:10

标签: python web-scraping beautifulsoup

我正在尝试创建一个python函数,该函数接收youtube url视频链接并将描述(如果存在)作为字符串返回,所有非ascii字符替换为空格。虽然我在使用它时遇到了一些麻烦。

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

我正在使用这2个视频进行测试,无论是否有描述 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]

我不知道如何将其格式化为字符串。

2 个答案:

答案 0 :(得分:3)

使用YouTube Data API会好得多,有一个list端点会返回每个API调用的一个或多个ID 的详细信息。< / p>

获取一个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

-----

答案 1 :(得分:1)

Beautifulsoup非常慢,最好的方法是使用评论中建议的Google's YouTube API。它更简单:

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

不是你想要的,让我知道