在python中浏览列表并获取数据

时间:2017-03-26 09:10:52

标签: python html api youtube

我希望在Youtube上获得一系列关于具体主题的视频总观看次数。

我有这段代码,但它不起作用,因为我没有从列表中获取正确的数据"视频"。如何浏览此列表并获取完整列表的总视图?

#!/usr/bin/python

import urllib2

from apiclient.discovery import build
from apiclient.errors import HttpError
from oauth2client.tools import argparser


# Set DEVELOPER_KEY to the API key value from the APIs & auth > Registered apps
# tab of
#   https://cloud.google.com/console
# Please ensure that you have enabled the YouTube Data API for your project.
DEVELOPER_KEY = "AIzaSyB..........I"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"

def youtube_search(options):
  youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,
    developerKey=DEVELOPER_KEY)

  # Call the search.list method to retrieve results matching the specified
  # query term.
  search_response = youtube.search().list(
    q=options.q,
    part="id,snippet",
    maxResults=options.max_results
  ).execute()

  videos = []
  channels = []
  playlists = []

  # Add each result to the appropriate list, and then display the lists of
  # matching videos, channels, and playlists.
  for search_result in search_response.get("items", []):
    if search_result["id"]["kind"] == "youtube#video":
      videos.append("%s (%s)" % (search_result["snippet"]["title"],
                                 search_result["id"]["videoId"]))
    elif search_result["id"]["kind"] == "youtube#channel":
      channels.append("%s (%s)" % (search_result["snippet"]["title"],
                                   search_result["id"]["channelId"]))
    elif search_result["id"]["kind"] == "youtube#playlist":
      playlists.append("%s (%s)" % (search_result["snippet"]["title"],
                                    search_result["id"]["playlistId"]))

  print "Videos:\n", "\n".join(videos), "\n"
  ###################################
  ###################################
  ###HERE IS THE PROBLEM##########
  ###################################
  for video in videos:
    source = video
    response = urllib2.urlopen(source)
    html = response.read() #Done, you have the whole HTML file in a gigantic string

    wordBreak = ['<','>']  
    html = list(html)
    i = 0
    while i < len(html):
      if html[i] in wordBreak:
          html[i] = ' '
      i += 1

    #The block above is just to make the html.split() easier.

    html = ''.join(html)
    html = html.split()
    dataSwitch = False
    numOfViews = ''
    for element in html:
      if element == '/div':
        dataSwitch = False
      if dataSwitch:
        numOfViews += str(element)
      if element == 'class="watch-view-count"':
        dataSwitch = True

    print (numOfViews)
  ########################################
  ########################################
  #######################################

  print "Channels:\n", "\n".join(channels), "\n"
  print "Playlists:\n", "\n".join(playlists), "\n"


if __name__ == "__main__":
  argparser.add_argument("--q", help="Search term", default="la la land")
  argparser.add_argument("--max-results", help="Max results", default=25)
  args = argparser.parse_args()

  try:
    youtube_search(args)
  except HttpError, e:
    print "An HTTP error %d occurred:\n%s" % (e.resp.status, e.content)

0 个答案:

没有答案