나는 내 산딸기 파이 3에서 실행할 코디 애드온을 만들고있다. 내 addon에서 나는 항목 목록을 채울 수 있도록 웹 사이트에서 정보를 긁었다. 나는 지금 당장 가지고있는 모든 일을하고 있지만, 제 라스베리 파이 3에 그것을 배치하면 성능이 문제가됩니다. 웹 페이지가Beautifulsoup4 performance raspberry pi3
soup = BeautifulSoup(response, "html.parser", parse_only=tiles) << this line
이미 성능을 향상시키기 위해 soupstrainer를 사용하지만이 내가 기대했다 미치는 영향이 없었을 구문 분석하기 전에 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 루프가 필요하다. 내가 가장 빠른 것이되어야한다고 생각하는 정규식을 작성했기 때문에? 그리고 결국 나는 listitem을 많이 추가하기 때문에 여전히 느리다. 나는 버그 # 17304 http://trac.kodi.tv/ticket/17304와 관련 있다고 생각한다. 이제 나는 프로그램/테스트 이전에 librelec에 대한 업데이트를 기다리고 있습니다. (다른 사람이 말한 것처럼 addon.py에서 더 많은 코드를 분리했다.) – Martijn
''lxml '로 직접 작업하는 것이 아니라, BeautifulSoup 4의 트리 빌더/파서로 사용하는 것이었다. 정규식은 권장하지 않는다. 복잡한 html 파싱. 버그는 Kodi 개발팀이 해결하도록했습니다. –
아쉽군! 그리고 내 산딸기 파이에 그것을 배포 할려면 kodi 17.1 빌드와 함께 libreelec의 새 버전이 필요합니다. – Martijn