Requests库
学习自mooc的python爬虫课程后的一些小整理。
本文将从课程给出的几个实例入手整理,并最后附有摘自python网络爬虫学习笔记(一)Request库的部分对request库函数及可选的控制访问方式(kwargs)加以总结
eg1:页面爬取框架
import requests
def getHTMLText(url):
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return"error"
if __name__ == "__main__":
url = "http://www.baidu.com"v
调用(访问sublime text support)
print(getHTMLText("http://www.sublimetext.cn/support"))
input()
输出结果
eg2:访问对robots有限制的网站
import requests
url = "https://www.amazon.cn/dp/B008H4SLV6?ref_=Oct_DLandingSV2_PC_8c66f1d9_1&smid=A2EDK7H33M5FFG"
def maskHTML(url):
try:
kv = {'user-agent':'Mozilla/5.0'}
r = requests.get(url,headers=kv)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text[1000:2000]
except:
return "error"
print(maskHTML(url))
input()
以这个访问亚马逊网站商品页面的代码为例:
kv = {'user-agent':'Mozilla/5.0'}
r = requests.get(url,headers=kv)
不同点就是这两行,
get及request的其他函数都有几个参数,以get为例:get(url,params=none,**kwarys),可用来传递url参数,将在几个例子后做总结一起比较。
eg3:对搜索引擎关键字的提交
import requests
keyword = "python"
def search(keyword):
try:
kv = {'wd':keyword}
r = requests.get("http://www.baidu.com/s",params=kv)
r.raise_for_status()
return len(r.text)
except:
return "error"
print(search(keyword))
input()
可以看到,百度对关键字的搜索是通过url最后wd=“XXX”部分来进行的
所以我们可以用requests对url进行修改从而达到搜索的目的
eg4:图片爬取与储存
import requests
import os
url = "https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1398687258,1630323367&fm=11&gp=0.jpg"
root = "G://python//"
path = root + url.split('/')[-1]
def saveimg(root,path,url):
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()
return "success"
else:
return "existed"
except:
return "failed"
print(saveimg(root,path,url))
input()
若需要从网页上保存图片,我们需要有图片的网址(url),以及保存到本地的根目录(root),及文件名(path),所以我们构造的函数saveimg需有这三个函数(当然,如果指定了根目录和文件名,就只需传url)
with open(path,'wb') as f:
f.write(r.content)
f.close()
这段是把图片转换为二进制形式写入文件
小结:
1.七个函数
库中支持REQUEST, GET, HEAD, POST, PUT, PATCH, DELETE共7个方法。其中REQUEST方法为基础方法,其它六种方法均通过调用REQUEST方法实现。为了编写程序的便利性,提供了这额外6个方法。我们首先看一下这6个方法的含义,及其在库中对应的函数:
GET:请求指定的页面信息,对应requests.get()
HEAD:只请求页面的头部,对应requests.head()
POST:请求服务器接收所指定的文档作为对所标识的URI的新的从属实体,对应requests.post()
PUT:从客户端向服务器取代指定的文档的内容,对应requests.put()
PATCH:与PUT功能类似,不同之处在于PUT提交信息的方式是截断的,而PATCH可以进行局部更新。因此与PUT相比,在某些情况下,PATCH可以节省网络带宽。对应requests.patch()
DELETE:请求服务器删除指定页面,对应requests.delete()
2.函数参数详解
requests.request(method, url, **kwargs)
requests.get(url, params = None, **kwargs)
requests.head(url, **kwargs)
requests.post(url, data = None, json = None, **kwargs)
requests.put(url, data=None, **kwargs)
requests.patch(url, data=None, **kwargs)
requests.delete(url, **kwargs)
其中method为请求方式,对应为’GET’, ‘HEAD’, ‘POST’, ‘PUT’, ‘PATCH’, ‘delete’, 'OPTIONS’七种方式。
**kwargs为13个可选的控制访问方式,包括:
params:字典或字节序列,可以作为参数增加到url中
data:字典、字节序列或文件对象,作为Request的内容
json:JSON格式的数据,作为Request的内容
headers:字典,为HTTP定制头
cookies:字典或CookieJar,Request中的cookie
auth:元组类型,支持HTTP认证功能
files:字典类型,用于传输文件
timeout:设定超时时间(以秒为单位)
proxies:字典类型,设定访问代理服务器,可以增加登录认证
allow_redirects:True/False,默认为True,为重定向开关
stream:True/False,默认为True,获取内容立即下载开关
verify:True/False,默认为True,认证SSL证书开关
cert:本地SSl证书路径