Создание списков в Python - PullRequest
0 голосов
/ 08 декабря 2011

Я могу разобрать файл, который выглядит так:

<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 выдает мне список URL-адресов, которые, как я думал, я могу просто извлечь из идентификатора видео с использованием существующего кода и urls = soup, но когда я это делаю, он говорит, что у меня только 1 URL-адрес.

Спасибо

1 Ответ

2 голосов
/ 08 декабря 2011

Ваш вопрос - как он есть - довольно озадачивает: beautifulsoup используется для анализа деревьев XML, но вы, кажется, пытаетесь вместо этого проанализировать простой текстовый файл?

Если это так, предполагая, что файл имеет один URL на строку, вам просто нужно загрузить его построчно и назначить его содержимое 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])

... но, может быть, я вас неправильно понимаю?

...