【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用

【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用

广东职业技术学院  欧浩源 2017-10-15 

1、引言

    实现网络爬虫的第一步就是要建立网络连接并向服务器或网页等网络资源发起请求。urllib是目前最常用的做法,然而Requests会比urlib更加方便,能够让人以更加简单的方式获取网络资源。

2、什么是Requests?

    Requests是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库。它比urllib更加方便,可以节约我们大量的工作,完全满足HTTP测试需求。
    Requests对象有Get、Post、Put、Delete、Head、Options等HTTP方法,使用起来非常简单。对于WEB系统,一般只支持Get和Post方法。在网络爬虫中,Get方法最常用。在本文中也重点讨论该方法相关的应用,其他方法即更加详细的使用,见用户手册:
    http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

3、发起网络请求

    使用RequestsGet方法发送网络请求非常简单
    首先,导入Requests模块:
    import requests
    然后,通过URL向网页发起请求:
    res = requests.get('http://www.gdptc.cn/')
    这时,我们有一个名为res的Requests对象,从这个对象中我们可以获取所有我们想要的信息,例如将网页的URL打印出来。
    print(res.url)

4、获取响应内容

    我们能读取服务器响应的内容。Requests会自动解码来自服务器的内容,大多数unicode字符集都能被无缝地解码

    请求发出后,Requests会基于HTTP头部对响应的编码作出有根据的推测。当你访问res.text 之时,Requests会使用其推测的文本编码。你可以找出 Requests使用了什么编码,并且能够使用res.encoding属性来改变它

    如果你改变了编码,每当你访问 res.text ,Request 都将会使用res.encoding的新值

5、响应头的内容

    服务器响应头以一个Python字典的形式来表示。这个字典比较特殊,它是仅为HTTP头部而生的。
    res.headers的结果是:
{
  'Content-Length' : '39037'
  'X-Powered-By' : 'ASP.NET'
  'Date' : 'Sat, 14 Oct 2017 13:58:41 GMT'
  'X-AspNet-Version' : '2.0.50727'
  'Cache-Control' : 'private'
  'Content-Type' : 'text/html; charset=utf-8'
  'Server' : 'Microsoft-IIS/7.5'
}
    通过这个服务器的响应头,我们可以知道服务器的一些基本数据信息。根据 RFC2616, HTTP头部是大小写不敏感的。因此,我们可以使用任意大写形式来访问这些响应头字段。例如我们想查看服务器的编码和服务器型号:

6、定制请求头

    如果你想为请求添加HTTP头部,只要简单地传递一个dictheaders参数就可以了。很多服务器对于非正常的请求往往会拒绝,这时候就需要给网络请求穿上合法的外衣,而伪装请求头部则是最常用的手段。
    用户代理User Agent,是HTTP协议中的一部分,属于请求头的组成部分。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核等信息的标识。通过添加合法浏览器的UA信息,可以将爬虫的请求伪装成浏览器的请求。
    例如,IE9浏览器的User Agent为:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;
    这些常用的浏览器UA在网上都可以查到。
    如果要模拟IE9浏览器访问百度网站,可以这样实现:

    Requests不会基于定制 header 的具体情况改变自己的行为。只不过在最后的请求中,所有的header信息都会被传递进去

7、小结

    Requests的用法远不止此,但作为网络爬虫的入门应用,上述知识基本足够。向服务器发送请求的方法也不止一种,怎么熟悉怎么用,怎么方便怎么用,作为入门,多了解,多学习,多练习,多应用才是正道。

转载于:https://www.cnblogs.com/ALittleBee/p/7669180.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《零信任的基石:使用 SPIFFE 为基础设施创建通用身份》翻译电子书分享

