私はラズベリーpi3で実行するコディアドオンを作っています。 私のアドオンでは、私はアイテムのリストを埋めることができるように、私はウェブサイトからの情報をこすります。私が今持っているものはすべて動作していますが、私がラズベリーパイ3に展開すると、パフォーマンスが問題になります。 Webページは、私はすでに、パフォーマンスを向上させるためにsoupstrainerを使用しますが、これは私が望んでいた影響力を持っていなかったBeautifulsoup4パフォーマンスラズベリーpi3
soup = BeautifulSoup(response, "html.parser", parse_only=tiles) << this line
を解析される前に、それは15秒かかります。
_VRT_BASE = "https://www.vrt.be/"
def __list_videos_az(self):
joined_url = urljoin(self._VRTNU_BASE_URL, "./a-z/")
response = urlopen(joined_url)
tiles = SoupStrainer('a', {"class": "tile"})
soup = BeautifulSoup(response, "html.parser", parse_only=tiles)
listing = []
for tile in soup.find_all(class_="tile"):
link_to_video = tile["href"]
li = self.__get_item(tile, "false")
url = '{0}?action=getepisodes&video={1}'.format(_url, link_to_video)
listing.append((url, li, True))
xbmcplugin.addDirectoryItems(_handle, listing, len(listing))
xbmcplugin.addSortMethod(_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
xbmcplugin.endOfDirectory(_handle)
def __get_item(self, element, is_playable):
thumbnail = self.__format_image_url(element)
found_element = element.find(class_="tile__title")
li = None
if found_element is not None:
li = xbmcgui.ListItem(found_element.contents[0]
.replace("\n", "").strip())
li.setProperty('IsPlayable', is_playable)
li.setArt({'thumb': thumbnail})
return li
誰かがプログラムのパフォーマンスを向上させる方法を教えてもらえますか?私はおそらく正規表現が速くなるだろうと思っていたが、人々はあなたがこのようにhtmlを解析すべきではないと言って、正規表現をまとめることも挑戦的だと言う。
パフォーマンスを向上させるためにできることはありますか?
答えてくれてありがとう、私は既にlxmlパーサを見てみましたが、動作させるのが難しいと感じました。しかし、私は最終的に私はタイミングを切り替えると思う、掻き集めるには3秒とforループ15がかかります。私は私が一番速くなければならないと思う正規表現をまとめました。そして、私はリスト項目をたくさん追加しているので、それはまだ遅いです。私はバグ#17304 http://trac.kodi.tv/ticket/17304に関連していると思います。今私はプログラム/テストより前にlibrelecのアップデートを待っています。 (他の人が言ったように、addon.pyからさらに多くのコードを分けて) – Martijn
'' lxml'を直接使って作業するわけではありませんでした。私はBeautifulSoup 4のツリービルダー/パーサとして使うことを意味しました。複雑なhtml解析のために。バグはKodi開発チームが修正するためのものです。 –
それを考慮してください!私のラズベリーパイに展開するには、kodi 17.1ビルドでlibreelecの新しいバージョンが必要です – Martijn