Python爬取某短视频热点
写在前面的一些话:
随着短视频的大火,不仅可以给人们带来娱乐,还有热点新闻时事以及各种知识,刷短视频也逐渐成为了日常生活的一部分。
本文以一个简单的小例子,简述如何通过Pyhton依托Selenium来爬取短视频,仅供学习分享使用,如有不足之处,还请指正。
涉及知识点
关于爬虫涉及知识点,如下所示:
目标分析
在爬取视频之前,需要分析目标结构,本视频爬取分析可分为三步,具体如下所示:
1. 分析热榜目录
热榜目录是一个ul标签,每一个热榜对象一个li子标签,分别包含热度,标题等内容。点击标题链接可以进入具体视频播放页面,
目标分析如下所示:
2.分析视频播放页面
视频在video标签中播放,短视频播放的真实地址,在video的source子标签中,且为了保证播放质量,video下有三个source,任取其一即可
3. 分析弹出框
在爬取过程中,经过弹出需要登录的窗口,需要及时关闭掉,否则可能会导致找不到页面元素,从而爬取不成功。如下所示:
核心代码
经过以上分析,就可以编写爬虫代码了,
1. 遍历热点目录
通过获取页面上对应的信息,解析出热点视频的目录,如下所示:
Python学习交流Q群;660193417###
self.__driver.get(self.__url)
self.close_popup_window()
#4. 最大化窗口
self.__driver.maximize_window()
time.sleep(self.__wait_sec)
#打开以后,根据class=BHgRhxNh获取ul下的li
if self.checkIsExistsByClass(cls='BHgRhxNh'):
#获取
hots = self.__driver.find_elements(by=By.CLASS_NAME, value='BHgRhxNh')
hot_infos = []
index = 0
for hot in hots:
hot_info = {}
a = hot.find_element(by=By.TAG_NAME, value='a')
href = a.get_attribute("href")
text = a.text
hot_info['url'] = href
hot_info['text'] = text
if index > 0:
div = hot.find_element(by=By.CLASS_NAME, value='GsuT_hjh')
if div is not None:
hot_value = div.find_element(by=By.TAG_NAME, value='span').text
hot_info['value'] = hot_value
hot_infos.append(hot_info)
index = index + 1 print(hot_infos)
2. 获取真实短视频url
打开单个热点视频的url,并解析真实短视频播放url,如下所示:
python 学习交流Q群:660193417###
def open_video_html(self, url):
"""打开具体视频的页面"""
self.__driver.get(url=url)
time.sleep(1)
self.close_popup_window() # 关闭弹窗
video = self.__driver.find_element(by=By.TAG_NAME, value='video')
source = video.find_element(by=By.TAG_NAME, value='source')
src = source.get_attribute('src')
return src
3. 下载视频
获取真实的url后,即可进行下载,如下所示:
def download_video(self, url, video_name):
"""根据视频源地址进行下载"""
if os.path.exists(video_name):
# 如果已重新下载过,则不需要再次下载
return
else:
with open(video_name, 'wb') as fp:
fp.write(requests.get(url).content)
4. 关闭弹出的登录窗口
在爬取过程中,经常弹出需要登录的遮罩窗口,需要进行关闭,如下所示:
Python学习交流Q群:660193417####
def close_popup_window(self):
try:
login = self.__driver.find_element(by=By.ID, value='login-pannel')
if login is not None:
login.find_element(by=By.CLASS_NAME, value='dy-account-close').click()
except BaseException as e:
pass
try:
login = self.__driver.find_element(by=By.CLASS_NAME, value='GaDkStRD')
if login is not None:
btns = login.find_elements(by=By.TAG_NAME, value='button')
for btn in btns:
if btn.text == '取消':
btn.click()
break
except BaseException as e:
pass
5. 保存日志
在爬取成功后,对爬取的短视频的相关内容进行保存,如下所示:
def save_data(self, hot_infos):
"""
保存数据
:param res_list: 保存的内容文件
:return:
"""
t = time.strftime("%Y-%m-%d", time.localtime())
with open(f'logs[{t}].json', 'a', encoding='utf-8') as f:
res_list_json = json.dumps(hot_infos, ensure_ascii=False)
f.write(res_list_json)
示例截图
程序开发完成后,运行示例如下所示:
爬取的视频保存在download目录下,如下所示:
总结
为什么会采用selenium进行本次短视频的爬取,而不直接采用requests库,原因如下:
在对目标网站进行分析的过程中,发现目标网站采用异步调用的方式数据获取,即网址请求获取的只是空壳,并没有真实的数据。
在对异步接口调用的url进行分析时发现,很多接口的url都具有时效性及有效性验证,如token,时间戳等,构造起来相当麻烦。
由于以上两点原因,结合selenium的特点及优势,所以最终采用selenium进行此次爬虫的最佳选择。
相关阅读
-
在日常的学习、工作、生活中,大家都经常接触到作文吧,作文根据体裁的不同可以分为记叙文、说明文、应用文、议论文。你所见过的作文是什么样的呢?以下是小编为大家整理的演讲稿作文6篇...
-
好文章推荐给你...
-
实拍山西矿难真假记者排队领“封口费”近日,新闻出版总署对山西霍宝干河煤矿“封口费”事件中有据可查的涉案人员60人给予了处罚通报,其中有4名新闻记者被给予处分...
-
正在拉斯维加斯举办的全球最大的科技展CES,刚刚居然停电了......
-
如今的社会,抑郁症的发生频率已经越来越高了,我们经常发现,不但是自己的朋友、同事们深陷抑郁情绪的困扰,即使是那些看起来光鲜亮丽的明星们也时常被曝出有抑郁症的事情。...
-
初中语文作文素材:100个《央视主持人》中绝美的金句,写进作文堪称一绝!
关注微信公众号:初中语文,获取更多初中语文免费学习资料。...
-
中青看点资讯,了解全球前沿科技动态!在信息爆炸的时代,我们不仅需要从海量的信息中获取有价值的资讯,更需要一个可靠的平台来及时呈现给我们。中青看点资讯就是这样一个app应用...
-
第页 共页高中学霸学习方案表6篇时间流逝得如此之快,前方等待着我们的是新的机遇和挑战,是时候开场写方案了。...
-
中国经济网上海4月27日讯 记者李方 4月27日 全球家电及消费电子领域的� 级科技盛会——2023年中国家电及消费电子博览会 AWE2023 在上海新国际博览中心开幕 本届......
-
经济转型调整伴随着结构性市场出清,经济需求结构与生产函数随即发生重大变化,金融体系与实体经济的适配性、资金供需关系可能伴随发生......
-
《2019全球前沿科技热点研究》发布 揭秘7大领域20项硬核技术
先进制造业AMdaily制造强国战略指导下的产业信息服务平台会展 | 全媒体 | 咨询 | 沙龙 | 培训先进制造业·导...
发表评论
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件举报,一经查实,本站将立刻删除。