python爬虫笔记第一天

Requests库的安装

  1. 先在cmd中pip install requests
  2. 再打开Python IDM写入import requests
  3. 完成requests在.py文件的安装和引入

Requests库的入门

  • 示例(爬取百度首页内容):

    >>> import requests
    >>> r = requests.get("http://www.baidu.com")
    >>> r.status_code
    200
    >>> r.encoding = '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=http://s1.bdstatic.com/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></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://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&amp;tpl=mn&amp;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>\');</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&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必读</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a>&nbsp;京ICP证030173号&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>\r\n'
  • requests库的7个主要方法

    方法 说明
    requests.requests() 构造一个请求,支撑以下各个方法的基础
    requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
    requests.head() 获取HTML网页 头信息的方法,对应于HTTP的HEAD
    reqeusts.post() 向HTML网页提交POST请求的方法,对应于HTTP的POST
    requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
    requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的PATCH
    reqeusts.delete() 向HTML网页提交删除请求,对应于HTTP的DELETE
    1. r=requests.get()

      构造一个向服务器请求资源的Requests对象,返回的内容用r来表示,r是一个Response对象,返回的是包含服务器所有相关资源的对象

      1. requests.get(url,params=None,**kwargs)

        • url:拟获取页面的URL链接
        • params:URL中的额外参数,紫癜或字节流格式
        • **kwargs:12个控制访问的参数
      2. get()方法的封装方式(最后一行)

      3. Requests库的2个重要对象

        • Response

          包含爬虫返回的内容

          Response对象的属性

          属性 说明
          r.status_code HTTP请求的返回状态,200表示连接成功,404表示失败(可以说除了200以外都是没有连接成功)
          r.text HTTP响应内容的字符串形式,即,URL对应的页面内容
          r.encoding 从HTTP header中猜测响应内容编码方式
          r.apparent_encoding 从内容中分析出响应内容编码方式
          r.content HTTP响应内容的二进制形式
          • r.encoding:如果header中不存在charset,则认为编码为ISO-8859-1,根本上讲是一种猜测编码方式的结果
          • r.apparent_encoding:根据网页内容真正分析而得出的编码方式
        • Requests

      4. 使用get()方法获取网上资源基本流程

        • 首先,r.status_code 判断连接状态:

          1. 如果:200 连接成功,则:

            • r.text

            • r.enciding

            • r.apparent_encoding

            • 从内容中分析出响应内容编码方式 r.content

          2. 如果:404或者其他原因产生异常

爬取通用代码框架

通用代码框架?

一组代码,可以准确可靠的爬取网页上的代码

Requests库的异常

异常 说明
requests.ConnectionError 网络连接错误异常,如URL的DNS查询失败、服务器的防火墙拒绝连接等
requests.HTTPError HTTP错误异常
requests.URLError URL缺失异常(访问时)
requests.TooManyRedirects 用户访问的URL重定向超过了服务器要求的最大重定向次数,产生此异常
requests.ConnectTimeout 连接远程服务器超时异常(仅仅是连接服务器的超时)
requests.Timeout 请求URL超时→超时异常(发出请求到获得内容的超时)

方法

方法 说明
r.raise_for_status() 如果不是200,产生异常requests.HTTPError

该方法可以判断连接的状态

通用代码框架

通用代码框架可以使得用户爬取网页时更加有效安全

HTTP协议及Requests库方法

Hypertext Transfer Protocol,超文本传输协议

HTTP是一个基于“请求与响应”模式的、无状态的应用层协议

HTTP协议采用URL作为定位网络资源的标识

​ ——百科

URL格式 http://host[:port][path]

  • host:合法的Internet主机域名或IP地址

  • port:端口号,缺省端口为80

  • path:请求资源的路径

HTTP URL实例:

HTTP URL:

​ URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源

HTTP协议对资源的操作

方法 说明
get 请求获取URL位置的资源
head 请求获取URL位置资源的响应响应信息报告,即获得该资源的头部信息
post 请求向URL位置的资源后附加新的数据
put 请求向URL位置存储一个资源,覆盖原URL位置的资源
patch 请求局部更新URL位置的资源,即改变该出资源的部分内容
delete 请求删除URL位置存储的资源

各个操作之间是独立的

理解patch和put的区别

假设URL位置有一组数据UserInfo,包括UserID、UserName等20个字段

需求:用户修改了UserName,其他不变。

  • 采用PATCH,仅向URL提交UserName的局部更新请求。
  • 采用PUT,必须将所有20个字段一并提交到URL,未提交字段被删除。

PATCH的最主要好处:节省网络带宽

HTTP协议与Requests库

Requests库的head()方法

  • head()方法可以使用很少的流量来获取网页的概要信息

Requests库的head()方法

