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