使用的工具
文本工具类IDE: ①IDLE ②Sublime Text
集成工具类IDE: ①PyCharm ②Anaconda&Spyder
IDLE: 自带;默认; 常用; 入门级的 适用于 Python入门,功能简单直接,300+代码以内
Sublime Text:专为程序员开发的第三方专用编程工具,专业的编程体验;多种编程风格,工具非注册免费使用
PyCharm:社区版免费,简单集成度高,适合较复杂工程
Anaconda&Spyder:开源免费
/************************Requests库入门*************************************/
库的更多信息: http://docs.python-requests.org/en/master/
安装Requests库 以win10为例
用win+R 打开命令栏 然后输入 cmd运行
然后在命令窗口中输入 pip install requests
安装成功后显示Successfully installed certifi-2018.4.16 chardet-3.0.4 idna-2.6 requests-2.18.4 urllib3-1.22
安装完后测试一下
>>> import requests
>>> r=requests.get("https://www.baidu.com") #访问百度主页
>>> r.status_code #查看状态码
200 #返回200表示访问成功
抓取网页信息
>>> r.encoding='utf-8' #更改它的编码为 utf-8编码
>>> r.text #打印网页内容
'<!DOCTYPE html>\r\n<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus=autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn" autofocus></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=https://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write(\'<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=\'+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ \'" name="tj_login" class="lb">登录</a>\');\r\n </script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>©2017 Baidu <a href=http://www.baidu.com/duty/>使用百度前必读</a> <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号 <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>\r\n'
>>>
Requests库的七个主要方法
requests.request() 构造一个请求,支撑以下各方法的基础方法
requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD
requests.post() 向HTML网页提交post请求的方法,对应于HTTP的POST
requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的put
requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.delete() 向HTML页面提交删除请求,对应于HTTP的DELETE
/**************详解Requests库********************************************/
①
requests.request(method,url,**kwargs)
method :请求方式,对应get/put/post等七种 'GET' / 'HEAD' / 'POST' / 'PUT' / 'PATCH' /‘delete’ / 'OPTIONS'
url : 拟获取页面的url连接 例如 "https://www.baidu.com"
**kwargs :控制访问的参数,共13个:↓↓↓
params :字典或字节序列,作为参数增加到url中
import requests
kv={'key1':'value1','key2':'value2'}
r=requests.request('GET','https://www.baidu.com/',params=kv)
print(r.url)
https://www.baidu.com/?key1=value1&key2=value2
data:向服务器提供、提交资源时使用 ;字典、字节序列或文件对象,作为request的内容
import requests
kv={'key1':'value1','key2':'value2'}
r=requests.request('POST','https://www.baidu.com/',data=kv)
requests.post() 向HTML网页提交post请求的方法,对应于HTTP的POST
此时,提交的数据并不放在url链接里,而是放在url链接对应的地方作为数据来存储
headers:字典,HTTP定制头
cookies:字典或CookieJar,Request中的cookie
auth:元组,支持HTTP认证功能
files:字典类型,传输文件
import requests
fs={'file':open('data.xls','rb')}
r=requests.request('POST','https://python123.io/ws',files=fs)
timeout:设定超时时间,秒为单位
r=requests.request('POST','https://python123.io/ws',timeout=10)
proxies:字典类型,设定访问代理服务器,可以增加登录认证
pxs={'http':'http://user:[email protected]:1234',
'https':'https://10.10.10.1:4321' }
r=requests.request('GET','https://python123.io/ws',proxies=pxs)
allow_redirects:True/False,默认为True,重定向开关
stream:True/False,默认为True,获取内容立即下载开关
verify:True/False,默认为True,认证SSL证书开关
cert:保存本地SSL证书路径
②
requests.get(url,params=None,**kwargs)
url : 拟获取页面的url连接 例如 "https://www.baidu.com"
params:url中的额外参数,字典或字节流格式,可选
**kwargs :控制访问的参数,共12个:(即除params外的12个)
③
requests.head(url,**kwargs)
url : 拟获取页面的url连接
**kwargs :13个控制访问的参数
④
requests.post(url,data=None,json=None,**kwargs)
url:拟更新页面的url连接
data:字典、字节序列或文件,Request的内容
json:JSON格式的数据,Request的内容
**kwargs:11个控制访问的参数(即除了data、json之外)
⑤
requests.put(url,data=None,**kwargs)
url:拟更新页面的url连接
data:字典、字节序列或文件,Request的内容
**kwargs:12个控制访问的参数(即除了data之外)
⑥
requests.patch(url,data=None,**kwargs)
url:拟更新页面的url连接
data:字典、字节序列或文件,Request的内容
**kwargs:12个控制访问的参数(即除了data之外)
⑦
requests.delete(url,**kwargs)
url:拟删除页面的url链接
**kwargs:13个控制访问的参数
/************************************************************************************************/
requests.get(url) 构造一个向服务器请求资源的Request对象 返回一个包含服务器资源的Response对象
requests.get(url,params=None,**kwargs)
url : 拟获取页面的url链接
params : url中的额外参数,字典或字节流格式,可选
**kwargs:12个控制访问的参数
打开get方法源代码
C:\Users\Administrator>python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> help(requests.get)
Help on function get in module requests.api:
get(url, params=None, **kwargs)
Sends a GET request.
:param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response <Response>` object
:rtype: requests.Response
return request('get',url,params=params,**kwargs) #封装形式
>>> import requests
>>> r=requests.get("https://www.baidu.com")
>>> print(r.status_code) #查看状态码
200
>>> type(r) #检测r的类型
<class 'requests.models.Response'> #返回一个类 这个类是Response
>>> r.headers #获取头部信息
{'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'Keep-Alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Tue, 24 Apr 2018 10:44:45 GMT', 'Last-Modified': 'Mon, 23 Jan 2017 13:24:17 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Transfer-Encoding': 'chunked'}
Response对象的属性
r.status_code HTTP请求的返回状态,200表示连接成功,404表示失败
r.text HTTP响应内容的字符串形式,即,url对应的页面内容
r.encoding 从HTTP header中猜测的响应内容编码方式
r.apparent_encoding 从内容分析出的响应内容编码方式(备选编码方式)
r.content HTTP响应内容的二进制形式
/*******************理解Resquests库的异常*****************************************/
注:网络连接有风险,异常处理很重要
requests.ConnectionError 网络连接错误异常,如DNS查询失败、拒绝连接
requests.HTTPError HTTP错误异常
requests.URLRequired URL缺失异常
requests.TooManyRedirects 超过最大重定向次数,产生重定向异常
requests.ConnectTimeout 连接远程服务器超时异常(仅指)
requests.Timeout 请求URL超时,产生超时异常(发出URL请求到返回的整个过程超时产生的异常)
r.raise_for_status() 如果不是200,产生异常requests.HTTPError (判断Response返回类型是否是200)
#爬取网页通用代码框架
import requests
def getHTMLText(url):
try:
r=requests.get(url,timeout=30) #请求一个url连接
r.raise_for_status() #如果状态不是200,引发HTTPError异常
r.encoding=r.apprent_encoding
return r.text
except:
return "产生异常"