大家好,本文将围绕python网络爬虫爬取数据展开说明,如何用python爬取数据是一个很多人都想弄明白的事情,想搞清楚利用python爬取数据需要先了解以下几个事情。
requests库是什么?
requests库是一个用于发送HTTP请求的Python库。它提供了一种简单而优雅的方式来处理HTTP通信,包括发送GET、POST和其他类型的请求,处理Cookie、会话管理、身份验证等功能怎么用python画五瓣花朵。使用requests库,你可以轻松地与Web服务器进行交互,获取响应内容、处理响应头部信息、处理错误等。它是Python中最常用的HTTP库之一,被广泛用于网络爬虫、API调用和Web开发等应用场景。
1
requests库的安装
pip install requests
2
requests 的使用
使用方法
示例:
import requests
# get请求方式
r = requests.get('http://www.baidu.com')
# 响应类型
print(type(r))
# 状态码
print(r.status_code)
# 响应体的类型为字符串(str)
print(type(r.text))
# 响应内容
print(r.text[:100])
# 响应 cookit
print(r.cookies)
运行结果:
# 响应类型
<class 'requests.models.Response'>
# 状态码
200
# 响应体的类型为字符串(str)
<class 'str'>
# 响应类型
<!DOCTYPE html>
# 响应内容
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charse
# 响应 cookit
<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
其它请求类型
示例:
# GET请求
r = requests.get('http://www.baidu.com/get')
# POST请求
r = requests.post('http://www.baidu.com/post')
# PUT请求
r = requests.put('http://www.baidu.com/put')
# DELETE请求
r = requests.delete('http://www.baidu.com/delete')
# PATCH请求
r = requests.patch('http://www.baidu.com/patch')
GET 请求
示例:
import requests
r = requests.get('http://www.httpbin.org/get')
# 显示请求头,URL,IP等信息
print(r.text)
运行结果:
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "www.httpbin.org",
"User-Agent": "python-requests/2.28.1",
"X-Amzn-Trace-Id": "Root=1-6303c25e-1b115b387fa817f26cca2927"
},
"origin": "175.9.202.241",
"url": "http://www.httpbin.org/get"
}
传递参数
params 方法
示例:
import requests
# 变量(data)关联添加的参数
data = {
'name': 'test',
'age': '25'
}
# params方法写入参数
r = requests.get('http://www.httpbin.org/get', params=data)
print(r.text)
运行结果:
{
"args": {
"age": "25",
"name": "test"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "www.httpbin.org",
"User-Agent": "python-requests/2.28.1",
"X-Amzn-Trace-Id": "Root=1-6303c3a4-7dcebbd57d7e38b84cf68703"
},
"origin": "175.9.202.241",
"url": "http://www.httpbin.org/get?name=test&age=25"
}
网页返回的类型为字符串(str)类型,是 JSON 格式
调用 JSON 方法返回结果转化为字典.
示例:
import requests
r = requests.get('http://www.httpbin.org/get')
print(type(r.text))
# json 方法显示结果,该结果为字典类型
print(r.json())
# 字典(dict)类型
print(type(r.json()))
运行结果:
<class 'str'>
{'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'www.httpbin.org', 'User-Agent': 'python-requests/2.28.1', 'X-Amzn-Trace-Id': 'Root=1-6303c57f-5f462dd966656b4f6b87741b'}, 'origin': '175.9.202.241', 'url': 'http://www.httpbin.org/get'}
<class 'dict'>
注:如果返回结果不是 JSON 格式,则报错,json.decoder.JSONDecodeError异常.
3
抓取网页
示例:
import requests
import re
# requests.get方法请求 url
r = requests.get('https://ssr1.scrape.center/'
# re.compile创建正则模块,re.S:使匹配内容包括换行符在内的所有字符
w = re.compile('<h2.*?>(.*?)</h2>', re.S)
# re.findall方法:获取正则表达式相匹配的所有字符,w:指定正则模块,r.text:指定响应内容
test = re.findall(w, r.text)
print(test)
运行结果:
# 列表格式
['霸王别姬 - Farewell My Concubine', '这个杀手不太冷 - Léon', '肖申克的救赎 - The Shawshank Redemption', '泰坦尼克号 - Titanic', '罗马假日 - Roman Holiday', '唐伯虎点秋香 - Flirting Scholar', '乱世佳人 - Gone with the Wind', '喜剧之王 - The King of Comedy', '楚门的世界 - The Truman Show', '狮子王 - The Lion King']
4
抓取二进制数据
抓取图片,音频,视频,本质都是二进制数据
示例:
import requests
# 获取网站 ico 文件
r = requests.get('https://scrape.center/favicon.ico')
# 显示 ico 文件内容
print(r.text)
# content返回的是bytes型也就是二进制的数据
print(r.content)
运行结果:
# 因为是图片,直接乱码,打印结果是 str 类型,图片转化成了 str 所以报错
W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?��W?
# 前面带个 b,说明content返回的是bytes型也就是二进制的数据
b'\x00\x00\x01\x00\x01\x00 \x00\x00\x01\x00 \x00\xa8\x10\x00\x00\x16\x00\x00\x00(\x00\x00\x00 \x00\x00\x00@\x00\x00\x00\x01\x00
示例:
示例:
将爬取下来图片的二进制数据存入本地favicon.ico里,这样图片就会被保存到本地
import requests
r = requests.get('https://scrape.center/favicon.ico')
# 将爬取下来图片的二进制数据存入本地favicon.ico里,这样图片就会被保存到本地
with open('favicon.ico', 'wb') as f:
f.write(r.content)
运行结果:
# 文件夹下会有favicon.ico图片
5
添加请求头
发起 HTTP 请求,有个请求头(Request headers),使用 headers 参数
示例:
import requests
# 指定变量(headers)字典的内容
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36',
}
r = requests.get('https://ssr1.scrape.center/', headers=headers)
print(r.text)
运行结果:
<html lang="en">
<head>
''''''''
6
POST请求
示例:
import requests
data = {'name': 'test', 'age':'25' }
r = requests.post('https://www.httpbin.org/post', data=data)
print(r.text)
运行结果:
{
"args": {},
"data": "",
"files": {},
# form 部分就是提交的数据,name:test,age:25
"form": {
"age": "25",
"name": "test"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "16",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "www.httpbin.org",
"User-Agent": "python-requests/2.28.1",
"X-Amzn-Trace-Id": "Root=1-630c1d93-3a4e6ff30b2775394a6e8425"
},
"json": null,
"origin": "175.10.5.197",
"url": "https://www.httpbin.org/post"
}
响应
获取其它信息:状态码,响应头,Cookit 等
示例:
import requests
r = requests.get('https://ssr1.scrape.center/')
# 状态码类型,状态码
print(type(r.status_code), r.status_code)
# 响应类型,响应体
print(type(r.headers), r.headers)
# Cookit类型,Cookit
print(type(r.cookies), r.cookies)
# url 类型,url
print(type(r.url), r.url)
# history类型,请求历史
print(type(r.history), r.history)
运行结果:
<class 'int'> 200
<class 'requests.structures.CaseInsensitiveDict'> {'Date': 'Mon, 29 Aug 2022 02:08:13 GMT', 'Content-Type': 'text/html; charset=utf-8', 'Content-Length': '41667', 'Connection': 'keep-alive', 'Server': 'Lego Server', 'Cache-Control': 'max-age=600', 'Expires': 'Mon, 29 Aug 2022 02:18:13 GMT', 'X-Frame-Options': 'DENY', 'X-Content-Type-Options': 'nosniff', 'Strict-Transport-Security': 'max-age=15724800; includeSubDomains', 'X-NWS-LOG-UUID': 'a3b13c77-73a8-43be-b3eb-9da34d7543e8', 'X-Cache-Lookup': 'Cache Miss', 'X-Daa-Tunnel': 'hop_count=1'}
<class 'requests.cookies.RequestsCookieJar'> <RequestsCookieJar[]>
<class 'str'> https://ssr1.scrape.center/
<class 'list'> []
requests 库内置状态码查询对象,对比状态码,判断
示例:
import requests
r = requests.get('https://ssr1.scrape.center/')
# 对比返回码和内置的表示成功的状态码,来保证请求是否正常响应
exit() if not r.status_code == requests.codes.ok else print('Request Successfully')
运行结果:
Request Successfully
其它状态码
1**: 信息性状态码
2**: 成功状态码
3**: 重定向状态码
4**: 客户端状态码
5**: 服务器错误状态码
文件使用方式标识
‘r’:默认值,表示从文件读取数据
‘w’:表示要向文件写入数据,并截断以前的内容
‘a’:表示要向文件写入数据,添加到当前内容尾部
‘r+’:表示对文件进行可读写操作(删除以前的所有数据)
‘r+a’:表示对文件可进行读写操作(添加到当前文件尾部)
‘b’:表示要读写二进制数据。
5
高级用法
文件上传
网站上传文件
示例:
import requests
# 读取二进制文件 favicon.ico,
files = {'file': open('favicon.ico,并以', 'rb')}
r = requests.post('https://www.httpbin.org/post', files=files)
print(r.text)
运行结果:
{
"args": {},
"data": "",
"files": {
# 证明文件上传会单独使用 files 字段来标识
"file": "data:application/octet-stream;base64,AAABAAEAI......"
},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "4433",
"Content-Type": "multipart/form-data; boundary=351b07a2393dd70145e4f994ac82df48",
"Host": "www.httpbin.org",
"User-Agent": "python-requests/2.28.1",
"X-Amzn-Trace-Id": "Root=1-630c264a-1adfbd9302f3c7293e9defff"
},
"json": null,
"origin": "175.10.5.197",
"url": "https://www.httpbin.org/post"
}
Cookit 设置
获取Cookit值
示例:
import requests
r = requests.get('https://www.bilibili.com/')
print(r.cookies)
# items(): 转换为由元组组成的列表
# 迭代循环
for key, value in r.cookies.items():
print(key + '=' + value)
运行结果:
<RequestsCookieJar[<Cookie buvid3=878525DA-9130-7492-E1D3-6EF79EC16CA320305infoc for .bilibili.com/>, <Cookie innersign=0 for .bilibili.com/>]>
buvid3=878525DA-9130-7492-E1D3-6EF79EC16CA320305infoc
innersign=0
维持 Cookit 登录状态
示例:
import requests
# 复制 cookit 值
headers = {
'Cookit': '_octo=GH1.1.1434622938.1661822169; tz=Asia/Shanghai; _device_id=fa584be84f1dc7a499c98764d44d5aa3; preferred_color_mode=dark; has_recent_activity=1; user_session=j6k9o6IikOLwKX-84RUu6h5Bjj9hRPDrIOsehbZZN8yg57BN; __Host-user_session_same_site=j6k9o6IikOLwKX-84RUu6h5Bjj9hRPDrIOsehbZZN8yg57BN; tz=Asia/Shanghai; color_mode={"color_mode":"auto","light_theme":{"name":"light","color_mode":"light"},"dark_theme":{"name":"dark","color_mode":"dark"}}; logged_in=yes; dotcom_user=dageheshui; _gh_sess=w0sO24Nv5PWF2h6XkXbkx0K5BDJjs9EnWXEUCwitl+3yfIv15cmz/l7Iof2EszYh2urGstLeMPNLHEuLa2SfB1PTIhZ/87k8AxOet1SJ6DW5Wr6Z+44UqFUKfpNlbWVjeVnaD1nypqDobpxWvc455OmDx6YQ8G05JcO/Tc3Up8Sn65GBByMH8CDKRRi5UD0bbFUz5F3dV2cRJ8Kfh4osEI58IB4d4xHeEx8AhpQni3HDL/TLirSi5NP289Pj32najW14O1iWI1g4jOWgmAaj00XFLJWRwKDsIKqGgyXmCB9C1TzDk53SC7Tg2m90Z465YQh0ujRaRcaVTt5LUItzG1W//twXaIWlR4A6275cCJJ7ChZFhFvhQdGDddfydLVuHQh6klCLRDeAAAdXaJHNZvPq44LAYrg2Iq3S5yB0GxGjtVujNUHoaN90/XRaHe5LtxiF+vu6eOalEpGeJzcrJrMlIsxihqZRG1LyqmLjRYvLpWdOiQVMfoICTehptZ8Eeg0JMCBEP/cx1HuTuXR2gtykZ3ougyGAefdxc0uDaYoNHa5IIJSMdqeCUQR6bUoa0/SDOlVm4Co6ipVV6pEvF+CzgDvIdzHLoh/0mMBATW6mZWpQNkm8r4THnzhMeQL986JlxYtNRzOwth0ItWkH26A7pujSkyf3T26zzmg00niqgkoX1leeI8hLO3+mDVkHV5ZLUvM3uzzpacwUHac/Ma7705lIxYW9nYtbDs7LL/Yx6Huowq2ZbMNBegqNIN35uzGIuQ==--EPAWJcVQPUYIv5JS--SqO0GsO06Hq6CXcytLaCWQ=='
}
r = requests.get('https://github.com/', headers=headers)
print(r.text)
运行结果:
<!DOCTYPE html>
<html lang="en" data-a11y-animated-images="system">
<head>
......
设置 cookit 信息
示例:
import requests
cookies = '_octo=GH1.1.1434622938.1661822169; tz=Asia/Shanghai; _device_id=fa584be84f1dc7a499c98764d44d5aa3; preferred_color_mode=dark; has_recent_activity=1; user_session=j6k9o6IikOLwKX-84RUu6h5Bjj9hRPDrIOsehbZZN8yg57BN; __Host-user_session_same_site=j6k9o6IikOLwKX-84RUu6h5Bjj9hRPDrIOsehbZZN8yg57BN; tz=Asia/Shanghai; color_mode={"color_mode":"auto","light_theme":{"name":"light","color_mode":"light"},"dark_theme":{"name":"dark","color_mode":"dark"}}; logged_in=yes; dotcom_user=dageheshui; _gh_sess=w0sO24Nv5PWF2h6XkXbkx0K5BDJjs9EnWXEUCwitl+3yfIv15cmz/l7Iof2EszYh2urGstLeMPNLHEuLa2SfB1PTIhZ/87k8AxOet1SJ6DW5Wr6Z+44UqFUKfpNlbWVjeVnaD1nypqDobpxWvc455OmDx6YQ8G05JcO/Tc3Up8Sn65GBByMH8CDKRRi5UD0bbFUz5F3dV2cRJ8Kfh4osEI58IB4d4xHeEx8AhpQni3HDL/TLirSi5NP289Pj32najW14O1iWI1g4jOWgmAaj00XFLJWRwKDsIKqGgyXmCB9C1TzDk53SC7Tg2m90Z465YQh0ujRaRcaVTt5LUItzG1W//twXaIWlR4A6275cCJJ7ChZFhFvhQdGDddfydLVuHQh6klCLRDeAAAdXaJHNZvPq44LAYrg2Iq3S5yB0GxGjtVujNUHoaN90/XRaHe5LtxiF+vu6eOalEpGeJzcrJrMlIsxihqZRG1LyqmLjRYvLpWdOiQVMfoICTehptZ8Eeg0JMCBEP/cx1HuTuXR2gtykZ3ougyGAefdxc0uDaYoNHa5IIJSMdqeCUQR6bUoa0/SDOlVm4Co6ipVV6pEvF+CzgDvIdzHLoh/0mMBATW6mZWpQNkm8r4THnzhMeQL986JlxYtNRzOwth0ItWkH26A7pujSkyf3T26zzmg00niqgkoX1leeI8hLO3+mDVkHV5ZLUvM3uzzpacwUHac/Ma7705lIxYW9nYtbDs7LL/Yx6Huowq2ZbMNBegqNIN35uzGIuQ==--EPAWJcVQPUYIv5JS--SqO0GsO06Hq6CXcytLaCWQ=='
jar = requests.cookies.RequestsCookieJar()
headers = {
'Host': 'www.zhihu.com',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36'
}
for cookie in cookies.split(';'):
key, value = cookie.split('=', 1)
jar.set(key, value)
r = requests.get('http://www.bilibili.com', cookies=jar, headers=headers)
print(r.text)
运行结果:
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><title>哔哩哔哩 (゜-゜)つロ 干杯~-bi
........
新建了一个 RequestCookieJar 对象,然后将复制下来的 cookies 利用 split 方法分割,接着利用 set 方法设置好每个 Cookie 的 key 和 value,然后通过调用 requests 的 get() 方法并传递给 cookies 参数即可。
Session维持
第二次请求,是打开一个新的浏览器选项卡,而不是打开一个新的浏览器
Session模拟同一个会话
示例:
import requests
s = requests.Session()
s.get('https://www.httpbin.org/cookies/set/number/123456789')
r = s.get('https://www.httpbin.org/cookies')
print(r.text)
运行结果:
{
"cookies": {
"number": "123456789"
}
}
SSL 证书验证
访问某些网站,SSL 证书错误,需设置来忽略证书的验证
verify参数:控制是否验证证书,默认值为True
示例:
import requests
r = requests.get('https://ssr2.scrape.center/')
print(r.status_code)
运行结果:
# 直接报错
requests.exceptions.SSLError: HTTPSConnectionPool(host='ssr2.scrape.center', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)')))
修改为:
import requests
# 设置verify参数为False
r = requests.get('https://ssr2.scrape.center/', verify=False)
print(r.status_code)
运行结果:
# 响应成功,但还是有报错
# 它建议指定证书,可以设置忽略警告方式来屏蔽这个警告
/Users/word/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/urllib3/connectionpool.py:1045: InsecureRequestWarning: Unverified HTTPS request is being made to host 'ssr2.scrape.center'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings
warnings.warn(
# 状态码
200
设置忽略警告,来屏蔽警告
示例:
import requests
from requests.packages import urllib3
urllib3.disable_warnings()
response = requests.get('https://www.12306.cn', verify=False)
print(response.status_code)
运行结果:
200
或捕获警告到日志的方式忽略警告
示例:
import logging
import requests
logging.captureWarnings(True)
test = requests.get('https://www.12306.cn', verify=False)
print(test.status_code)
运行结果:
200
或指定本地证书用作客户端证书
示例:
import requests
response = requests.get('https://www.12306.cn', cert=('/path/server.crt', '/path/key'))
print(response.status_code)
运行结果:
200
超时设置
响应太慢或无响应
示例:
import requests
# timeout参数(0.01 秒内没响应,则报错)
r = requests.get('https://www.baidu.com/', timeout=0.01)
print(r.status_code)
运行结果:
# 直接报错
requests.exceptions.ConnectTimeout: HTTPSConnectionPool(host='www.baidu.com', port=443): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x11475fd00>, 'Connection to www.baidu.com timed out. (connect timeout=0.01)'))
timeout参数,分为 2 阶段:连接(connect),读取(read)
分别指定连接和读取,则可以传入一个元组
示例:
import requests
# imeout参数,分为 2 阶段:连接(connect),读取(read)
# 分别指定连接和读取,则可以传入一个元组
r = requests.get('https://www.baidu.com/', timeout=(5, 1))
print(r.status_code)
运行结果:
200
为 如果想永久等待,timeout参数等于None,或不设置直接留空,默认值就是 None
# timeout参数为None
r = requests.get('https://www.baidu.com/', timeout=None)
# 不设置,留空
r = requests.get('https://www.baidu.com/')
身份认证
访问启用了身份认证的网站
auth参数:身份认证功能
示例:
import requests
from requests.auth import HTTPBasicAuth
# requests库自带的身份认证功能,auth 参数 HTTPBasicAuth 认证
r = requests.get('https://ssr3.scrape.center/', auth=HTTPBasicAuth('admin', 'admin'))
print(r.status_code)
运行结果:
200
便捷写法:直接传入元组,默认使用HTTPBasicAuth类
import requests
# 传入元组
r = requests.get('https://ssr3.scrape.center/', auth=('admin', 'admin'))
print(r.status_code)
其它认证功能:OAuth 库
import requests
from requests_oauthlib import OAuth1
url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
auth = OAuth1('YOUR_APP_KEY', 'YOUR_APP_SECRET',
'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
requests.get(url, auth=auth)
6
代理设置
多次同一个 IP 请求,会被封禁客户端 IP
proxies 参数:代理
示例:
import requests
proxies = {
'http': '192.168.0.1:100',
'https': '192.168.0.1:100',
}
r = requests.get('https://www.taobao.com', proxies=proxies)
若代理需要身份认证,需以这样的语法来设置代理
http://user:password@host:port
示例:
import requests
proxies = {'https': 'http://user:password@10.10.1.10:3128/',}
requests.get('https://www.taobao.com', proxies=proxies)
HTTP 代理外,requests 还支持 SOCKS 协议的代理
示例:
import requests
proxies = {
'http': 'socks5://user:password@host:port',
'https': 'socks5://user:password@host:port'
}
requests.get('https://www.taobao.com', proxies=proxies)
Prepared Request
将请求表示为数据结构,其中各个参数都可以通过一个 Request 对象来表示。这在 requests 里同样可以做到,这个数据结构就叫 Prepared Request。
示例:
from requests import Request, Session
url = 'http://httpbin.org/post'
data = {'name': 'germey'}
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36'
}
s = Session()
req = Request('POST', url, data=data, headers=headers)
prepped = s.prepare_request(req)
r = s.send(prepped)
print(r.text)
引入了 Request,然后用 url、data 和 headers 参数构造了一个 Request 对象,这时需要再调用 Session 的
prepare_request 方法将其转换为一个 Prepared Request 对象,然后调用 send 方法发送即可,运行结果如下:
{
"args": {},
"data": "",
"files": {},
"form": {
"name": "germey"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "11",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-6310f54b-7542cba46fcc6f334cfee58e"
},
"json": null,
"origin": "175.0.159.134",
"url": "http://httpbin.org/post"
}
# 有了 Request 这个对象,就可以将请求当作独立的对象来看待,这样在进行队列调度时会非常方便。后面我们会用它来构造一个 Request 队列。
题外话
当下这个大数据时代不掌握一门编程语言怎么跟的上脚本呢?当下最火的编程语言Python前景一片光明!如果你也想跟上时代提升自己那么请看一下.
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典