Python爬虫学习教程,万物皆可爬!每个技术大牛都是从基础慢慢的提升上去的,基础知识越深以后的发展越牛!学好python,才能玩转python,那到底怎么才能学好python?
通过爬取b站案例带领你快速掌握爬虫,掌握学习技巧~带你揭开编程最神秘的面纱,解决学习路上的迷惑·~
对于初学者在学习Python过程中有不懂的或是缺少这方面学习教程的可以加一下我建的Python技术的学习裙;九三七六六七五零九,一起学习。群里有相关开发工具,学习教程,每天还有专业的老司机在线直播分享知识与技术答疑解惑!
项目源码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : spider_bilibili_v2.py
# @Author: 未衬
# 它可以模拟浏览器向网站发送一个请求[命令]
import requests
'''
编写爬虫的过程中 有两种写法
基于html去分析网页数据并删选
因为有些同学没有接触过前端 可能看不懂前端代码
** 使用浏览器去分析这个网站的接口 [api] 找到它之后利用
requests去请求这个api 拿到api的数据[json] 字典 基本数据结构
利用字典的特性去获取字典中的数据并下载
json
requests
mysql
网页选择器
xpath
bs4
pyquery
scrapy
公司开发爬虫是基于框架去实现功能的
敏捷开发 快速
安全 信任的 能解决公司大多数的爬虫问题
redis
分布式系统
scrapy-redis 分布式爬虫
在多个服务器上部署多个爬虫去爬取同一目标
redis 快
'''
# 去获取api 利用requests去访问这个接口 模拟浏览器
# 禁止非浏览器访问的代码 一律禁止访问
# 400 403 全是错误 访问错误 哔哩哔哩这家公司导致
# 防止爬虫去过度的向服务器发请求 哔哩哔哩的后台服务器会出现过载的情况
def get_json(url):
# 伪装成浏览器向这个接口拿数据 作用域
headers = {
'User-Agent':
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
# 分析api这个链接
# 在api中 会有一些关键字
# 如果这些关键字改变的话 那它返回的值也是不一样的
params = {
'page_size': 10,
'next_offset': str(num),
'tag': '今日热门',
'platform': 'pc',
}
try:
# 获取api的所有数据
html = requests.get(url, params=params, headers=headers)
return html.json()
except BaseException:
print('请求失败...')
def downloader(url, path):
# 初始化参数 当你在下载视频的时候 0kb开始一直到这个视频的总大小 在下载之前我们要定义这个视频
# 大小的参数
size = 0
# 伪装成浏览器向这个接口拿数据
headers = {
'User-Agent':
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
# 取变量名一定见名起意
response = requests.get(url, headers=headers, stream=True)
# socket 做下载 IO流 每次下载的数据大小 以1024作为一个节点
chunk_size = 1024
# 视频总大小 在python中是字典格式
content_size = int(response.headers['content-length'])
print(content_size)
if response.status_code == 200:
print('[文件大小]: %0.2f MB' % (content_size / chunk_size / 1024))
with open(path, 'wb') as file:
# 迭代响应数据
for data in response.iter_content(chunk_size=chunk_size):
file.write(data)
size += len(data)
# 入口函数
if __name__ == "__main__":
for i in range(10):
url = 'http://api.vc.bilibili.com/board/v1/ranking/top?'
# 翻页的值 动态的 11 21 31
num = i * 10 + 1
html = get_json(url)
infos = html['data']['items']
for info in infos:
# 小视频的标题
title = info['item']['description']
# 小视频的下载链接
video_url = info['item']['video_playurl']
print(title)
try:
downloader(video_url, path='./视频/%s.mp4' % title)
print('下载成功...')
except BaseException:
print('下载失败...')
'''
运行结果
代码不要直接复制,要自己动手敲,学习Python一定要多动手!