专栏首页Kirin博客多进程爬取电影

多进程爬取电影

这是一个多进程爬取电影的爬虫,因为下载电影的话用单进程是在苦不堪言,速度感人
一开始就遇到了一个大坑,尅是只是用了多进程,但是没有使用队列,最后发现下载下来的数据虽然
按照我预想的规则l+0000 .ts 这种格式来命名了,但是有个致命的地方,本来文件名字就是无序的,
然后没有使用队列的多进程又再一次打乱了顺序,导致最后拼接的电影成了ppt,然后就各种百度谷歌,
现学现卖吧,写了这个多进程的队列爬虫,下载速度还过得去,还有待优化呀。
 
import requests
import random
import multiprocessing
import time
 
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36'
         ' (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'} # 请求头
t=[
    '47.75.194.109:80',
    '202.117.121.253:8080',
    '47.101.134.187:8888',
    '112.74.185.33:80',
    '47.101.134.187:8888',
    '112.74.185.33:80',
    '118.24.7.218:80',
    '47.75.62.90:80',
    '47.52.209.8:80',
    '118.25.49.225:80',
]
# 代理ip池,可以去各大免费的代理ip网站上面爬下来自己维护一份可用的代理池,多线程的时候用得到
ht={'http':random.choice(t)} # 构造代理ip # 用random里面的choice 从ip列表里面随机抽一个ip来请求
def get_url():
    url = 'https://v3.szjal.cn'
    with open('./index.m3u8','r')as f:
        a=f.readlines() # 我这里是读取本地的文件,逐行读取
        aa=[]
        for x in a:
            if '/' in x: # 因为文件隔行就是一行干扰字符,所以跳过他,干扰字符是# 开头,
                        # 需要的链接地址是/开头,所以用if就可以判断了
                # aa.append(url+x[:-1]) # 返回一份列表 这里是用来测试队列是否按照index.m3u8的循环排列的
                q.put(url+x[:-1]) # 如果是正确的链接就加入队列中给多进程调用 这里进行了连接拼接操作
    # return aa
    
    
def download(url1,n):
    movies=requests.get(url1,headers=headers,proxies=ht).content
    with open(fr'./t/l{n}.ts','wb+')as f:
        f.write(movies)
        print('保存成功',url1) # 保存成功后返回提示信息
 
 
if __name__ == '__main__':
    s_time = time.time()
    q=multiprocessing.Queue() # 创建空的队列
    pool = multiprocessing.Pool(20) # 开启20个进程
    n=0 # 启动计数,用来重命名文件,
 
    while not q.empty(): # 如果队列不为空就一直执行下面的进程
        n+=1
        pool.apply_async(download,(q.get(),'%04d' % n)) # 开启多进程并传入n作为命名参数,共4位数字,不够用0占位
    pool.close() # 进程满了之后禁止在添加新的任务
    pool.join() # 进程阻塞
 
    print('总共用时:',int(time.time()-s_time),'s')
 
爬虫就到这了,有兴趣玩爬虫的可以一起玩玩呀
 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python代理ip检测

    kirin
  • vscode+Node搭建vue脚手架

    一路默认即可,安装完成之后win+r 打开cmd命令提示符,然后输入node -v 如果显示的是版本v12.16.3 这样的

    kirin
  • python 爬虫之搭建代理ip池–测试代理ip可用性

    kirin
  • Kafka,ZK集群开发或部署环境搭建及实验

    本文属于原创,转载注明出处,欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 https://xiaobaiai.net 或者我的CSDN http:...

    别打名名
  • 关于RxJava2.0你不知道的事(一)

    2017年的首篇文章,本次依旧带来一叶飘舟的开年之作,新的一年祝大家事业有成,爱情美满!

    开发者技术前线
  • 聊聊directory traversal attack

    又称Path Traversal attack,即目录遍历攻击,旨在访问web服务器根目录外的文件/目录。通过是通过url或变量里头传递”../“来进行目录遍历...

    codecraft
  • 零基础入门 39:Unity常用快捷键汇总

    很多同学在后台和我反馈说从Unity零基础入门,觉得知道Unity的常用快捷键很有必要,但是却不知道常用的都有什么,都是什么,既然问的人这么多,那这篇就来对快捷...

    韩东吉
  • String - 71. Simplify Path

    Given an absolute path for a file (Unix-style), simplify it. Or in other words, ...

    用户5705150
  • 如何使用SAP CRM Marketing Survey创建一个市场问卷调查

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang
  • 理解matplotlib、pylab与pyplot之间的关系

    这些模块其实功能都相同,程序运行的时候都在运行相同的code,不同的是导入模块的方式不同。

    OLDPAN

扫码关注云+社区

领取腾讯云代金券