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

  • 相关阅读:
    计算机内功心法01】一:看完这篇还不懂高并发中的线程与线程池 计算机内功心法02】二:读取文件时,程序经历了什么?
    计算机内功心法03】三:一文彻底理解IO多路复用计算机内功心法04】四:进程切换与线程切换的区别
    计算机内功心法05】五:从小白到高手,你需要理解同步与异步
    计算机内功心法06】六:10张图让你彻底理解回调函数
    计算机内功心法07】七:高并发高性能服务器是如何实现的
    计算机内功心法08】八:函数运行时在内存中是什么样子?
    moviepy音视频开发:音频文件存取类AudioFileClip属性和方法介绍
    区块链学习5:智能合约Smart contract原理及发展历程科普知识
    moviepy音视频开发:音频剪辑基类AudioClip
    moviepy音视频开发:音频剪辑基类AudioClip详解
  • 原文地址:https://www.cnblogs.com/sunjianzhao/p/12708664.html
Copyright © 2011-2022 走看看