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