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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    poj 1789 每个字符串不同的字母数代表两个结点间的权值 (MST)
    poj 1251 poj 1258 hdu 1863 poj 1287 poj 2421 hdu 1233 最小生成树模板题
    poj 1631 最多能有多少条不交叉的线 最大非降子序列 (LIS)
    hdu 5256 最少修改多少个数 能使原数列严格递增 (LIS)
    hdu 1025 上面n个点与下面n个点对应连线 求最多能连有多少条不相交的线 (LIS)
    Gym 100512F Funny Game (博弈+数论)
    UVa 12714 Two Points Revisited (水题,计算几何)
    UVa 12717 Fiasco (BFS模拟)
    UVa 12718 Dromicpalin Substrings (暴力)
    UVa 12716 && UVaLive 6657 GCD XOR (数论)
  • 原文地址:https://www.cnblogs.com/sunjianzhao/p/12708664.html
Copyright © 2011-2022 走看看