前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多进程爬取电影

多进程爬取电影

作者头像
kirin
发布2020-05-09 15:43:20
3740
发布2020-05-09 15:43:20
举报
文章被收录于专栏:Kirin博客
代码语言:javascript
复制
这是一个多进程爬取电影的爬虫,因为下载电影的话用单进程是在苦不堪言,速度感人
一开始就遇到了一个大坑,尅是只是用了多进程,但是没有使用队列,最后发现下载下来的数据虽然
按照我预想的规则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')
 
爬虫就到这了,有兴趣玩爬虫的可以一起玩玩呀
 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档