from pyquery import PyQuery from sites.helper.item import Item class Structure: def __init__(self, site): self.site = site self.container_path = None self.item_path = None self.item_url_path = None self.item_title_path = None self.item_duration_path = None self.item_size_path = None self.item_artist_path = None def set_container_path(self, path): self.container_path = path return self def set_item_path(self, path): self.item_path = path return self def set_url_path(self, path): self.item_url_path = path return self def set_title_path(self, path): self.item_title_path = path return self def set_artist_path(self, path): self.item_artist_path = path return self def set_duration_path(self, path): self.item_duration_path = path return self def set_size_path(self, path): self.item_size_path = path, return self def parse(self, html): pq = PyQuery(html) pq.make_links_absolute(base_url=self.site.url) results = pq(self.container_path).find(self.item_path) items = [] for result in results: result = pq(result) title = result.find(self.item_title_path) if self.item_title_path is not None else None url = result.find(self.item_url_path) if self.item_url_path is not None else None duration = result.find(self.item_duration_path) if self.item_duration_path is not None else None size = result.find(self.item_size_path) if self.item_size_path is not None else None if title is not None and url is not None: items.append(Item(self.site, self.site.format_title(title), url, self.site.format_duration(duration), self.site.format_size(size), self.site.format_artist(title))) return items