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()

```

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 = ''

{"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"}]}