93 """Get response from google's search request"""
96 detect_google_sorry(resp)
97 data_image_map = parse_data_images(resp.text)
100 dom = html.fromstring(resp.text)
102 result_divs = eval_xpath_list(dom,
'//div[contains(@class, "MjjYud")]')
105 for result
in result_divs:
106 title = extract_text(
107 eval_xpath_getindex(result,
'.//h3[contains(@class, "LC20lb")]', 0, default=
None), allow_none=
True
109 url = eval_xpath_getindex(result,
'.//a[@jsname="UWckNb"]/@href', 0, default=
None)
110 content = extract_text(
111 eval_xpath_getindex(result,
'.//div[contains(@class, "ITZIwc")]', 0, default=
None), allow_none=
True
113 pub_info = extract_text(
114 eval_xpath_getindex(result,
'.//div[contains(@class, "gqF9jc")]', 0, default=
None), allow_none=
True
117 thumbnail = eval_xpath_getindex(result,
'.//img/@src', 0, default=
None)
118 duration = extract_text(
119 eval_xpath_getindex(result,
'.//span[contains(@class, "k1U36b")]', 0, default=
None), allow_none=
True
121 video_id = eval_xpath_getindex(result,
'.//div[@jscontroller="rTuANe"]/@data-vid', 0, default=
None)
124 if not video_id
and url
and 'youtube.com' in url:
125 parsed_url = urlparse(url)
126 video_id = parse_qs(parsed_url.query).get(
'v', [
None])[0]
129 if thumbnail
and thumbnail.startswith(
'data:image'):
130 img_id = eval_xpath_getindex(result,
'.//img/@id', 0, default=
None)
131 if img_id
and img_id
in data_image_map:
132 thumbnail = data_image_map[img_id]
135 if not thumbnail
and video_id:
136 thumbnail = f
"https://img.youtube.com/vi/{video_id}/hqdefault.jpg"
141 embed_url = get_embeded_stream_url(f
"https://www.youtube.com/watch?v={video_id}")
143 embed_url = get_embeded_stream_url(url)
151 'content': content
or '',
153 'thumbnail': thumbnail,
155 'iframe_src': embed_url,
156 'template':
'videos.html',
161 for suggestion
in eval_xpath_list(dom, suggestion_xpath):
162 results.append({
'suggestion': extract_text(suggestion)})