在Python中创建列表

时间:2011-12-07 20:05:36

标签: python list youtube youtube-api beautifulsoup

我可以解析一个看起来像这样的文件:

<a href="http://www.youtube.com/watch?v=DpQNMBzwShs"></a>

但是当我给它时:

http://www.youtube.com/watch?v=DpQNMBzwShs

错误。

如何将soup转换为完全跳过# extract youtube video urls进程的列表,这是我认为我需要做的?

# parse bookmarks.html
with open(sys.argv[1]) as bookmark_file:
    soup = BeautifulSoup(bookmark_file.read())

# extract youtube video urls
video_url_regex = re.compile('http://www.youtube.com/watch')
urls = [link['href'] for link in soup('a', href=video_url_regex)]

# extract video ids from the urls
ids = []
for video_url in urls:
    url = urlparse.urlparse(video_url)
    video_id = urlparse.parse_qs(url.query).get('v')
    if not video_id: continue # no video_id in the url
    ids.append(video_id[0])

当我print soup它给了我一个网址列表,我认为我可以使用现有代码和urls = soup提取视频ID,但是当我这样做时它说我只有1个网址

由于

1 个答案:

答案 0 :(得分:2)

您的问题 - 实际上 - 非常令人费解:beautifulsoup用于解析XML树,但您似乎正在尝试解析一个简单的文本文件?

如果是这种情况,假设文件每行有一个网址,您只需逐行加载并将其内容分配给urls

urls = open('<your-filename-here>').readlines()

然后你可以简单地使用你已经拥有的循环:

# extract video ids from the urls
ids = []
for video_url in urls:
    url = urlparse.urlparse(video_url)
    video_id = urlparse.parse_qs(url.query).get('v')
    if not video_id: continue # no video_id in the url
    ids.append(video_id[0])

......但也许我误解了你?