requests库入门
1.requests库的7个主要方法
requests.request() # 构建一个请求,支持以下的基础方法requests.get()
# 向服务器发起资源请求,对应HTTP中的GETrequests.head()
# 获取HTML网页头信息的方法,对应HEADrequests.post()
# post请求方法,对应于HTTP中POST方法requests.put()
# 向网页请求资源全部更新requests.patch()
# 向HTML页面请求部分资源更新requests.delete() # 请求HTML删除页面
2.requests方法具体介绍
由于在网页中我们一般只有requests.get()方法比较常用.
requests.get(url,params=None,**kwargs)
# url为HTTP请求资源的链接
# 额外参数,字典或字节流,可选
# **kwargs代表12个控制访问参数,如timeout等.
下面就介绍一下**kwargs的控制访问参数.
params:字典或字节序列,作为参数添加到url中.data:字典,字节序列或者文件对象,作为request内容json:JSON格式数据作为requests的内容headers:字典,HTTP定制头(常用)cookies:字典或CookieJar,Request中的cookieauth:元组,支持HTTP认证功能files:字典类型,传输文件timeout:设定超时时间,秒为单位proxies:字典类型,设定访问代理服务器,可以增加登录认证.allow_redirects:True/False,默认True,重定向开关stream:True/False,默认True,重定向开关.verify:True/False,默认True,认证SSL证书开关cert:本地SSL证书路径
所以我们可以这样理解,url就是我们的请求,而get方法返回的就是我们的response
3.Response对象的属性
r.status_code
# HTTP请求返回状态,200成功,404表示失败r.text # 以字符串的形式显示,url对应的HTML页面r.encoding # HTTP的header中猜测相应内容的编码方式r.apparent_encoding
# 从返回来的报文中得出响应内容的编码方式r.content # HTTP响应内容的二进制形式
4.requests库的异常
requests.ConnectionError # 网络连接错误异常
requests.HTTPError # HTTP错误异常
requests.URLRequired # URL缺失异常
requests.TooManyRedirects # 超过重定向次数
requests.ConnectTimeout # 连接超时异常
requests.Timeout # 请求超时异常
产生异常
r.raise_for_status() # 如果不是200,产生HTTPError异常
5.构造链接
一些网站经常会提供一些特定的接口给我们,完成查询或者搜索.我们就可以通过键值对和params参数构建完整的url链接.
In [25]: kv={'wd':'Python'} In [26]: r = requests.get("http://www.baidu.com/s",params=kv) In [27]: r.request.url Out[27]: 'http://www.baidu.com/s?wd=Python'
6.通用代码框架
import requestsdef getHTMLText(url): try: r = requests.get(url,timeout=30) # 设置请求时间 r.raise_for_status() # 抛出HTTPError异常 r.encoding=r.apparent_encoding # 获取编码从正文 return r.text # 就是对应HTML except: print("error") # 处理异常 return ""if __name__=="__main__": url = 'http://www.baidu.com' wb_data = getHTML(url)
7.示例
# 爬去图片保存在本地import requests path = '/home/disda/python/mooc爬虫教程/abc.jpg'url = "http://image.nationalgeographic.com.cn/2017/0331/20170331051027908.jpg" r=requests.get(url) with open(path,'wb') as f: f.write(r.content)
op
# 查询ip地址# coding:utf-8import requestsfrom bs4 import Beautiful url = "http://m.ip138.com/ip.asp?ip="wb_data = requests.get(url+'ip address') soup=BeautifulSoup(wb_data.text,'html.parser') kv={'class':'result'} soup.find(attrs=kv).string
robots.txt协议
1.来源审查
In [13]: r.request.headers
Out[13]: {'User-Agent': 'python-requests/2.12.4', 'Accept-Encoding': 'gzip, deflate', 'Connecti
通过判断User-Agent进行限制,检查来访HTTP头的User-Agent域,只响应浏览器请求和友好爬虫访问.
如果我们想伪造是浏览器访问,可以通过如下方式
kv={'User-Agent':'Mozilla/5.0'} r=requests.get(url,header=kv)
# 结果In [23]: r.request.headers Out[23]: {'User-Agent': 'Mozilla/5.0', 'Accept-Encoding': 'gzip, deflate',
'Connection': 'keep-alive', 'Accept': '*/*'}
2.查看网站的robots协议
robots协议告知所有爬虫网站的爬取策略,要求爬虫遵守.
In [17]: r=requests.get('http://www.jd.com/robots.txt') In [18]: print(r.text) User-agent: * Disallow: /?* Disallow: /pop/*.html Disallow: /pinpai/*.html?* User-agent: EtaoSpider Disallow: / User-agent: HuihuiSpider Disallow: / User-agent: GwdangSpider Disallow: / User-agent: WochachaSpider Disallow: /
3.准则
Beautiful Soup库入门
1.理解
Beautiful soup库时解析,遍历,维护”标签树”的功能库.
2.基本元素
3.基本格式
4.HTML标签内容的三种遍历方式
领取专属 10元无门槛券
私享最新 技术干货