目标
爬取找万物小视频,批量下载到本地。
项目准备
软件:Pycharm
第三方库:requests,fake_useragent
网站地址:https://3b.link/h5/brochures
网站分析
打开网站。
分析网页是什么加载类型。
F12打开开发者模式。
滑动鼠标,会自动加载数据包。
判断为动态加载类型。
页码分析
第一页:https://api.3b.link/Api/Brochure/HomeList?page=1&pageSize=15
第二页:https://api.3b.link/Api/Brochure/HomeList?page=2&pageSize=15
第三页:https://api.3b.link/Api/Brochure/HomeList?page=3&pageSize=15
第四页:https://api.3b.link/Api/Brochure/HomeList?page=4&pageSize=15
第五页:https://api.3b.link/Api/Brochure/HomeList?page=5&pageSize=15
根据每页的链接可以找到规律。只要page=之后数字的变化。
反爬分析
同一个ip地址去多次访问会面临被封掉的风险,这里采用fake_useragent,产生随机的User-Agent请求头进行访问。
代码实现
1.导入相对应的第三方库,定义一个class类继承object,定义init方法继承self,主函数main继承self。
import requests
from lxml import etree
from fake_useragent import UserAgent
class creation(object):
def __init__(self):
self.url = 'https://api.3b.link/Api/Brochure/HomeList?page={}&pageSize=15'
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 = creation()
spider.main()
2.发送请求,获取网页。
def get_html(self,url):
response=requests.get(url,headers=self.headers)
html=response.json()
return html
3.解析网页获取视频链接地址。
扫描二维码关注公众号,回复:
12572713 查看本文章
def parse_html(self,html):
content_list=html['data']
for content in content_list:
merchantName=content['merchantName']
videoUrl=content['videoUrl']
filename=merchantName
r=requests.get(videoUrl,headers=self.headers)
with open('F:/pycharm文件/photo/'+filename+'.mp4','wb') as f:
f.write(r.content)
4.主函数及函数调用。
def main(self):
start = int(input('输入开始:'))
end = int(input('输入结束页:'))
for page in range(start, end + 1):
print('第%s页' % page)
url = self.url.format(page)
html=self.get_html(url)
self.parse_html(html)
效果显示
完整代码如下:
import requests
from fake_useragent import UserAgent
class creation(object):
def __init__(self):
self.url = 'https://api.3b.link/Api/Brochure/HomeList?page={}&pageSize=15'
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['data']
for content in content_list:
merchantName=content['merchantName']
videoUrl=content['videoUrl']
filename=merchantName
r=requests.get(videoUrl,headers=self.headers)
with open('F:/pycharm文件/photo/'+filename+'.mp4','wb') as f:
f.write(r.content)
def main(self):
start = int(input('输入开始:'))
end = int(input('输入结束页:'))
for page in range(start, end + 1):
print('第%s页' % page)
url = self.url.format(page)
html=self.get_html(url)
self.parse_html(html)
if __name__ == '__main__':
spider = creation()
spider.main()