Скрипт Python, чтобы наскрести названия плейлиста государственные YouTube


Только начал на Питоне написал скрипт, чтобы получить названия всех титулов в плейлист государственные YouTube приведенный в качестве входных, но это было сложнее, чем могло бы быть.

Я посмотрел вокруг в интернете и нашел HTMLParser, который я использовал для извлечения титров, но у него были проблемы с кодировкой, которые могли бы сделать там иностранные символы в списке воспроизведения HTML, так что я возился с кодирует и декодирует его, пока он работал. Но есть красивее способ исправить проблему?

import urllib.request
from html.parser import HTMLParser

playlistUrl = input("gib nem: ")

with urllib.request.urlopen(playlistUrl) as response:
  playlist = response.read()

html = playlist.decode("utf-8").encode('cp1252','replace').decode('cp1252')

titles = ""
class MyHTMLParser(HTMLParser):
  def handle_starttag(self, tag, attrs):
    for attr in attrs:
      if attr[0] == "data-title":
        global titles
        titles += attr[1] + "\n"

parser = MyHTMLParser()
parser.feed(html)
print(titles)

with open("playlistNames.txt", "w") as f:
  f.write(titles)


Комментарии
1 ответ

Ну, как вы регулируете выход из званий может быть улучшена. Вам не нужно, чтобы вернуться к использованию global переменные здесь. Они очень редко действительно необходимо. Вот это было бы легче сделать handle_starttag а генератор, который затем потребляется str.join:

class MyHTMLParser(HTMLParser):

def handle_starttag(self, tag, attrs):
for attr in attrs:
if attr[0] == "data-title":
yield attr[1]

parser = MyHTMLParser()
titles = '\n'.join(parser.feed(html))
print(titles)

Это предполагает, что HTMLParser.feed не возвращает никаких других ценностей, кроме как изнутри handle_starttag способ (и что это на самом деле возвращает выходные данные handle_starttag).

Обратите внимание, что я увеличил количество мест до 4-х в ямочку уровне, как это рекомендовано в Python официально-деловой стиль-руководство, PEP8.

Вы также можете добавить ранний выход, если tag это не правильный тег.


Если эти предположения выше о feed ошибаетесь, вы, возможно, захотите искать другое средство. Большинство парсинг производится с BeautifulSoupнасколько я могу судить. Он предоставляет фильтры, с помощью которых вы можете уменьшить объем HTML-кода для анализа только те теги, которые вы заботитесь о и селекторов CSS, который позволит вам сразу выбрать все эти теги с правом атрибута.

3
ответ дан 2 февраля 2018 в 10:02 Источник Поделиться