【python】网络爬虫与信息提取--requests库

导学   

         当一个软件想获得数据,那么我们只有把网站当成api就可以

        requests库:自动爬取HTML页面,自动网络请求提交

        robots协议:网络爬虫排除标准(网络爬虫的规则)

        beautiful soup库:解析HTML页面

工具:

        IDLE:适用于python入门,功能简单直接,300+行代码以内

        Sublime Text编译器:专门为程序员开发的第三方专用编程工具,专业编程体验

        Wing:公司维护,工具收费;调试功能丰富;版本控制,版本同步;适合多人共同开发

        PTVS:微软公司维护、调试功能丰富

        PyCharm:简单,集成度高,适合较复杂工程

一、requests库

1.安装:

        以管理员身份运行命令提示符,输入 pip install requests 后回车

2.使用:

        启动idle(IDLE是Python自带的IDE;打开IDLE:按Win键,输入“idle”,回车;运行:F5)

        测试一下(以访问百度主页为例子),状态码为200,表示访问成功

3.requests库的7个主要方法

        这7个常用方法,除了第一个requests.request()方法是基础方法外,其他的6个方法都是通过调用requestsequest()方法实现的

4.requests.get(URL)

        完整的使用:requests.get(url,params=None,**kwargs);其中url是拟获取页面的url链接,params指的是url中的额外参数,字典或者字节流格式,可选;kwargs是12个控制访问的参数

        作用:获取一个网页 r=requests.get(url)

        原理:构造一个向服务器请求资源的request对象(这个对象由requests库自动生成),返回的Response对象包含从服务器返回的所有资源.

        

Response对象的主要属性

                 r.encoding的编码方式是从http header中的charset字段获得.如果http header中有这样一个字段,说明我们访问的服务器对它的资源的编码是有要求的,这样的要求会返回回来,存在r.encoding中。但是,不是所有服务器都会对它的资源编码有相关的要求,所以,如果header中不存在charset,则默认编码为ISO-8859-1,但这样的编码并不能解析中文,所以requests库提供了一个备选编码r.apparent_encoding,实际上这个编码做的内容是根据http的内容部分而不是头部分,去分析内容文本中 可能的编码方式。

5.爬取网页的通用代码框架

        代码框架其实就是一组代码,它可以准确可靠的爬取网页内容。

        我们爬取的时候喜欢用requests.get(url)获取url的相关内容,但是这样的语句并不是一定成立的,因为网络连接有风险,所以这样的语句它的异常处理很重要

        补充一个response异常:r.raise_for_status()--判断返回的response的类型,如果不是200,产生异常requests.HTTPError

6.HTTP协议以及Requests库方法

        HTTP,超文本传输协议。是一个基于“请求与响应”模式的、无状态(第一次请求与第二次请求之间并没有相关的关联)的应用层协议(指的是该协议工作在TCP协议之上)。HTTP协议采用URL作为定位网络资源的标识。

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

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

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

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

        path:请求资源的路径

        head()方法用来展示反馈的头部信息的内容,当我们想试图用r.text展示它的全部内容,会发现内容是空的。作用:可以用很少的网络流量获取网络资源的概要信息。

        post方法可以向服务器提交新数据。这里我们首先建立了一个字典叫payload,它里面包含两个键值对,然后用post方法去提交这样的一个字典,接着看下返回的内容,发现键值对被放在form下,说明当我们post一个字典或者post键值对的时候,那么键值对会默认的被存储在表单的字段下。

        当我们post一个字符串的时候,我们会发现字符串被存到了data相关的字段下。

        post根据我们提交的内容不同,在服务器上会做数据的相关的整理

        

        put方法与post方法类似。

7.Requests库主要方法解析

        事实情况是,由于网络安全的限制,我们很难向一个url去发起post,put,patch,delete请求,因此我们在爬虫时,经常使用的是get和head方法。

