pip install requests
2 主要的方法
requests.request() 支撑所有的基础方法
requests.get()
requests.head()
requests.post()
requests.put()
requests.patch()
requests.delete()
3 get方法
r = requests.get( url )
r是一个Response对象, 包含爬虫返回的内容
url的Request
requests.get(url, params=None, **kwargs)
基本操作方法
import requests
r = requests.get("http://www.baidu.com")
print(r.status_code)
4 Response对象属性
status_code
HTTP请求的返回状态, 200表示成功
text
页面内容
encoding
根据header猜测的内容编码方式
apparent_encoding
从内容中分析出来的编码方式
content
HTTP相应的二进制形式
5 Requests库的异常
ConnectionError
网络链接错误, 例如DNS查询失败, 拒绝链接等
HTTPError
HTTP错误
URLRequires
冲过最大重定向次数
ConnectTimeout
链接超时异常, 仅仅是链接的时候的时间超出
Timeout
url请求超时, 是这个过程的时间超出
6 通用代码框架
通用代码框架如下
注意: 该文件不能命名为requests.py
import requests
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return "产生异常"
if __name__ == "__main__":
url = "http://www.python.org"
print(getHTMLText(url))
7 HTTP协议
HTTP超文本传输协议
URL格式:
http://host[:port][path]
host是合法的主机域名或者IP地址
port是端口, 默认是80
path是资源路径
对资源的操作
GET 获取资源
HEAD 获得资源的相应消息报告, 也就是资源的头部
POST 请求资源后附加的新数据
PUT 存储一个资源, 覆盖原资源(全部更新)
PATCH 局部更新
DELETE 删除资源
requests库的方法对应的就是HTTP的操作
8 requests库方法详解
requests库的核心方法是 requests.request()方法
其中method就是对应的 GET; HEAD; POST; PUT; PATCH; DELETE; OPTIONS
其中的OPTIONS是用于与服务器交互获得配置的方法
关于kwargs
params = 字典, 字节序列
该params会拆解成键值对放到url之后当做提交的参数
data = 字典, 字节序列, 文件对象
作为requests的内容
json = json格式数据
作为requests的内容
headers = 字典
HTTP定制头部, 诸如修改user-agent来伪装成某个浏览器
auth = 元组
支持HTTP的认证功能
files = 字典
传输文件
timeout = 数字
超时时间, 秒为单位
proxies = 字典类型
设定访问的代理服务器, 增加登录认证
allow_redirects = True/False
重定向开关, 默认True
stream = True/False
内容立即下载开关, 默认True
verify = True/False
认证ssl证书开关, 默认True
cert 本地ssl证书路径
其余的方法只是将常用的参数设为默认参数了, 基本使用功能不变
get(url, params=None, **kwargs):
head(url, **kwargs):
post(url, data=None, json=None, **kwargs):
put(url, data=None, **kwargs):
patch(url, data=None, **kwargs):
delete(url, **kwargs):
options(url, **kwargs):
9 利用requests库的小程序
最基本的获取京东某MAC的页面
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = 'weihuchao'
import requests
url = "https://item.jd.com/2060618.html"
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[:1000])
except:
print("爬取失败")
设置User-Agent来突破网站的限制
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = 'weihuchao'
import requests
url = "https://www.amazon.cn/Kindle%E7%94%B5%E5%AD%90%E4%B9%A6/b/ref=sv_kinc_3?ie=UTF8&node=116169071"
try:
kv = {'user-agent':'Mozilla/5.0'}
r = requests.get(url, headers=kv)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[1000:2000])
except:
print("爬取失败")
通过分析网站的链接形式, 得到网站的 网站+参数 的格式
利用get()方法中的params来设置传入的参数
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = 'weihuchao'
import requests
keyword = "Python"
url = "http://www.baidu.com/s"
try:
kv = {'wd': keyword}
r = requests.get(url, params=kv)
r.raise_for_status()
print(len(r.text))
except:
print("爬取失败")
利用requests库来下载图片
要点是找到网络图片的地址
获得的requests对象的content值就是文件的内容
通过rb的读写模式可以实现文件的存储
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = 'weihuchao'
import requests
import os
url = "http://edu-image.nosdn.127.net/3321D6673EB82C94D08E1B80E8344166.jpg"
root = "F://"
path = root + url.split('/')[-1]
try:
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(path):
r = requests.get(url)
with open(path, 'wb') as f:
f.write(r.content)
f.close()
print("保存文件成功")
else:
print("文件已存在")
except:
print("爬取失败")