def _search_parse_cache(self, root): """Returns a Cache object parsed from BeautifulSoup Tag.""" assert isinstance(root, bs4.Tag) # parse raw data favorites = root.find("span", "favorite-rank") typeLink, nameLink = root.find_all("a", "lnk") pm_only = root.find("img", title="Premium Member Only Cache") is not None direction, info, D_T, placed, last_found = root.find_all( "span", "small") found = root.find("img", title="Found It!") is not None size = root.find("td", "AlignCenter").find("img") author, wp, area = [t.strip() for t in info.text.split("|")] # create cache object c = Cache(wp, self) # prettify data c.cache_type = typeLink.find("img").get("alt") c.name = nameLink.span.text.strip() c.found = found c.state = "Strike" not in nameLink.get("class") c.size = " ".join(size.get("alt").split()[1:]) c.difficulty, c.terrain = list(map(float, D_T.text.split("/"))) c.hidden = Util.parse_date(placed.text) c.author = author[3:] # delete "by " c.favorites = int(favorites.text) c.pm_only = pm_only logging.debug("Cache parsed: %s", c) return c
def _search_parse_cache(self, root): """Returns a Cache object parsed from BeautifulSoup Tag.""" assert isinstance(root, bs4.Tag) # parse raw data favorites = root.find("span", "favorite-rank") typeLink, nameLink = root.find_all("a", "lnk") pm_only = root.find("img", title="Premium Member Only Cache") is not None direction, info, D_T, placed, last_found = root.find_all("span", "small") found = root.find("img", title="Found It!") is not None size = root.find("td", "AlignCenter").find("img") author, wp, area = [t.strip() for t in info.text.split("|")] # create cache object c = Cache(wp, self) # prettify data c.cache_type = typeLink.find("img").get("alt") c.name = nameLink.span.text.strip() c.found = found c.state = "Strike" not in nameLink.get("class") c.size = " ".join(size.get("alt").split()[1:]) c.difficulty, c.terrain = list(map(float, D_T.text.split("/"))) c.hidden = Util.parse_date(placed.text) c.author = author[3:] # delete "by " c.favorites = int(favorites.text) c.pm_only = pm_only logging.debug("Cache parsed: %s", c) return c
def search(self, point, limit=0): """Returns a generator object of caches around some point.""" assert isinstance(point, Point) assert type(limit) is int logging.info("Searching at %s...", point) start_index = 0 while True: # get one page page = self._search_get_page(point, start_index) if not page: # result is empty - no more caches raise StopIteration() # parse caches in result for start_index, row in enumerate(BeautifulSoup(page).find_all("tr"), start_index): if limit > 0 and start_index == limit: raise StopIteration() # parse raw data cache_details = row.find("span", "cache-details").text.split("|") wp = cache_details[1].strip() # create and fill cache object c = Cache(wp, self) c.cache_type = cache_details[0].strip() c.name = row.find("span", "cache-name").text c.found = row.find("img", title="Found It!") is not None c.favorites = int(row.find(attrs={"data-column": "FavoritePoint"}).text) c.state = not (row.get("class") and "disabled" in row.get("class")) c.pm_only = row.find("td", "pm-upsell") is not None if c.pm_only: # PM only caches doesn't have other attributes filled in yield c continue c.size = row.find(attrs={"data-column": "ContainerSize"}).text c.difficulty = float(row.find(attrs={"data-column": "Difficulty"}).text) c.terrain = float(row.find(attrs={"data-column": "Terrain"}).text) c.hidden = Util.parse_date(row.find(attrs={"data-column": "PlaceDate"}).text) c.author = row.find("span", "owner").text[3:] # delete "by " logging.debug("Cache parsed: %s", c) yield c start_index += 1
def search(self, point, limit=0): """Returns a generator object of caches around some point.""" assert isinstance(point, Point) assert type(limit) is int logging.info("Searching at %s...", point) start_index = 0 while True: # get one page page = self._search_get_page(point, start_index) if not page: # result is empty - no more caches raise StopIteration() # parse caches in result for start_index, row in enumerate( BeautifulSoup(page).find_all("tr"), start_index): if limit > 0 and start_index == limit: raise StopIteration() # parse raw data cache_details = row.find("span", "cache-details").text.split("|") wp = cache_details[1].strip() # create and fill cache object c = Cache(wp, self) c.cache_type = cache_details[0].strip() c.name = row.find("span", "cache-name").text c.found = row.find("img", title="Found It!") is not None c.favorites = int( row.find(attrs={ "data-column": "FavoritePoint" }).text) c.state = not (row.get("class") and "disabled" in row.get("class")) c.pm_only = row.find("td", "pm-upsell") is not None if c.pm_only: # PM only caches doesn't have other attributes filled in yield c continue c.size = row.find(attrs={"data-column": "ContainerSize"}).text c.difficulty = float( row.find(attrs={ "data-column": "Difficulty" }).text) c.terrain = float( row.find(attrs={ "data-column": "Terrain" }).text) c.hidden = Util.parse_date( row.find(attrs={ "data-column": "PlaceDate" }).text) c.author = row.find("span", "owner").text[3:] # delete "by " logging.debug("Cache parsed: %s", c) yield c start_index += 1