65 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			65 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | """
 | ||
|  |  not Evil (Onions) | ||
|  | 
 | ||
|  |  @website     http://hss3uro2hsxfogfq.onion | ||
|  |  @provide-api yes (http://hss3uro2hsxfogfq.onion/api.htm) | ||
|  | 
 | ||
|  |  @using-api   no | ||
|  |  @results     HTML | ||
|  |  @stable      no | ||
|  |  @parse       url, title, content | ||
|  | """
 | ||
|  | 
 | ||
|  | from urllib.parse import urlencode | ||
|  | from lxml import html | ||
|  | from searx.engines.xpath import extract_text | ||
|  | 
 | ||
|  | # engine dependent config | ||
|  | categories = ['onions'] | ||
|  | paging = True | ||
|  | page_size = 20 | ||
|  | 
 | ||
|  | # search-url | ||
|  | base_url = 'http://hss3uro2hsxfogfq.onion/' | ||
|  | search_url = 'index.php?{query}&hostLimit=20&start={pageno}&numRows={page_size}' | ||
|  | 
 | ||
|  | # specific xpath variables | ||
|  | results_xpath = '//*[@id="content"]/div/p' | ||
|  | url_xpath = './span[1]' | ||
|  | title_xpath = './a[1]' | ||
|  | content_xpath = './text()' | ||
|  | 
 | ||
|  | 
 | ||
|  | # do search-request | ||
|  | def request(query, params): | ||
|  |     offset = (params['pageno'] - 1) * page_size | ||
|  | 
 | ||
|  |     params['url'] = base_url + search_url.format(pageno=offset, | ||
|  |                                                  query=urlencode({'q': query}), | ||
|  |                                                  page_size=page_size) | ||
|  | 
 | ||
|  |     return params | ||
|  | 
 | ||
|  | 
 | ||
|  | # get response from search-request | ||
|  | def response(resp): | ||
|  |     results = [] | ||
|  | 
 | ||
|  |     # needed because otherwise requests guesses wrong encoding | ||
|  |     resp.encoding = 'utf8' | ||
|  |     dom = html.fromstring(resp.text) | ||
|  | 
 | ||
|  |     # parse results | ||
|  |     for result in dom.xpath(results_xpath): | ||
|  |         url = extract_text(result.xpath(url_xpath)[0]) | ||
|  |         title = extract_text(result.xpath(title_xpath)[0]) | ||
|  |         content = extract_text(result.xpath(content_xpath)) | ||
|  | 
 | ||
|  |         # append result | ||
|  |         results.append({'url': url, | ||
|  |                         'title': title, | ||
|  |                         'content': content, | ||
|  |                         'is_onion': True}) | ||
|  | 
 | ||
|  |     return results |