python爬虫学习教程,万物皆可爬!每个技术大牛都是从基础慢慢的提升上去的,基础知识越深以后的发展越牛!学好python,才能玩转python,那到底怎么才能学好python?
通过爬取b站案例带领你快速掌握爬虫,掌握学习技巧~带你揭开编程最神秘的面纱,解决学习路上的迷惑·~
对于初学者在学习python过程中有不懂的或是缺少这方面学习教程的可以加一下我建的python技术的学习裙;九三七六六七五零九,一起学习。群里有相关开发工具,学习教程,每天还有专业的老司机在线直播分享知识与技术答疑解惑!
项目源码
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 # @file : spider_bilibili_v2.py
4 # @author: 未衬
5
6 # 它可以模拟浏览器向网站发送一个请求[命令]
7 import requests
8
9 '''
10 编写爬虫的过程中 有两种写法
11
12 基于html去分析网页数据并删选
13 因为有些同学没有接触过前端 可能看不懂前端代码
14
15 ** 使用浏览器去分析这个网站的接口 [api] 找到它之后利用
16 requests去请求这个api 拿到api的数据[json] 字典 基本数据结构
17 利用字典的特性去获取字典中的数据并下载
18
19
20 json
21
22 requests
23
24 mysql
25 网页选择器
26 xpath
27 bs4
28
29 pyquery
30
31 scrapy
32 公司开发爬虫是基于框架去实现功能的
33 敏捷开发 快速
34 安全 信任的 能解决公司大多数的爬虫问题
35
36 redis
37 分布式系统
38 scrapy-redis 分布式爬虫
39 在多个服务器上部署多个爬虫去爬取同一目标
40 redis 快
41 '''
42
43
44 # 去获取api 利用requests去访问这个接口 模拟浏览器
45 # 禁止非浏览器访问的代码 一律禁止访问
46
47 # 400 403 全是错误 访问错误 哔哩哔哩这家公司导致
48 # 防止爬虫去过度的向服务器发请求 哔哩哔哩的后台服务器会出现过载的情况
49
50 def get_json(url):
51 # 伪装成浏览器向这个接口拿数据 作用域
52 headers = {
53 'user-agent':
54 'mozilla/5.0 (x11; linux x86_64) applewebkit/537.36 (khtml, like gecko) chrome/69.0.3497.100 safari/537.36'
55 }
56
57 # 分析api这个链接
58 # 在api中 会有一些关键字
59 # 如果这些关键字改变的话 那它返回的值也是不一样的
60
61 params = {
62 'page_size': 10,
63 'next_offset': str(num),
64 'tag': '今日热门',
65 'platform': 'pc',
66 }
67
68
69
70 try:
71 # 获取api的所有数据
72 html = requests.get(url, params=params, headers=headers)
73 return html.json()
74 except baseexception:
75 print('请求失败...')
76
77
78 def downloader(url, path):
79 # 初始化参数 当你在下载视频的时候 0kb开始一直到这个视频的总大小 在下载之前我们要定义这个视频
80 # 大小的参数
81 size = 0
82
83 # 伪装成浏览器向这个接口拿数据
84 headers = {
85 'user-agent':
86 'mozilla/5.0 (x11; linux x86_64) applewebkit/537.36 (khtml, like gecko) chrome/69.0.3497.100 safari/537.36'
87 }
88
89 # 取变量名一定见名起意
90 response = requests.get(url, headers=headers, stream=true)
91
92
93 # socket 做下载 io流 每次下载的数据大小 以1024作为一个节点
94 chunk_size = 1024
95
96 # 视频总大小 在python中是字典格式
97 content_size = int(response.headers['content-length'])
98 print(content_size)
99
100 if response.status_code == 200:
101 print('[文件大小]: %0.2f mb' % (content_size / chunk_size / 1024))
102
103 with open(path, 'wb') as file:
104 # 迭代响应数据
105 for data in response.iter_content(chunk_size=chunk_size):
106 file.write(data)
107 size += len(data)
108
109 # 入口函数
110 if __name__ == "__main__":
111 for i in range(10):
112 url = 'http://api.vc.bilibili.com/board/v1/ranking/top?'
113 # 翻页的值 动态的 11 21 31
114 num = i * 10 + 1
115
116 html = get_json(url)
117 infos = html['data']['items']
118
119 for info in infos:
120 # 小视频的标题
121 title = info['item']['description']
122
123 # 小视频的下载链接
124 video_url = info['item']['video_playurl']
125
126 print(title)
127
128 try:
129 downloader(video_url, path='./视频/%s.mp4' % title)
130 print('下载成功...')
131
132 except baseexception:
133 print('下载失败...')
134
135
136 '''
运行结果
代码不要直接复制,要自己动手敲,学习python一定要多动手!
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!