prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Seems that startpage and ixquick enignes are not working anymore on Searx
  Hello and thanks for the works.
  
  I tried on my searx and on other instance like searx.me...  but It's not working.
  
  How could we fix that?
  
  Thanks.
  
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `searx/engines/startpage.py`
  Content:
  ```
  1 #  Startpage (Web)
  2 #
  3 # @website     https://startpage.com
  4 # @provide-api no (nothing found)
  5 #
  6 # @using-api   no
  7 # @results     HTML
  8 # @stable      no (HTML can change)
  9 # @parse       url, title, content
  10 #
  11 # @todo        paging
  12 
  13 from lxml import html
  14 from dateutil import parser
  15 from datetime import datetime, timedelta
  16 import re
  17 from searx.engines.xpath import extract_text
  18 
  19 # engine dependent config
  20 categories = ['general']
  21 # there is a mechanism to block "bot" search
  22 # (probably the parameter qid), require
  23 # storing of qid's between mulitble search-calls
  24 
  25 # paging = False
  26 language_support = True
  27 
  28 # search-url
  29 base_url = 'https://startpage.com/'
  30 search_url = base_url + 'do/search'
  31 
  32 # specific xpath variables
  33 # ads xpath //div[@id="results"]/div[@id="sponsored"]//div[@class="result"]
  34 # not ads: div[@class="result"] are the direct childs of div[@id="results"]
  35 results_xpath = '//div[@class="result"]'
  36 link_xpath = './/h3/a'
  37 
  38 
  39 # do search-request
  40 def request(query, params):
  41     offset = (params['pageno'] - 1) * 10
  42 
  43     params['url'] = search_url
  44     params['method'] = 'POST'
  45     params['data'] = {'query': query,
  46                       'startat': offset}
  47 
  48     # set language
  49     params['data']['with_language'] = ('lang_' + params['language'].split('-')[0])
  50 
  51     return params
  52 
  53 
  54 # get response from search-request
  55 def response(resp):
  56     results = []
  57 
  58     dom = html.fromstring(resp.text)
  59 
  60     # parse results
  61     for result in dom.xpath(results_xpath):
  62         links = result.xpath(link_xpath)
  63         if not links:
  64             continue
  65         link = links[0]
  66         url = link.attrib.get('href')
  67 
  68         # block google-ad url's
  69         if re.match(r"^http(s|)://(www\.)?google\.[a-z]+/aclk.*$", url):
  70             continue
  71 
  72         # block startpage search url's
  73         if re.match(r"^http(s|)://(www\.)?startpage\.com/do/search\?.*$", url):
  74             continue
  75 
  76         # block ixquick search url's
  77         if re.match(r"^http(s|)://(www\.)?ixquick\.com/do/search\?.*$", url):
  78             continue
  79 
  80         title = extract_text(link)
  81 
  82         if result.xpath('./p[@class="desc clk"]'):
  83             content = extract_text(result.xpath('./p[@class="desc clk"]'))
  84         else:
  85             content = ''
  86 
  87         published_date = None
  88 
  89         # check if search result starts with something like: "2 Sep 2014 ... "
  90         if re.match(r"^([1-9]|[1-2][0-9]|3[0-1]) [A-Z][a-z]{2} [0-9]{4} \.\.\. ", content):
  91             date_pos = content.find('...') + 4
  92             date_string = content[0:date_pos - 5]
  93             published_date = parser.parse(date_string, dayfirst=True)
  94 
  95             # fix content string
  96             content = content[date_pos:]
  97 
  98         # check if search result starts with something like: "5 days ago ... "
  99         elif re.match(r"^[0-9]+ days? ago \.\.\. ", content):
  100             date_pos = content.find('...') + 4
  101             date_string = content[0:date_pos - 5]
  102 
  103             # calculate datetime
  104             published_date = datetime.now() - timedelta(days=int(re.match(r'\d+', date_string).group()))
  105 
  106             # fix content string
  107             content = content[date_pos:]
  108 
  109         if published_date:
  110             # append result
  111             results.append({'url': url,
  112                             'title': title,
  113                             'content': content,
  114                             'publishedDate': published_date})
  115         else:
  116             # append result
  117             results.append({'url': url,
  118                             'title': title,
  119                             'content': content})
  120 
  121     # return results
  122     return results
  123
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/searx/engines/startpage.py b/searx/engines/startpage.py
  --- a/searx/engines/startpage.py
  +++ b/searx/engines/startpage.py
  @@ -32,8 +32,9 @@
   # specific xpath variables
   # ads xpath //div[@id="results"]/div[@id="sponsored"]//div[@class="result"]
   # not ads: div[@class="result"] are the direct childs of div[@id="results"]
  -results_xpath = '//div[@class="result"]'
  +results_xpath = '//li[contains(@class, "search-result") and contains(@class, "search-item")]'
   link_xpath = './/h3/a'
  +content_xpath = './p[@class="search-item__body"]'
   
   
   # do search-request
  @@ -79,8 +80,8 @@
   
           title = extract_text(link)
   
  -        if result.xpath('./p[@class="desc clk"]'):
  -            content = extract_text(result.xpath('./p[@class="desc clk"]'))
  +        if result.xpath(content_xpath):
  +            content = extract_text(result.xpath(content_xpath))
           else:
               content = ''
  
verification_info: {"golden_diff": "diff --git a/searx/engines/startpage.py b/searx/engines/startpage.py\n--- a/searx/engines/startpage.py\n+++ b/searx/engines/startpage.py\n@@ -32,8 +32,9 @@\n # specific xpath variables\n # ads xpath //div[@id=\"results\"]/div[@id=\"sponsored\"]//div[@class=\"result\"]\n # not ads: div[@class=\"result\"] are the direct childs of div[@id=\"results\"]\n-results_xpath = '//div[@class=\"result\"]'\n+results_xpath = '//li[contains(@class, \"search-result\") and contains(@class, \"search-item\")]'\n link_xpath = './/h3/a'\n+content_xpath = './p[@class=\"search-item__body\"]'\n \n \n # do search-request\n@@ -79,8 +80,8 @@\n \n         title = extract_text(link)\n \n-        if result.xpath('./p[@class=\"desc clk\"]'):\n-            content = extract_text(result.xpath('./p[@class=\"desc clk\"]'))\n+        if result.xpath(content_xpath):\n+            content = extract_text(result.xpath(content_xpath))\n         else:\n             content = ''\n", "issue": "Seems that startpage and ixquick enignes are not working anymore on Searx\nHello and thanks for the works.\r\n\r\nI tried on my searx and on other instance like searx.me...  but It's not working.\r\n\r\nHow could we fix that?\r\n\r\nThanks.\r\n\r\n\n", "before_files": [{"content": "#  Startpage (Web)\n#\n# @website     https://startpage.com\n# @provide-api no (nothing found)\n#\n# @using-api   no\n# @results     HTML\n# @stable      no (HTML can change)\n# @parse       url, title, content\n#\n# @todo        paging\n\nfrom lxml import html\nfrom dateutil import parser\nfrom datetime import datetime, timedelta\nimport re\nfrom searx.engines.xpath import extract_text\n\n# engine dependent config\ncategories = ['general']\n# there is a mechanism to block \"bot\" search\n# (probably the parameter qid), require\n# storing of qid's between mulitble search-calls\n\n# paging = False\nlanguage_support = True\n\n# search-url\nbase_url = 'https://startpage.com/'\nsearch_url = base_url + 'do/search'\n\n# specific xpath variables\n# ads xpath //div[@id=\"results\"]/div[@id=\"sponsored\"]//div[@class=\"result\"]\n# not ads: div[@class=\"result\"] are the direct childs of div[@id=\"results\"]\nresults_xpath = '//div[@class=\"result\"]'\nlink_xpath = './/h3/a'\n\n\n# do search-request\ndef request(query, params):\n    offset = (params['pageno'] - 1) * 10\n\n    params['url'] = search_url\n    params['method'] = 'POST'\n    params['data'] = {'query': query,\n                      'startat': offset}\n\n    # set language\n    params['data']['with_language'] = ('lang_' + params['language'].split('-')[0])\n\n    return params\n\n\n# get response from search-request\ndef response(resp):\n    results = []\n\n    dom = html.fromstring(resp.text)\n\n    # parse results\n    for result in dom.xpath(results_xpath):\n        links = result.xpath(link_xpath)\n        if not links:\n            continue\n        link = links[0]\n        url = link.attrib.get('href')\n\n        # block google-ad url's\n        if re.match(r\"^http(s|)://(www\\.)?google\\.[a-z]+/aclk.*$\", url):\n            continue\n\n        # block startpage search url's\n        if re.match(r\"^http(s|)://(www\\.)?startpage\\.com/do/search\\?.*$\", url):\n            continue\n\n        # block ixquick search url's\n        if re.match(r\"^http(s|)://(www\\.)?ixquick\\.com/do/search\\?.*$\", url):\n            continue\n\n        title = extract_text(link)\n\n        if result.xpath('./p[@class=\"desc clk\"]'):\n            content = extract_text(result.xpath('./p[@class=\"desc clk\"]'))\n        else:\n            content = ''\n\n        published_date = None\n\n        # check if search result starts with something like: \"2 Sep 2014 ... \"\n        if re.match(r\"^([1-9]|[1-2][0-9]|3[0-1]) [A-Z][a-z]{2} [0-9]{4} \\.\\.\\. \", content):\n            date_pos = content.find('...') + 4\n            date_string = content[0:date_pos - 5]\n            published_date = parser.parse(date_string, dayfirst=True)\n\n            # fix content string\n            content = content[date_pos:]\n\n        # check if search result starts with something like: \"5 days ago ... \"\n        elif re.match(r\"^[0-9]+ days? ago \\.\\.\\. \", content):\n            date_pos = content.find('...') + 4\n            date_string = content[0:date_pos - 5]\n\n            # calculate datetime\n            published_date = datetime.now() - timedelta(days=int(re.match(r'\\d+', date_string).group()))\n\n            # fix content string\n            content = content[date_pos:]\n\n        if published_date:\n            # append result\n            results.append({'url': url,\n                            'title': title,\n                            'content': content,\n                            'publishedDate': published_date})\n        else:\n            # append result\n            results.append({'url': url,\n                            'title': title,\n                            'content': content})\n\n    # return results\n    return results\n", "path": "searx/engines/startpage.py"}], "after_files": [{"content": "#  Startpage (Web)\n#\n# @website     https://startpage.com\n# @provide-api no (nothing found)\n#\n# @using-api   no\n# @results     HTML\n# @stable      no (HTML can change)\n# @parse       url, title, content\n#\n# @todo        paging\n\nfrom lxml import html\nfrom dateutil import parser\nfrom datetime import datetime, timedelta\nimport re\nfrom searx.engines.xpath import extract_text\n\n# engine dependent config\ncategories = ['general']\n# there is a mechanism to block \"bot\" search\n# (probably the parameter qid), require\n# storing of qid's between mulitble search-calls\n\n# paging = False\nlanguage_support = True\n\n# search-url\nbase_url = 'https://startpage.com/'\nsearch_url = base_url + 'do/search'\n\n# specific xpath variables\n# ads xpath //div[@id=\"results\"]/div[@id=\"sponsored\"]//div[@class=\"result\"]\n# not ads: div[@class=\"result\"] are the direct childs of div[@id=\"results\"]\nresults_xpath = '//li[contains(@class, \"search-result\") and contains(@class, \"search-item\")]'\nlink_xpath = './/h3/a'\ncontent_xpath = './p[@class=\"search-item__body\"]'\n\n\n# do search-request\ndef request(query, params):\n    offset = (params['pageno'] - 1) * 10\n\n    params['url'] = search_url\n    params['method'] = 'POST'\n    params['data'] = {'query': query,\n                      'startat': offset}\n\n    # set language\n    params['data']['with_language'] = ('lang_' + params['language'].split('-')[0])\n\n    return params\n\n\n# get response from search-request\ndef response(resp):\n    results = []\n\n    dom = html.fromstring(resp.text)\n\n    # parse results\n    for result in dom.xpath(results_xpath):\n        links = result.xpath(link_xpath)\n        if not links:\n            continue\n        link = links[0]\n        url = link.attrib.get('href')\n\n        # block google-ad url's\n        if re.match(r\"^http(s|)://(www\\.)?google\\.[a-z]+/aclk.*$\", url):\n            continue\n\n        # block startpage search url's\n        if re.match(r\"^http(s|)://(www\\.)?startpage\\.com/do/search\\?.*$\", url):\n            continue\n\n        # block ixquick search url's\n        if re.match(r\"^http(s|)://(www\\.)?ixquick\\.com/do/search\\?.*$\", url):\n            continue\n\n        title = extract_text(link)\n\n        if result.xpath(content_xpath):\n            content = extract_text(result.xpath(content_xpath))\n        else:\n            content = ''\n\n        published_date = None\n\n        # check if search result starts with something like: \"2 Sep 2014 ... \"\n        if re.match(r\"^([1-9]|[1-2][0-9]|3[0-1]) [A-Z][a-z]{2} [0-9]{4} \\.\\.\\. \", content):\n            date_pos = content.find('...') + 4\n            date_string = content[0:date_pos - 5]\n            published_date = parser.parse(date_string, dayfirst=True)\n\n            # fix content string\n            content = content[date_pos:]\n\n        # check if search result starts with something like: \"5 days ago ... \"\n        elif re.match(r\"^[0-9]+ days? ago \\.\\.\\. \", content):\n            date_pos = content.find('...') + 4\n            date_string = content[0:date_pos - 5]\n\n            # calculate datetime\n            published_date = datetime.now() - timedelta(days=int(re.match(r'\\d+', date_string).group()))\n\n            # fix content string\n            content = content[date_pos:]\n\n        if published_date:\n            # append result\n            results.append({'url': url,\n                            'title': title,\n                            'content': content,\n                            'publishedDate': published_date})\n        else:\n            # append result\n            results.append({'url': url,\n                            'title': title,\n                            'content': content})\n\n    # return results\n    return results\n", "path": "searx/engines/startpage.py"}]}