7.1 request

        完整格式:requests.request(method,url,**kwargs)

        method:请求方,对应get/pu/post等七种

        url:拟获取页面的url链接

        **kwargs:控制访问的参数,共13个

     options其实就是向服务器获取一些服务器跟客户端能够打交道的参数,这里面并不与获取资源直接相关,我们平时使用较少。

        比如params=kv,可以实现一些键值对增加到url中,那么使得url再去访问时,不只访问的是这个资源,而同时代入了一些参数,那服务器就可以接受这些参数,并根据这些参数筛选部分资源。

        data:向服务器提供或提交资源时使用,当构建键值对的时候,把它作为data的一部分去提交。我们所提交的键值对,并不直接放在url链接,而是放在url链接对应位置的地方。

        比如,当我们用构建一个键值对,然后我们可以把它的值给json参数,那么这个键值对就复制到服务器的json域上。

        headers对应了向某一个url访问时,所发起的http的头字段。简单说,我们可以用这个字段来定制访问某一个url的http协议头。我们可以定义一个字典,然后去修改HTTP协议中的user-agent字段,那么在访问一个链接时,我们可以把这样的字段赋给header,此时,header再向服务器访问时,服务器看到的user-agent字段就是修改后的内容。

        cookies:指的是从http协议中解析cookie,那么它可以是字典也可以是cookieJar的形式

        auth字段是一个元组类型,与cookies都是高级功能。

        files:字典类型,它是向服务器传输文件时使用的字段。定义一个字典,以对应的文件为键值对,用open的方式打开这个文件,并把这个文件与file做一个关联,同时对应到相关的url上,这样的方法我们可以向某一个链接提交某一个文件。

         在规定timeout时间内,我们的请求内容没有反馈回来,那么它将产生一个timeout的异常

        proxies:可以为我们爬取网页设定相关的访问代理服务器。在上图中,我们增加了两个代理,一个是http访问时使用的代理,而在这个代理中我们可以增加用户名跟密码的设置,另一个是https的代理服务器,那这样我们在访问百度时,我们所使用的ip地址就是代理服务器的ip地址。使用这个字段可以有效的隐藏用户爬取网页的源ip地址信息,能有效防止对爬虫的逆追踪。

        allow_redirects像是一个开关,表示允不允许对url重定向。stream也是一个开关,指对获取的内容是否进行立即下载,默认是立即下载。cert字段是保持本地ssl证书的字段。

7.2 get

7.3 head

7.4 post

7.5 put

7.6 patch

7.7 delete

二、盗亦有道

        网络爬虫按尺寸可以分为三类:小规模(占了90%以上)使用requests库即可,中规模使用scrapy库,大规模你只能定制开发,第三方无法实现。

        对于服务器来说,它默认是按照人数来约束它的访问能力。但是有爬虫爬取相关的内容,甚至说1秒内可以爬取10万甚至几万的情况下,服务器是很难提供那么高的性能的,因此对于某些爬虫,是受限于爬虫编写者的水平和它的目的,那么这样将会为服务器带来巨大的资源开销,从而对于网站运行着来说,爬虫形成了骚扰。
        爬虫引发的问题:骚扰问题,法律风险,隐私泄露

        反爬之来源审查:简单来说,作为网站的维护者,可以只响应浏览器或者已知的友好爬虫的访问。这个方法需要对维护网站的技术人员的能力有一定要求。

三、Robots协议

        Robots协议:网络爬虫排除标准。

作用:

        网站告知网络爬虫哪些页面可以抓取,哪些不行。

