这里记录的是我学习爬虫自己用到的一些东西,方便以后打开直接使用。我会不定期的往里面添加内容。
爬虫工具库-spidertools.cn
协程
模板1(通过loop):
python
async def download()
pass
async def main():
# 创建任务队列
tasks = []
for..........{
# 使用for循环调用其它异步函数,添加到任务队列中
asks.append(asyncio.create_task(download()))
}
# 打包提交队列
await asyncio.gather(*tasks)
if __name__ == '__main__':
# 创建loop
loop = asyncio.get_event_loop()
# 通过loop执行异步函数
loop.run_until_complete(main())
模板2(通过asyncio):
python
async def download()
pass
async def main():
# 创建任务队列
tasks = []
for..........{
# 使用for循环调用其它异步函数,添加到任务队列中
asks.append(asyncio.create_task(download()))
}
# 等待任务结束
await asyncio.wait(tasks)
if __name__ == '__main__':
asyncio.run(main())
python运行js模板
python
import execjs
# 打开本地js文件,读取文件内容后通过execjs.compile函数将其转换成js代码暂存在ctx中
with open('baidu.js', 'r', encoding='utf-8') as f:
ctx = execjs.compile(f.read())
# 使用 ctx.call 函数来调用JS代码中的函数
# 第一个参数:想要调用的js中的函数
# 第二个参数:传入的值
res = ctx.call('hello', lis)
ffmpeg视频合成
在爬取视频的时候通常是通过m3u8来获取到视频的ts切片,需要把他们全部合成为一个视频切片。
def concat():
video = 'output.mp4' # 视频输出地址
ts_locat = './视频切片' # ts文件路径
# 获取所有的 .ts 文件
ts_files = [f for f in os.listdir(ts_locat) if f.endswith('.ts')]
ts_files.sort() # 排序以确保正确的顺序
# 将排序好的ts文件目录按行依次写入到一个txt文本中
with open('concat_list.txt', 'w', encoding='utf-8') as f:
for ts_file in ts_files:
f.write(f"file '{ts_locat+ '/' +ts_file}'\n")
# 使用 ffmpeg 读取文本中的ts文件目录地址,按顺序拼接所有的 .ts 文件
ffmpeg.input('concat_list.txt', format='concat', safe=0).output(video, c='copy').run()