![image-20210114024634284](https://i.loli.net/2021/01/14/T6gU3GBNYFI7dKh.png

当向URL post一个字典或者键值对时,键值对会被自动编码为form表单 ——MOOC_嵩天

Requests库的put()方法

可以将原有的数据覆盖掉 ——MOOC_嵩天

Request库方法主要解析

requests库的7个主要方法

方法 说明
requests.requests() 构造一个请求,支撑以下各个方法的基础
requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
requests.head() 获取HTML网页 头信息的方法,对应于HTTP的HEAD
reqeusts.post() 向HTML网页提交POST请求的方法,对应于HTTP的POST
requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的PATCH
reqeusts.delete() 向HTML网页提交删除请求,对应于HTTP的DELETE

Request方法

request方法是所有方法的基础,包含三个基本参数:method、url、**kwargs

​ eg. r=requests.requests(method, url, **kwargs)

参数 参数含义
method 请求方式
url 拟获取页面的URL链接
**kwargs 控制访问的参数,共13个

其中,method参数可以分为以下几种:

​ r=requests.requests(‘GET’, url, **kwargs)

​ r=requests.requests(‘HEAD’, url, **kwargs)

​ r=requests.requests(‘POST’, url, **kwargs)

​ r=requests.requests(‘PUT’, url, **kwargs)

​ r=requests.requests(‘PATCH’, url, **kwargs)

​ r=requests.requests(‘delete’, url, **kwargs)

​ r=requests.requests(‘OPTIONS’, url, **kwargs)

其中,kawrgs包含request的13个控制访问的参数:

**kwargs:控制访问的参数,均为可选项(←←星 星 开头)

  1. params:字典或者字节序列,作为参数增加到url中 可以修改URL字段

通过这样的参数,可以吧一些键值对增加道URL中,使得URL访问的不只是资源,而同时带入了一些参数,服务器接受这些参数并筛选资源反馈回来

  1. data:字典、字节序列或文件对象,作为Request内容。向服务器提供或提交资源时使用

所提交的键值对并不放在URL链接里,而是放在URL链接对应位置作为数据来存储

向data域复制一个字符串,字符串就会存到前面的URL链接的对应位置

  1. json:JSON格式的数据,作为Request的内容。 是http最经常使用的内容格式

作为内容部分,可以向服务器提交,用字典构造一个键值对,通过这样的方式可以把键值对赋值给json域上

  1. headers:字典,HTTP定制头

可以使用这个字段来定制访问某一个URL的HTTP协议的协议头

可以通过这样的方式来模拟我们想模拟的浏览器的版本来向浏览器访问

  1. cookies:字典或CookiesJar,Requests中的cookies

  2. auth:元组,支持HTTP认证功能

这两个字段都是request库的高级功能

  1. files:字典类型,传输文件

可以向某一个链接提交某个文件

  1. timeout:设定超时时间,秒为单位

可以在访问某个链接时,设置多久为访问超时时间,当达到设定时间,但是服务器的访问(get请求)没有收到回返时,将会弹出timeout异常

  1. proxies:字典类型,可以为爬取网页设定访问代理服务器,可以增加登录认证

上图中使用了两个代理,分别是HTTP和HTTPS的代理。

那么,例如:当访问百度时,使用的地址就是代理服务器的IP地址

使用该字段,可以有效地隐藏爬取网页的用户的源IP地址,有效的防止网页对爬虫的反追踪

  1. allow_redirects:True / False,默认为True,重定向开关 表示允不允许网址进行重定向(爬取网页的过程中)

  2. stream:True / False,默认为True,获取内容立即下载开关 对获取的内容是否进行立即下载,默认为立即下载

  3. verify:True / False,默认为True,认证SSL证书开关

    以上三者属于开关字段

  4. cert:本地SSL证书路径

其余的Request库方法参数的解释和使用:

get方法

head方法

post方法

put方法

patch方法

delete方法

由于后几个方法使用的时候常用到某些字段,这些常用字段就被显示定义,剩余的可选字段自然也就减少了

多使用get方法,以免过多的向服务器提交信息,造成服务器压力

Request库小结

  1. 7个方法中,由于网络安全的限制,很难向服务器发起post、put、patch、delete等请求
  2. 其中,最常使用的方法——get
  3. 特大网站url链接,可以采用head方法来获取概要内容
  4. 最入门级获取网页内容的通用爬取代码框架

  1. 网络连接有风险,所以一定要合理处理异常!
  2. r.rasie_for_status()如果返回的对象不是200(正常),将返回一次异常

python爬虫笔记Day01的更多相关文章

  1. [Python爬虫笔记][随意找个博客入门(一)]

    [Python爬虫笔记][随意找个博客入门(一)] 标签(空格分隔): Python 爬虫 2016年暑假 来源博客:挣脱不足与蒙昧 1.简单的爬取特定url的html代码 import urllib ...

  2. Python爬虫笔记一(来自MOOC) Requests库入门

    Python爬虫笔记一(来自MOOC) 提示:本文是我在中国大学MOOC里面自学以及敲的一部分代码,纯一个记录文,如果刚好有人也是看的这个课,方便搬运在自己电脑上运行. 课程为:北京理工大学-嵩天-P ...

  3. Python爬虫笔记(一):爬虫基本入门

    最近在做一个项目,这个项目需要使用网络爬虫从特定网站上爬取数据,于是乎,我打算写一个爬虫系列的文章,与大家分享如何编写一个爬虫.这是这个项目的第一篇文章,这次就简单介绍一下Python爬虫,后面根据项 ...

  4. Python爬虫笔记安装篇

    目录 爬虫三步 请求库 Requests:阻塞式请求库 Requests是什么 Requests安装 selenium:浏览器自动化测试 selenium安装 PhantomJS:隐藏浏览器窗口 Ph ...

  5. Python爬虫笔记技术篇

    目录 前言 requests出现中文乱码 使用代理 BeautifulSoup的使用 Selenium的使用 基础使用 Selenium获取网页动态数据赋值给BeautifulSoup Seleniu ...

  6. Python爬虫笔记【一】模拟用户访问之设置请求头 (1)

    学习的课本为<python网络数据采集>,大部分代码来此此书. 网络爬虫爬取数据首先就是要有爬取的权限,没有爬取的权限再好的代码也不能运行.所以首先要伪装自己的爬虫,让爬虫不像爬虫而是像人 ...

  7. Python爬虫笔记(一)

    个人笔记,仅适合个人使用(大部分摘抄自python修行路) 1.爬虫Response的内容 便是所要获取的页面内容,类型可能是HTML,Json(json数据处理链接)字符串,二进制数据(图片或者视频 ...

  8. Python 爬虫笔记(二)

    个人笔记,仅适合个人使用(大部分摘抄自python修行路) 1.使用selenium(传送) selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及 ...

  9. Python 爬虫笔记、多线程、xml解析、基础笔记(不定时更新)

    1  Python学习网址:http://www.runoob.com/python/python-multithreading.html

随机推荐

  1. Subline Text 3 安装

    Subline Text 3 下载 下载链接 http://www.sublimetext.com/3 ,下载Subline Text3的安装包,这里以 64位的windows10为例,如果是其他操作 ...

  2. 【Spring】 Spring的核心容器

    Spring的核心容器 文章目录 Spring的核心容器 BeanFactory ApplicationContext 1.通过ClassPathXmlApplicationContext创建 2.通 ...

  3. 【RAC】安装rac的时候。报错checking for oracle home incompatibilities failed

    背景:由于oracle安装的时候中途出现了问题,解决过后,发现报错了 图形化安装的时候,有这个问题出现 解决办法: 删除安装过的所有缓存,和文件即可 1.删除ORACLE_BASE下的所有文件 2.删 ...

  4. 【ORA】ORA-27090: Unable to reserve kernel resources for asynchronous disk I/O

    操作系统是CentOS 5.11 数据库 10.2.0.5.0 晚上查看数据库,发现数据库报错查看相关的trace文件内容如下: *** SERVICE NAME:(SYS$BACKGROUND) 2 ...

  5. 分布式 ID 生成算法 — SnowFlake

    一.概述 分布式 ID 生成算法的有很多种,Twitter 的 SnowFlake 就是其中经典的一种. SnowFlake 算法生成 ID 的结果是一个 64bit 大小的整数,它的结构如下图: 1 ...

  6. [Usaco2009 Feb]Bullcow 牡牛和牝牛

    原题链接https://www.lydsy.com/JudgeOnline/problem.php?id=3398 容易想到的一种\(dp\)就是:设\(dp[i][j]\)表示前\(i\)头牛里面有 ...

  7. 判断最长回文串——暴力、延展、Manacher

    1. 暴力 时间复杂度O(n^3). 2. 延展 以某一字符为中心,设置left, right两个变量同时向外扩,判断他们指向字符是否相同.注意分奇偶讨论.时间复杂度O(n^2). 3. Manach ...

  8. 微服务网关2-搭建Gateway服务

    一.创建父模块infrastructure 1.创建模块 在guli_parent下创建普通maven模块 Artifact:infrastructure 2.删除src目录 二.创建模块api_ga ...

  9. 解决 win10 无法安装VS2019,visual studio installer下载进度始终为0

    解决 win10 无法安装VS2019,visual studio installer下载进度始终为0 目录 解决 win10 无法安装VS2019,visual studio installer下载 ...

  10. elasticsearch从开始到永久

    0.学习目标 独立安装Elasticsearch 会使用Rest的API操作索引 会使用Rest的API查询数据 会使用Rest的API聚合数据 掌握Spring Data Elasticsearch ...