python3爬虫爬取youtube订阅内容

2018-08-04  本文已影响0人  93f14e840e36

之前由于简直需要爬取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订阅内容的所有代码

上一篇下一篇

猜你喜欢

热点阅读