on master help sign in
Use string formatter to create source and img_format labels (#1566)

google_images : use JSON embedded in HTML (engine expected pure JSON)

commit4b7332286aa9c53fa39c5d64b9dc6a8fde3b30da authorFrank de Lange <github-f@unternet.org> dateTue 28 May 2019, 05:33 (7 years ago) parenta255651
1 file changed+24−27
searx/engines/google_images.py+24−27
searx/engines/google_images.py+24−27
@@ -11,9 +11,9 @@
1111"""
1212
1313from datetime import date, timedelta
14+from json import loads
1415from lxml import html
15−from searx.url_utils import urlencode, urlparse, parse_qs
16−
16+from searx.url_utils import urlencode
1717
1818# engine dependent config
1919categories = ['images']
@@ -25,8 +25,7 @@ number_of_results = 100
2525search_url = 'https://www.google.com/search'\
2626 '?{query}'\
2727 '&tbm=isch'\
28− '&gbv=1'\
29− '&sa=G'\
28+ '&yv=2'\
3029 '&{search_options}'
3130time_range_attr = "qdr:{range}"
3231time_range_custom_attr = "cdr:1,cd_min:{start},cd_max{end}"
@@ -38,6 +37,7 @@ time_range_dict = {'day': 'd',
3837# do search-request
3938def request(query, params):
4039 search_options = {
40+ 'ijn': params['pageno'] - 1,
4141 'start': (params['pageno'] - 1) * number_of_results
4242 }
4343
@@ -51,7 +51,7 @@ def request(query, params):
5151 search_options['tbs'] = time_range_custom_attr.format(start=start, end=end)
5252
5353 if safesearch and params['safesearch']:
54− search_options['safe'] = 'active'
54+ search_options['safe'] = 'on'
5555
5656 params['url'] = search_url.format(query=urlencode({'q': query}),
5757 search_options=urlencode(search_options))
@@ -61,30 +61,27 @@ def request(query, params):
6161
6262# get response from search-request
6363def response(resp):
64+ results = []
65+
6466 dom = html.fromstring(resp.text)
6567
66− results = []
67− for element in dom.xpath('//div[@id="search"] //td'):
68− link = element.xpath('./a')[0]
69−
70− google_url = urlparse(link.xpath('.//@href')[0])
71− query = parse_qs(google_url.query)
72− source_url = next(iter(query.get('q', [])), None)
73−
74− title_parts = element.xpath('./cite//following-sibling::*/text()')
75− title_parts.extend(element.xpath('./cite//following-sibling::text()')[:-1])
76−
77− result = {
78− 'title': ''.join(title_parts),
79− 'content': '',
80− 'template': 'images.html',
81− 'url': source_url,
82− 'img_src': source_url,
83− 'thumbnail_src': next(iter(link.xpath('.//img //@src')), None)
84− }
85−
86− if not source_url or not result['thumbnail_src']:
68+ # parse results
69+ for result in dom.xpath('//div[contains(@class, "rg_meta")]/text()'):
70+
71+ try:
72+ metadata = loads(result)
73+ img_format = "{0} {1}x{2}".format(metadata['ity'], str(metadata['ow']), str(metadata['oh']))
74+ source = "{0} ({1})".format(metadata['st'], metadata['isu'])
75+ results.append({'url': metadata['ru'],
76+ 'title': metadata['pt'],
77+ 'content': metadata['s'],
78+ 'source': source,
79+ 'img_format': img_format,
80+ 'thumbnail_src': metadata['tu'],
81+ 'img_src': metadata['ou'],
82+ 'template': 'images.html'})
83+
84+ except:
8785 continue
8886
89− results.append(result)
9087 return results