美文网首页
python3爬虫爬取youtube订阅内容

python3爬虫爬取youtube订阅内容

作者: 93f14e840e36 | 来源:发表于2018-08-04 15:30 被阅读0次

    之前由于简直需要爬取youtube视频,于是我就订阅了大量关于游戏类的视频的创作作者,但是要自己一个个打开视频内容来复制粘贴地址和名字到txt或者word上面是在太麻烦。

    在寻找一堆爬虫过后无果后,就自己写了一个爬取youtube订阅内容的简单爬虫。

    1.创建python程序

    在此处需要建立一个编译环境,由于我自己用的是pycharm,这个地方就不赘述了。

    2.导入需要使用的包

    import urllib.request as req             #爬虫常用的包,用于访问网页并获得其中内容

    import re                                         #正则表达式的使用包,用于实现正则表达式书写

    import datetime                              #关于时间的包,通常用于获取时间相关的内容


    这里的相关包都是python3自带的包,如果是python2相关的版本,缺少的话自己使用pip命令安装

    3.写入获取网页的相关代码

    url_ytb_s = 'https://www.youtube.com/feed/subscriptions'

    #辨别个人的cookie

    cookie的内容

    此处需要说明的是,因为我们每个人的订阅内容不一样,所以需要通过youtube需要通过cookie验证你的个人身份,因此需要在打开订阅页面的时候加上cookie验证来获得你个人的订阅内容。

    cookie的获取

    这里的cookie获取可以使用浏览器查看,我个人使用的是chrome,按下F12,再点击订阅内容,查看subscripiton的那个XHR文件的请求cookie即可看到在请求订阅内容时候使用的cookie。

    完整的请求页面代码如下:

    #辨别个人的cookie

    cookie_youtube = 'APISID=08pQtyBJUwqu7asv/A1YdKNnP4c-LzIglG;' \ 'CONSENT=YES+CN.zh-CN+20170813-09-1;' \ 'HSID=ArNjTDZ4DW3-duwpD;' \ 'LOGIN_INFO=AFmmF2swRQIgYtrv-ph4o3QnULfpTUetmqOCC-WEOT6a3GR-r4jFUycCIQDJ-4fpb6g6Iqrv9cPKgLmbIz8K3rR3vooN2TNXCMHZHA:QUQ3MjNmekVoMVhFVW5YWGpOeEJFejIxYjByQ2xqMFRSVGthREJ6LVVoQjBNT2FUVng2cV96VUhwd0g0VlNSZFU0aHpTdHA2bUd4Q1JST0pwMkZYcklEUWJWYlRXaWduRGlneTNOX0h6c2dEU29pMDFqcHZvZHZXUDRURHZmb0NsOE1ZckdkbGR2UlVVRmJrUHBzbTFXdk9RYi01YXdLRXFiTHlFR1dhNHNQbEluN3ExUUlqbThZ;' \ 'PREF=f1=50000000&al=zh-CN;' \ 'SAPISID=4g9YstiqqkcAtARd/A2kSQFDk6sCJ_N4dk;' \ 'SID=SgZ3TrvX0tuz1IgxhrY3EgD5KanguFlz5_fzzK7GTNmzM0uoxIcyp2xX4wpW5RnUarknUA.;' \ 'SSID=A6G-g9j6cnQUBNLJd;' \ 'ST-1tzw2b8=itct=CCQQtSwYAiITCLKktsOAwtwCFQsOKgodVxML2TIKZy1wZXJzb25hbA%3D%3D&csn=Z31cW8ecJtqioQPHx6uADg;' \ 'VISITOR_INFO1_LIVE=xBfJyY4sUN0;' \ 'YSC=zpD1N6BAjx4;'

    #模拟浏览器访问使用的头信息

    header = {'User-Agent':' Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36', 'Connection': ' keep-alive', 'Cookie':cookie_youtube}

    request_ytb = req.Request(url=url_ytb_s,headers=header) #带着浏览器的头信息去请求这个我们订阅的网页

    response_ytb = req.urlopen(request_ytb) #得到返回信息并打开,获得网页内容

    html = response_ytb.read().decode('utf8') #读取网页内容,并转码成utf8的编码形式,此处如果不转码会发现其中的汉字被转换成其他的编码形式


    4.获取视频的名字和地址

    这里我们已经获得了订阅内容页面的所有信息,如何从这里面找到需要的内容就需要使用正则表达式了。

    相关代码如下:

    #获得视频名字的正则表达式

    ytb_name_pattern = re.compile(r'},\"title\":{\"accessibility\":{\"accessibilityData\":{"label\":\"(.*?)来自')

    #获得视频地址的正则表达式

    ytb_address_patter = re.compile(r'\"url\":\"/watch\?v=(.*?)\",\"webPageType\":\"WEB_PAGE_TYPE_WATCH\"}},\"watchEndpoint\":{\"videoId\":\"')

    #获取所有符合正则表达式的视频名字,并存储在名为result_name的列表里

    result_name = re.findall(ytb_name_pattern,html)

    #获取所有符合正则表达式的视频地址,并存储在名为result_naddress的列表里

    result_address = re.findall(ytb_address_patter,html)


    5.关于内容的存储

    获得了需要的信息之后需要进行存储,我们这里根据日期创建每日的订阅内容,来创建不同日期的txt以便存储。

    代码如下:

    #获取当日订阅的时间

    today = datetime.datetime.now()

    file_name = str(today.year)+'-'+str(today.month)+'-'+str(today.day)

    #print(file_name)

    #在指定文件夹的地址内创建存储订阅内容的txt文件,此处可以将 F:\work_log\ 替换为你需要存储文件的地址

    file_adr = 'F:\\work_log\\'+file_name+'.txt'

    log_point = 0

    fr = open(file_adr,'w')

    #打印出所有符合正则表达式的内容 while log_point

    while log_point<len(result_name):

    # fr.writelines('https://www.youtube.com/watch?v='+result_address[log_point])

    # fr.writelines('#北京搬运#'+result_name[log_point])

    # fr.writelines('#北京搬运#' + result_name[log_point].encode('utf-8'))

    print('https://www.youtube.com/watch?v=' + result_address[log_point])

    print(result_name[log_point], '\n',log_point+1,'\n')

    log_point += 1

    fr.close()


    这里需要说明的地方是,在没有使用科学上网的情况下是没有办法获得订阅内容的,所以在运行时,要保证你能进得去youtube的网站。还有就是这里没有直接将得到的内容直接放入写好的txt文件里,是因为在写入的时候会出现编码错误,所以这里只能是打印出来,然后人工复制粘贴到已经创建好的txt文件里,以待后期修复

    youtube订阅内容的所有代码

    相关文章

      网友评论

          本文标题:python3爬虫爬取youtube订阅内容

          本文链接:https://www.haomeiwen.com/subject/hifqvftx.html