etools.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. """
  3. eTools (Web)
  4. """
  5. from lxml import html
  6. from urllib.parse import quote
  7. from searx.utils import extract_text, eval_xpath
  8. # about
  9. about = {
  10. "website": 'https://www.etools.ch',
  11. "wikidata_id": None,
  12. "official_api_documentation": None,
  13. "use_official_api": False,
  14. "require_api_key": False,
  15. "results": 'HTML',
  16. }
  17. categories = ['general']
  18. paging = False
  19. safesearch = True
  20. base_url = 'https://www.etools.ch'
  21. search_path = (
  22. # fmt: off
  23. '/searchAdvancedSubmit.do'
  24. '?query={search_term}'
  25. '&pageResults=20'
  26. '&safeSearch={safesearch}'
  27. # fmt: on
  28. )
  29. def request(query, params):
  30. if params['safesearch']:
  31. safesearch = 'true'
  32. else:
  33. safesearch = 'false'
  34. params['url'] = base_url + search_path.format(search_term=quote(query), safesearch=safesearch)
  35. return params
  36. def response(resp):
  37. results = []
  38. dom = html.fromstring(resp.text)
  39. for result in eval_xpath(dom, '//table[@class="result"]//td[@class="record"]'):
  40. url = eval_xpath(result, './a/@href')[0]
  41. title = extract_text(eval_xpath(result, './a//text()'))
  42. content = extract_text(eval_xpath(result, './/div[@class="text"]//text()'))
  43. results.append({'url': url, 'title': title, 'content': content})
  44. return results