diff --git a/DDG/plugin.py b/DDG/plugin.py index 48acd4e..93d533f 100644 --- a/DDG/plugin.py +++ b/DDG/plugin.py @@ -71,35 +71,22 @@ class DDG(callbacks.Plugin): data = re.sub('\t|\r|\n', '', data) data = re.sub('\s{2,}', ' ', data) soup = BeautifulSoup(data) - # DuckDuckGo lite uses tables for everything. Each WEB result is made - # up of 3 tags: - tables = soup.find_all('table') - - # Sometimes there is an extra table for page navigation + tds = soup.find_all('td') + for t in tds: + if "1." in t.text: + res = t.next_sibling.next_sibling + break try: - webresults = tables[2].find_all('tr') - except IndexError: - webresults = tables[1].find_all('tr') - if webresults: - try: - while 'result-sponsored' in webresults[0]["class"]: - self.log.debug("DDG: stripping 1 sponsored/ad result.") - webresults = webresults[4:] - except KeyError: pass - # 1) The link and title. - link = webresults[0].find('a').get('href') - # 2) A result snippet. - snippet = webresults[1].find("td", class_="result-snippet") - try: - snippet = snippet.text.strip() - except AttributeError: - snippet = webresults[1].td.text.strip() - # 3) The link-text; essentially the same as the link in 1), but with the - # URI (http(s)://) removed. We do not need this section. + # 1) Fetch the result link. + link = res.a.get('href') + # 2) Get a result snippet. + snippet = res.parent.next_sibling.next_sibling.find("td", + class_="result-snippet") + snippet = snippet.text.strip() s = format("%s - %u", snippet, link) irc.reply(s) - else: + except AttributeError: irc.error("No results found.") search = wrap(search, ['text'])