zoukankan      html  css  js  c++  java
  • Python网络爬虫与信息提取(一)——Requests库的安装、Requests库的get()方法、爬取网页的通用代码框架

    一:安装第三方库requests

    首先打开命令提示符(以管理员身份运行)

     

    输入pip install requests,然后回车

    首次安装的时候出现了问题

     

    百度之后是说版本太低

    按照上面的提示更新pip还是显示WARNING,最后卸载python,重新安装python,再更新pip就可以了,可能是电脑里有好几个版本的python所致

    二:Requests库的7个主要方法

    方法

    说明

    requests.request()

    构造一个请求,支撑以下各方法的基础方法

    requests.get()

    获取HTML网页的主要方法,对应于HTTPGET

    requests.head()

    获取HTML网页头信息的方法,对应于HTTPHEAD

    requests.post()

    HTML网页提交POST请求的方法,对应于HTTPPOST

    requests.put()

    HTML网页提交PUT请求的方法,对应于HTTPPUT

    requests.patch()

    HTML网页提交局部修改请求,对应于HTTPPATCH

    requests.delete()

    HTML网页提交删除请求,对应于HTTPDELETE

    注:其余6个方法都是通过调用request()方法来实现的

    1get()方法

    r=requests.get(url)  构造一个向服务器请求资源的Request对象

    返回内容用r表示,是一个Response对象,包含从服务器返回的所有相关资源

    完整使用方法requests.get(url,params=None,**kwargs)

    url: 要获取的页面的连接

    params:  url中的额外参数,字典或字节流格式。可选

    **kwargs: 12个控制访问的的参数。可选

    例子

     

    Response对象的属性

    属性

    说明

    r.status_code

    HTTP请求的返回状态,200表示连接成功,404(不是202)表示连接失败

    r.text

    HTTP相应内容的字符串形式,即url对应的页面内容

    r.encoding

    HTTP header中猜测的相应内容编码方式

    r.apparent_encoding

    从内容中分析出的相应内容编码方式(备选编码方式)

    r.content

    HTTP响应内容的二进制形式。eg:从一个url的链接上获得一个图片,图片里面的资源是以二进制形式存储的,可以通过r.content来还原这个图片

    使用get()方法访问网上资源有一个基本的流程:

                

    例子:

     

     

    r.encoding:是从HTTP header中的charset字段中获得的,如果HTTP header中有一个这样的字段,说明访问的服务器对其资源的编码是有要求的,而这样的编码会获得回来,存在r.encoding中,但并不是所有的服务器对它的资源编码都是有要求的,如果header中不存在charset字段,则认为编码为ISO-8859-1(默认),但这个编码并不能解析中文,所以requests库提供了一个备选编码r.apparent_encoding,这个编码根据HTTP内容部分分析内容中出现文本可能的编码方式,原则来说这个编码比encoding更加准确。因此当encoding不能正确解析编码,便使用备选编码来进行替换解析(将apparent赋值给encoding)。

    2:爬取网页的通用代码框架

    直接使用get()进行爬取,不一定会成功,毕竟网络连接有风险,而异常处理就显得很重要了。

    requests库的异常处理

    异常

    说明

    requests.ConnectionError

    网络连接错误异常。如DNS查询失败、服务器防火墙拒绝连接

    requests.HTTPError

    HTTP协议层面错误异常

    requests.URLRequird

    URL缺失造成的异常

    requests.TooManyRedirects

    超过最大重定向次数,产生重定向异常。经常是对复杂的链接访问时产生的错误

    requests.ConnectTimeout

    访问远程服务器的时候超时异常

    requests.Timeout

    请求URL超时,产生的超时异常

    Timeout指整个过程,ConnectTimeout仅指链接服务器这个过程

    r.raise_for_status(),专门与异常打交道,可以判断返回的Response类型r状态是不是200。如果是200,它将表示返回的内容是正确的;如果不是200,就会产生一个requests.HTTPError的异常。

     

    __name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行


    作者:孙建钊
    出处:http://www.cnblogs.com/sunjianzhao/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Java的简单书写格式
    注解(Annotation)
    Container(容器)与 Injector(注入)
    maven的下载,安装配置以及build一个java web项目
    Version Control,Git的下载与安装
    URL和URI的区别
    HTTP请求解析过程 (简单概括)
    函数式编程语言(functional language)
    HTTP1.1协议中文版-RFC2616
    练习--str
  • 原文地址:https://www.cnblogs.com/sunjianzhao/p/12708664.html
Copyright © 2011-2022 走看看