我可以解析一个看起来像这样的文件:
<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个网址
由于
答案 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])
......但也许我误解了你?