281def _parse_search(resp) -> EngineResults:
282 result_list = EngineResults()
283
284 dom = html.fromstring(resp.text)
285
286
287
288 answer_tag = eval_xpath_getindex(dom, '//div[@class="answer"]', 0, default=None)
289 if answer_tag:
290 url = eval_xpath_getindex(dom, '//div[@id="featured_snippet"]/a[@class="result-header"]/@href', 0, default=None)
291 answer = extract_text(answer_tag)
292 if answer is not None:
293 result_list.add(result_list.types.Answer(answer=answer, url=url))
294
295
296 xpath_results = '//div[contains(@class, "snippet ")]'
297
298 for result in eval_xpath_list(dom, xpath_results):
299
300 url = eval_xpath_getindex(result, './/a[contains(@class, "h")]/@href', 0, default=None)
301 title_tag = eval_xpath_getindex(
302 result, './/a[contains(@class, "h")]//div[contains(@class, "title")]', 0, default=None
303 )
304 if url is None or title_tag is None or not urlparse(url).netloc:
305 continue
306
307 content: str = extract_text(
308 eval_xpath_getindex(result, './/div[contains(@class, "snippet-description")]', 0, default='')
309 )
310 pub_date_raw = eval_xpath(result, 'substring-before(.//div[contains(@class, "snippet-description")], "-")')
311 pub_date = _extract_published_date(pub_date_raw)
312 if pub_date and content.startswith(pub_date_raw):
313 content = content.lstrip(pub_date_raw).strip("- \n\t")
314
315 thumbnail = eval_xpath_getindex(result, './/img[contains(@class, "thumb")]/@src', 0, default='')
316
317 item = {
318 'url': url,
319 'title': extract_text(title_tag),
320 'content': content,
321 'publishedDate': pub_date,
322 'thumbnail': thumbnail,
323 }
324
325 video_tag = eval_xpath_getindex(
326 result, './/div[contains(@class, "video-snippet") and @data-macro="video"]', 0, default=None
327 )
328 if video_tag is not None:
329
330
331
332
333 iframe_src = get_embeded_stream_url(url)
334 if iframe_src:
335 item['iframe_src'] = iframe_src
336 item['template'] = 'videos.html'
337 item['thumbnail'] = eval_xpath_getindex(video_tag, './/img/@src', 0, default='')
338 pub_date_raw = extract_text(
339 eval_xpath(video_tag, './/div[contains(@class, "snippet-attributes")]/div/text()')
340 )
341 item['publishedDate'] = _extract_published_date(pub_date_raw)
342 else:
343 item['thumbnail'] = eval_xpath_getindex(video_tag, './/img/@src', 0, default='')
344
345 result_list.append(item)
346
347 return result_list
348
349