Пример #1
0
    def brewers_by_alpha(self, letter):
        """Returns a list of breweries that start with the provided letter.

        Args:
            letter (string): a single letter to search.

        Returns:
            A list of breweries.
            Each entry contains a name and a reference so you can look it up
            with the ``brewery`` method.
        """

        if letter not in string.ascii_uppercase and letter != '0-9':
            raise ValueError("Please only provide a single letter.")

        request = requests.post(soup_helper._BASE_URL + "/browsebrewers-" +
                                letter + ".htm")
        soup = BeautifulSoup(request.text, "lxml")
        breweries = []

        for entry in soup.select('a[href*=/brewers/]'):
            url = entry.get('href')
            brewer = models.Brewery(url)

            breweries.append(brewer)

        return breweries
Пример #2
0
    def search(self, query):
        """Returns a list of beers and breweries that matched the search query.

        Args:
            query (string): The text of the search.

        Returns:
            A dictionary containing two lists, ``breweries`` and ``beers``.
            Each list contains a dictionary of attributes of that brewery or
            beer.
        """

        try:
            query = unicode(query, 'UTF8').encode('iso-8859-1')
        except (TypeError, NameError):  # Python 3 does not have unicode()
            query = query.encode('iso-8859-1')

        request = requests.post(
            soup_helper._BASE_URL + "/findbeer.asp",
            data={"BeerName": query}
        )
        soup = BeautifulSoup(request.text, "lxml")
        output = {"breweries": [], "beers": []}

        # Locate rows that contain the brewery and beer info
        beer_table = soup.find('h2', string='beers')
        if beer_table:
            for row in beer_table.next_sibling('tr'):
                # Only include ratable beers
                if row.find(title='Rate This Beer'):
                    url = row('td')[0].a.get('href')
                    url = re.sub(r"\s+", "", url, flags=re.UNICODE)
                    beer = models.Beer(url)
                    beer.name = row('td')[0].a.string.strip()
                    overall_rating = row('td')[3].string
                    num_ratings = row('td')[4].string
                    if overall_rating:
                        beer.overall_rating = int(overall_rating.strip())
                    if num_ratings:
                        beer.num_ratings = int(num_ratings.strip())
                    output['beers'].append(beer)

        brewer_table = soup.find('h2', string='brewers')
        if brewer_table:
            for row in brewer_table.next_sibling('tr'):
                url = row.a.get('href')
                url = re.sub(r"\s+", "", url, flags=re.UNICODE)
                brewer = models.Brewery(url)
                brewer.name = row.a.string
                brewer.location = row('td')[1].string.strip()
                output['breweries'].append(brewer)
        return output
Пример #3
0
 def get_brewery(self, url, fetch=None):
     """Returns a Brewery object for the requested URL"""
     if fetch is None:
         fetch = False
     return models.Brewery(url, fetch)