2015-02-08 2 views
1

Я пытаюсь создать функцию python, которая принимает ссылку на url urtube и возвращает описание (если оно существует) в виде строки со всеми символами, отличными от ascii, замененными пробелом. У меня есть некоторые проблемы с тем, чтобы заставить его работать.Используйте BeautifulSoup, чтобы получить описание youtube?

У кого-нибудь есть идеи. Я думаю, что <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] 

Я не знаю, как идти о форматировании, что в строку.

+0

Может у показать нам свой код до сих пор? –

+0

Считаете ли вы использование [API данных YouTube] (https://developers.google.com/youtube/v3/docs/videos)? Он позволяет вам получать информацию о нескольких видео одновременно с конечной точкой '/ list', а возвращаемая информация включает описание. –

+0

В противном случае, пожалуйста, покажите нам свой фактический код, возможно, у вас есть ошибка? –

ответ

3

Вы бы гораздо лучше использовать YouTube Data API, есть list конечная точка, которая будет возвращать подробную информацию для одного или более ids за вызов API.

Возьмите себе ключ 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

+0

@Johnny использует ключ API; мой код называет его 'DEVELOPER_KEY'. –

+1

@ Джонни: извините; У меня уже был ключ API, и я давно забыл, что есть разные типы. Я бы использовал ключ API сервера для сценария. –

1

Beautifulsoup довольно медленный, наилучшим образом использовать Google's YouTube API, как предложено в комментариях. Это гораздо проще:

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

Не то, что вы хотите, дайте мне знать

Смежные вопросы