Python实战爬虫,爬取新片场视频数据
蚂蚁学Python
共 8234字,需浏览 17分钟
·
2022-07-06 13:16
任务简介
从蚂蚁学python的群里面接到这个单,从单上看需求是这样的,爬取新片场视频音乐图片,有一个爬虫Scrapy代码,已经有程序了,需要调试运行成功。关键是用客户的电脑远程操作并进行全程用录屏录像。毕竟自己也学习完了爬虫,那就试一下。和客户联系上后,了解完客户真实的需求,最后客户的需求是这样的。
难点
爬取的内容很多,涉及到视频、图片、和音乐,关键是要远程用客户的电脑进行操作写代码,并一步一步的分析操作讲解给客户。为了代码清晰,将需求一个一个的分开,分多个程序去写。自己先完成一遍代码程序。
代码实现
文章主要介绍爬取新片场首页精品收藏夹发布的视频,具有代表性。
其中用到的技术,是前不久从帅帅老师视频那里学到的selenium,代码结构如下:
options = webdriver.ChromeOptions()
options.add_argument('--headless')
self.driver = webdriver.Chrome(options=options)
self.driver.get(url)
WebDriverWait(self.driver, timeout=10).until(
lambda x: "评论" in self.driver.page_source)
page_text = self.driver.page_source
html = etree.HTML(page_text)
src = html.xpath(
'//*[@id="xpcplayer"]/div/div[2]/video/@src')[0]
话不多说直接上完整代码
import os
import time
import requests
from fake_useragent import UserAgent
from lxml import etree
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import re
# 爬去新片场素材视频进行视频下载
class xinPianChangShouCangJiaVideo:
def __init__(self):
# 创建options对象
options = webdriver.ChromeOptions()
# 开启无界面模式 给对象添加无头参数
options.add_argument('--headless')
# 实例化带有配置的driver对象
self.driver = webdriver.Chrome(options=options)
# 伪装请求头
user_agent = UserAgent().random
self.headers = {'User-Agent': user_agent}
# 保存视频路径
path = os.getcwd()
self.filename = path + '\\' + '精品收藏夹视频'
isExists = os.path.exists(self.filename)
if not isExists:
os.makedirs(self.filename)
print(self.filename + ' 创建成功')
else:
print(self.filename + ' 目录已存在')
# 获取每个视频的超链接
def getEachVideoUrl(self):
url = 'https://www.xinpianchang.com/bookmark/663078'
print(url)
res = requests.get(url, headers=self.headers)
html = etree.HTML(res.content.decode())
# 每个视频的URL
href = html.xpath(
'//*[@id="__next"]/section/main/div/div[1]/div[2]/div[*]/div[1]/div[1]/a/@href')
# 每个视频的名字
title = html.xpath(
'//*[@id="__next"]/section/main/div/div[1]/div[2]/div[*]/div[1]/div[2]/div[1]/a/text()')
# print(href)
return title, href
# 下载每一个视频
def DownloadEveryVideo(self):
# 用request 请求是请求不到的,结果放在一个js里面了
title, href = self.getEachVideoUrl()
# title = ['建国70周年宣传片《70,我一直爱着你》']
# href = ['https://www.xinpianchang.com/a10548298?from=articleCollectDetail']
for i in range(len(href)):
url = href[i]
print(f"正在爬取的视频链接: {url}")
self.driver.get(url)
# 评论关键词出现了,页面就是加载完毕
WebDriverWait(self.driver, timeout=10).until(
lambda x: "评论" in self.driver.page_source)
time.sleep(1)
page_text = self.driver.page_source
html = etree.HTML(page_text)
# 每个视频的直连
src = html.xpath(
'//*[@id="xpcplayer"]/div/div[2]/video/@src')[0]
try:
# 请求视频地址,保存视频,有可能视频地址无效的情况
res = requests.get(src, headers=self.headers)
print(title[i])
# title含特殊字符问题需要处理一下
name = re.sub(r'[:/\\?*“”<>|]', '_', title[i])
with open(self.filename + '\\' + f'{i + 1}_{name}.mp4', 'wb') as f:
f.write(res.content)
print(f, '下载完成')
except Exception as e:
print(e)
# 主函数
def main(self):
# 开始时间
start_time = time.time()
self.DownloadEveryVideo()
use_time = int(time.time()) - int(start_time)
print(f'爬取总计耗时:{use_time}秒')
self.driver.quit()
if __name__ == '__main__':
scjv = xinPianChangShouCangJiaVideo()
scjv.main()
完成了这一个爬虫那么其他需求的爬虫也就相对好一些,原理都是大同小异,都是相互通的。
关键是要远程用客户的电脑进行操作写代码,并一步一步的分析操作讲解给客户,考虑到客户的接受程度,最后给客户讲解花了3小时。
最后展示一下成果
今晚来蚂蚁老师抖音直播间,Python带副业全套餐有优惠!!!
评论