国庆假期除了去浙江和安徽玩了一圈欣赏江南山水和徽派建筑之外,还抽空翻译了一本电子书。本书译自 Solving the Bottom Turtle — a SPIFFE Way to Establish Trust in Your Infrastructure via Universal Identity。你可以选择在线阅读(推荐&#xff09…

《Outlook时间整理术》一创建和使用自己的文件夹结构

本节书摘来异步社区《Outlook时间整理术》一书中的第1章,作者: 【德】Lothar Seiwert , Holger Woeltje 译者: 欧阳宇,更多章节内容可以访问云栖社区“异步社区”公众号查看。 创建和使用自己的文件夹结构 花费约两小时为电子邮件…

《实用软件架构:从系统环境到软件部署 》——2.4 架构视图与架构视点

本节书摘来自华章出版社《实用软件架构:从系统环境到软件部署》一书中的第2章,第2.4节,作者:[印]蒂拉克米特拉(Tilak Mitra)著,爱飞翔 译,更多章节内容可以访问云栖社区“华章计算机…

TCP:当初取代NCP,如今害怕被取代

我叫TCP(Transmission Control Protocol)也叫传输控制协议。不觉回忆1983年,亲手将NCP协议淘汰,取而代之的是我,成了火遍大江南北的网络红人之一。现如今,我感受到前所未有的恐惧,因为我一生的敌…

批处理中的IF详解

在CMD使用IF /?打开IF的系统帮助会发现IF有3种基本的用法! 第一种用法:IF [NOT] ERRORLEVEL number command 这种用法现在很少用了,因为它需要使用到CHOICE命令,这个命令现在被set /p代替了,它是判断CHOICE命令选择的选项的&…

fullcalendar 显示的时间间隔只有四十五分钟_【体能新视点】——女子篮球运动员比赛期间的心率、血乳酸浓度和时间运动分析...

女子篮球运动员比赛期间的心率、血乳酸浓度和时间-运动分析—摘要—本研究的目的是检验女子篮球运动员在比赛规则改变后的生理需求和运动模式。在九场正式比赛中,对九名大学代表队队员进行了研究。每场比赛都被录像以确定主要动作的频率,连续记录心率&am…

《JavaScript机器人编程指南》——1.2 NodeBot是什么,基本词汇还有哪些

本节书摘来异步社区《JavaScript机器人编程指南》一书中的第1章,第1.2节,作者:【美】Kassandra Perch(珀芝),更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 NodeBot是什么,基本词…

解决在Python中使用Win32api报错的问题,No module named win32api

一、系统环境 操作系统: Win7 64位 Python:3.7.0 二、在使用import win32api时,报错:No module named win32api 网上查到有下面解决办法: 方法1:pip install pypiwin32或pip3 install pypiwin32 或 python -m pip install pypiwin…

《Python游戏编程入门》——1.2 初识Python

本节书摘来自异步社区《Python游戏编程入门》一书中的第1章,第1.2节,作者[美]Jonathan S. Harbour ,李强 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 初识Python Python既是一个软件工具包,也是一种…

大数据:Parquet文件存储格式

一、Parquet的组成 Parquet仅仅是一种存储格式,它是语言、平台无关的,并且不需要和任何一种数据处理框架绑定,目前能够和Parquet适配的组件包括下面这些,可以看出基本上通常使用的查询引擎和计算框架都已适配,并且可以…

“数据门”事件频发 如何避免人为因素导致数据泄露?

前段时间,某酒店集团数据泄露引起轩然大波,泄露的数据中包含了用户姓名、手机号、邮箱、号等多项信息。卖家对这个约5亿条数据打包出售价格为8比特币或520门罗币。而关于此次信息泄露事件的原因,目前尚未定论。据悉,由于集团某程序…

lamda获取参数集合去空_JAVA集合框架知识

1. Vector用法和ArrayList区别(1) Vector的特有方法有哪些?void addElement(E obj) 将指定的组件添加到此向量的末尾,将其大小增加1。(2) Vector与ArrayList的区别是什么?①Vector的add()方法是同步方法,ArrayList的add()方法是非…

Blazor学习之旅(2)第一个Blazor应用

【Blazor】| 总结/Edison Zhou大家好,我是Edison。最近在学习Blazor做全栈开发,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。本篇我们来构建第一个Blazor Web应用,…

HTTP与服务器的四种交互方式

Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而H…

ubuntu 以太网已连接但是无法联网_工业以太网有多“牛X”?两个案例告诉你

现代生活中,工业以太网发挥的作用愈来愈重要。为增进大家对工业以太网的认识,本文将基于3方面介绍工业以太网:何为工业以太网物理层?工业以太网具有哪些优势?工业以太网两大方案介绍。如果你对工业以太网具有兴趣&…

http服务详解(1)——一次完整的http服务请求处理过程

前言:要熟练掌握一个服务,首先需要非常了解这个服务的工作过程,这篇就详细解释了http服务的请求处理过程。 一次完整的http请求处理过程 (1)流程图 (2)过程详解 0、DNS域名解析:递归…

线程管理(九)使用本地线程变量

声明:本文是《 Java 7 Concurrency Cookbook 》的第一章, 作者: Javier Fernndez Gonzlez 译者:郑玉婷 校对:方腾飞 使用本地线程变量 并发应用的一个关键地方就是共享数据。这个对那些扩展Thread类或者实现Runnable接…

5训练需要更改参数吗_糖尿病病人需要多喝水吗?多喝水的5大好处,了解一下...

糖尿病是典型的慢性疾病,需要在生活中多加讲究,从各方面进行预防,其中喝水也是非常重要的一项调控方法。这就与糖尿病影响到患者的代谢功能有一定的关系,如果能够保持良好的饮水习惯,就可以有效解决糖尿病带来的影响。…

wordpress搭建博客 主题推荐 2019

一、generatepress2.14 主页: 详情页: 二、 Astra 主页: 详情页: 三、Bstone 主页: 详情页: 四、Hestia 主页: 详情页: 五、Rife free 主页: 详情页:

Blazor学习之旅(1)初步了解Blazor

【Blazor】| 总结/Edison Zhou九月以来在学习Blazor做全栈开发,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。作为第一篇,我们先来了解一下这个Blazor到底是个什么鬼。什么是Bl…