形式/使用:

        在网站根目录下放置一个robots.txt文件,这个文件写明了在一个网站里的哪些目录是允许爬虫去爬取的,哪些目录是不许爬取的。

 语法:

        User-agent:  ,Disallowed:   ,(#注释,*表示所有,/表示根目录)

案例:

        京东的Robots协议 https://www.jd.com/robots.txt

      

        User-agent:*,指的是如果你对于任何的网络爬虫来源,都应该遵守如下的协议。

        Disallow:/?* 表示任何爬虫都不允许访问,/?* 也就是以问好开头的路径

         Disallow:/pop/*.html和 Disallow:/pinpai/*.html表示满足这些个通配符的内容都是不允许访问的。

        此外,京东的Robots协议又提供了User-agent:EtaoSpider等,他们后面还跟着 Disallow:/,表示的是这四个网络爬虫是不允许爬取京东的任何资源。(可以理解为这四个是恶意爬虫,被京东发现后,因此拒绝它们对京东的任何数据访问。

其他练习链接:

        qq.com/robots.txt    QQ

        baidu.com/robots.txt   百度

        news.sina.com.cn/robots.txt   新浪微博

        news.qq.com/robots.txt   QQ邮箱

        需注意,Robots协议一定是放在网站的根目录下。但是对于新浪来说,www.sina.com.cn和news.sina.com.cn是两个不同的根目录,所以我们看两个网站的Robots协议是不一样的。另外,不是所有网站都具有Robots协议比如我们国家的教育网站.Robots协议规定,如果一个网站不提供robots.txt文件,那么这个网站是允许所有爬虫的。

Robots协议遵守方式:

     类人行为可不参照Robots协议: 任何网站提供资源,它都是方便2人类获取相关的信息,如果你的网络爬虫能够和人类获取相关的信息相一致(也就是说每次访问的量很少,访问的量不大,如一天或者一小时才访问一次)

四、实战

  案例1:京东商品页面的爬取

        我们要做的是,提供写程序获得该商品的信息

        1.首先打开京东页面选取一个商品:https://item.jd.com/10086386840914.html

        2.打开idle,get刚刚的链接,查看返回的状态码,200表示链接成功,并且获得了这个链接响应的内容

        3.查看encoding,这说明我们已经能从HTTP的头部分解析出这个页面的编码信息,这说明了京东页面显示了相关的编码 

        

        4.查看 内容是否正确。

        5.以下为京东商品页面的全代码。

 案例2:亚马逊商品页面的爬取

        https://www.amazon.cn/gp/product/B01M8L5Z3Y

        发现返回的是503 ,查看编码

        将编码改成可以阅读的相关编码后查看文本

        目前,全部代码如下

        事实上,当我们能从服务器上获得相关信息回来,那么这个错误已经不是网络出现的错误了。网站一般接受的是浏览器的请求,而对爬虫的请求是拒绝的。

        通过r.request.headers查看我们请求的request长什么样。

      

        通过上图,可以看见头部中的user-agent 显示的是python-requests/2.31.0,这说明我们的爬虫忠实的告诉了亚马逊的服务器,这次访问是由一个python的requests库的程序产生的,如果亚马逊提供了来源审查(反爬虫手段),它就可以使这样的访问变得错误,或者说它不支持这样的访问。

        接下来尝试一下,模拟浏览器向亚马逊发送请求。

        首先构造一个键值对,这样的一个键值对信息说明的是,我们重新定义了user-agent的内容。Mozilla/5.0(很标准的浏览器身份标识的字段)说明这个时候的user-agent可能是一个浏览器,这个浏览器可能是火狐,可能是Mozilla,甚至可能是IE10的浏览器。

        然后我们找到刚才的url链接,修改headers后再次访问status_code,发现返回的不是503,是200,这是说明我们真真正正的获得了一个产品的页面。

        再次查看user-agent的内容,发现user-agent的内容已经修改。

         此时再去访问r.text就是真正的页面内容了

        下面给出访问亚马逊产品的全部代码。在这个代码中与访问京东商品代码不同,我们需要通过headers字段让我们的代码模拟浏览器向亚马逊服务器提供HTTP请求。

案例3:百度360搜索关键词提交

        目的:用程序自动的向百度和360这俩个搜索引擎提交关键词并且获得它的搜索结果。

百度和360的区别主要在键不一样,百度是wd,360是q

 

案例4:网络图片的爬取和存储

        (该方式不止针对图片,对二进制的资源格式比如 图片、视频、动画等,都可以用同样的代码获取它。)

练习链接如下:

       http://img0.dili360.com/ga/M02/33/7C/wKgBzFSbqQyAJVAuAARB8cSWH_w695.tub.jpg@!rw14

        设定保存下来的图片名字为abc.jpg,方便我们后期处理

 with open(path,'wb') as f:
            f.write(r.content)

        这串代码表示先打开我们要存储的abc.jpg文件,并且把它定义为一个文件标识符f,然后我们将返回的内容(response返回的格式是二进制)写到这个文件中,即利用f.write(r.content)将返回的二进制形式写到文件中。

        

        f.close()表示关闭这个文件

        接着我们去D盘看一下这个abc.jpg文件

图片爬取全代码:

!案例5:IP地址归属地的自动查询(之前可以成功,现会报错)

        现成的查ip网站 :

        

 

        我们有的时候在网站看到的人机交互方式,比如说图形与文本框的、需要点击按钮的这种方式,在正式地向后台服务器提交的时候,其实都是以链接的形式提交的,只要我们能够通过浏览器的解析,知道向后台去提交的链接形式,那 就可以用python代码模拟。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2780422.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

nginx2

mkdir /usr/local/develop cd /usr/local/develop 下载 wget http://nginx.org/download/nginx-1.17.4.tar.gz 解压文件 tar zxmf nginx-1.17.4.tar.gz 进入解压目录 cd nginx-1.17.4/ 安装编译工具及依赖库 都安装成功后再次执行会有下面提示 yum -y install gcc pcre-de…

SQL--多表查询

我们之前在讲解SQL语句的时候,讲解了DQL语句,也就是数据查询语句,但是之前讲解的查询都是单 表查询,而本章节我们要学习的则是多表查询操作,主要从以下几个方面进行讲解。 多表关系 项目开发中,在进行数据…

《统计学简易速速上手小册》第8章:贝叶斯统计(2024 最新版)

文章目录 8.1 贝叶斯理论基础8.1.1 基础知识8.1.2 主要案例:疾病诊断8.1.3 拓展案例 1:垃圾邮件过滤8.1.4 拓展案例 2:财经新闻对股价的影响 8.2 贝叶斯方法的应用8.2.1 基础知识8.2.2 主要案例:个性化推荐系统8.2.3 拓展案例 1&a…

寻找最优的路测线 - 华为OD统一考试

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C 题目描述 评估一个网络的信号质量,其中一个做法是将网络划分为栅格,然后对每个栅格的信号质量计算。 路测的时候,希望选择一条信号最好…

STM32——中断

1 什么是中断 中断:打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续运行; 对于单片机来说,中断是指CPU正在处理某个事件A,发生了另一件事件B,请求CPU迅速去处理(…

leetcode 448. 找到所有数组中消失的数字

用的最土的办法&#xff0c;将数组nums中出现过的数字用map记录下来&#xff0c;再遍历1~n中的所有数字&#xff0c;凡是未在map中出现过的即为我们要找的数字。 Java代码如下&#xff1a; class Solution {public List<Integer> findDisappearedNumbers(int[] nums) {i…

【开源】基于JAVA+Vue+SpringBoot的二手车交易系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手车档案管理模块2.3 车辆预约管理模块2.4 车辆预定管理模块2.5 车辆留言板管理模块2.6 车辆资讯管理模块 三、系统设计3.1 E-R图设计3.2 可行性分析3.2.1 技术可行性分析3.2.2 操作可行性3.2.3 经济…

第四节课[XTuner微调]作业

文章目录 前言作业基础作业-XTuner InternLM-Chat 个人小助手认知微调实践 前言 XTuner 做在第三节课LangChain作业之前&#xff0c;因为第三节课没想好找哪个领域&#xff0c;等第三节课作业做了一起部署。 作业 基础作业-XTuner InternLM-Chat 个人小助手认知微调实践 然…

python+flask+django农产品供销展销电子商务系统lkw43

供销社农产品展销系统的设计与实现&#xff0c;最主要的是满足使用者的使用需求&#xff0c;并且可以向使用者提供一些与系统配套的服务。本篇论文主要从实际出发&#xff0c;采用以对象为设计重点的设计方法&#xff0c;因此在进行系统总体的需求分时借助用例图可以更好的阐述…

神经网络(Nature Network)

最近接触目标检测较多&#xff0c;再此对最基本的神经网络知识进行补充&#xff0c;本博客适合想入门人工智能、其含有线性代数及高等数学基础的人群观看 1.构成 由输入层、隐藏层、输出层、激活函数、损失函数组成。 输入层&#xff1a;接收原始数据隐藏层&#xff1a;进行…

DataBinding源码浅析---初始化过程

作为Google官方发布的支持库&#xff0c;DataBinding实现了UI组件和数据源的双向绑定&#xff0c;同时在Jetpack组件中&#xff0c;也将DataBinding放在了Architecture类型之中。对于DataBinding的基础使用请先翻阅前两篇文章的详细阐述。本文所用代码也是建立在之前工程基础之…

《乱弹篇(十四)香火旺》

连日来&#xff0c;“大年初一烧香祈福&#xff0c;北京雍和宫人山人海”这一词条登上社交网站热搜&#xff0c;对这一现象的描述多为“初一凌晨 民众在雍和宫前排大队”&#xff0c;“大年初一&#xff0c;雍和宫内人山人海&#xff0c;烟雾缭绕”&#xff0c;“雍和宫迎来6万…

全栈笔记_工具篇(nvm免安装版配置)

免安装版配置 下载nvm包:选择免安装压缩包nvm-noinstall.zip 解压zip包:将压缩包解压到指定目录,如:C:\nvm 新增环境变量: NVM_HOME:nvm解压之后的文件路径,对应配置文件里的root值NVM_SYMLINK:nvm 文件夹里新建 nodejs文件夹,对应配置文件里的path值 修改环境变量Pat…

[leetcode] 33. 搜索旋转排序数组

文章目录 题目描述解题方法二分查找java代码复杂度分析 题目描述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组…

AJAX——常用请求方法

1 请求方法 请求方法&#xff1a;对服务器资源&#xff0c;要执行的操作 2 数据提交 场景&#xff1a;当数据需要在服务器上保存 3 axios请求配置 url&#xff1a;请求的URL网址 method&#xff1a;请求的方法&#xff0c;GET可以省略&#xff08;不区分大小写&#xff09; …

【数据结构】13:表达式转换(中缀表达式转成后缀表达式)

思想&#xff1a; 从头到尾依次读取中缀表达式里的每个对象&#xff0c;对不同对象按照不同的情况处理。 如果遇到空格&#xff0c;跳过如果遇到运算数字&#xff0c;直接输出如果遇到左括号&#xff0c;压栈如果遇到右括号&#xff0c;表示括号里的中缀表达式已经扫描完毕&a…

协议-TCP协议-基础概念04-可能发生丢包的位置-linux配置项梳理(TCP连接的建立和断开、收发包过程)

可能发生丢包的位置-linux配置项梳理&#xff08;TCP连接的建立和断开、收发包过程&#xff09;-SYN Flood攻击和防御原理 参考来源&#xff1a; 极客时间-Linux性能优化实战 极客时间-Linux内核技术实战课 到底是哪里发生了丢包呢&#xff1f; Linux 的网络收发流程 从图中…

CentOS7下如何安装Nginx

一、Ngxin是什么 Nginx是一个开源的 Web 服务器&#xff0c;具有反向代理、负载均衡、缓存等功能。它可以作为 HTTP 服务器&#xff0c;将服务器上的静态文件&#xff08;如 HTML、图片&#xff09;通过 HTTP 协议展现给客户端&#xff0c;也可以实现动静分离&#xff0c;把动态…

PgSQL内核特性 - push-based pipeline 执行引擎

PgSQL内核特性 - push-based pipeline 执行引擎 数据库的SQL执行引擎负责处理和执行SQL请求。通常情况下&#xff0c;查询优化器会输出物理执行计划&#xff0c;一般由一系列的算子组成。当前&#xff0c;有两种算子流水线构建方式&#xff1a;1&#xff09;需求驱动的流水线&a…

【大厂AI课学习笔记】【1.6 人工智能基础知识】(4)深度学习和机器学习

关于深度学习和机器学习&#xff0c;出来包含关系之外&#xff0c;还有如上总结的知识点。 分别从特征处理、学习方法、数据依赖、硬件依赖等4个方面&#xff0c;进行了总结。 从特征处理上看&#xff1a;深度学习从数据中习得高级特征&#xff0c;并自行创建新的特征。这比普…