目标
爬取6间房小视频,批量保存到本地文件夹。
项目准备
软件:Pycharm
第三方库:requests,fake_useragent
网站地址:https://v.6.cn/minivideo/
网站分析
打开网站
分析网页是什么加载类型。
F12打开开发者模式。
这是抓取的数据包。
判断为动态加载类型。
页码分析
第一个数据包:
第二个数据包:
第三个数据包:
https://v.6.cn/minivideo/getMiniVideoList.phpact=recommend&page=1&pagesize=25
https://v.6.cn/minivideo/getMiniVideoList.phpact=recommend&page=2&pagesize=25
https://v.6.cn/minivideo/getMiniVideoList.phpact=recommend&page=3&pagesize=25
可以看出来,每一页随着页码page=而变化。
反爬分析
同一个ip地址去多次访问会面临被封掉的风险,这里采用fake_useragent,产生随机的User-Agent请求头进行访问。
代码实现
1.导入相对应的第三方库,定义一个class类继承object,定义init方法继承self,主函数main继承self。
import requests
from fake_useragent import UserAgent
class sixroom(object):
def __init__(self):
self.url = 'https://v.6.cn/minivideo/getMiniVideoList.php?act=recommend&page={}&pagesize=25'
ua = UserAgent(verify_ssl=False)
for i in range(1, 100):
self.headers = {
'User-Agent': ua.random
}
def main(self):
pass
if __name__ == '__main__':
spider = sixroom()
spider.main()
2.发送请求,获取网页。
def get_html(self,url):
response = requests.get(url, headers=self.headers)
html = response.json()
return html
3.解析网页获取小视频链接地址并保存到本地。
def parse_html(self,html):
content_list=html['content']['list']
for data in content_list:
alias=data['alias']
title=data['title']
playurl=data['playurl']
filename=alias+'.'+title
print(filename)
r=requests.get(playurl,headers=self.headers)
with open('F:/pycharm文件/document/'+filename+'.mp4','wb') as f:
f.write(r.content)
4.主函数及函数调用。
def main(self):
end_page = int(input("要爬多少页:"))
for page in range(1, end_page + 1):
url = self.url.format(page)
print("第%s页。。。。" % page)
html = self.get_html(url)
self.parse_html(html)
print("第%s页爬取完成" % page)
效果显示
完整代码如下:
import requests
from fake_useragent import UserAgent
class sixroom(object):
def __init__(self):
self.url = 'https://v.6.cn/minivideo/getMiniVideoList.php?act=recommend&page={}&pagesize=25'
ua = UserAgent(verify_ssl=False)
for i in range(1, 100):
self.headers = {
'User-Agent': ua.random
}
def get_html(self,url):
response = requests.get(url, headers=self.headers)
html = response.json()
return html
def parse_html(self,html):
content_list=html['content']['list']
for data in content_list:
alias=data['alias']
title=data['title']
playurl=data['playurl']
filename=alias+'.'+title
print(filename)
r=requests.get(playurl,headers=self.headers)
with open('F:/pycharm文件/document/'+filename+'.mp4','wb') as f:
f.write(r.content)
def main(self):
end_page = int(input("要爬多少页:"))
for page in range(1, end_page + 1):
url = self.url.format(page)
print("第%s页。。。。" % page)
html = self.get_html(url)
self.parse_html(html)
print("第%s页爬取完成" % page)
if __name__ == '__main__':
spider = sixroom()
spider.main()
声明:仅做自己学习参考使用。