2018.5.3(python网络爬虫与信息提取入门)语言开发工具 / Requests库入门

使用的工具

文本工具类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>&copy;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链接对应的地方作为数据来存储

json:JSON格式的数据,作为request的内容

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 "产生异常"



猜你喜欢

转载自blog.csdn.net/weixin_41815104/article/details/80069528