2011-12-07 68 views
0

我可以分析,看起来像一个文件:创建列表在Python

<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,但URL列表,当我做,它说我只有1个网址。

感谢

回答

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]) 

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

+0

就是这样!我仍然开始,这真的很有帮助谢谢。不知道我是否应该在这里发布这个,但是当我做出这个改变时,我现在得到一个不同的错误。 –

+0

@DavidNeudorfer - 新错误是什么? – mac

+0

我已经开始了一个新的问题[这里](http://stackoverflow.com/questions/8422302/python-youtube-gdata-api-broken-after-small-change)谢谢@mac –