【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用
【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用
广东职业技术学院 欧浩源
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、发起网络请求
使用Requests的Get方法发送网络请求非常简单。
首先,导入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头部,只要简单地传递一个dict给headers参数就可以了。很多服务器对于非正常的请求往往会拒绝,这时候就需要给网络请求穿上合法的外衣,而伪装请求头部则是最常用的手段。
用户代理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的用法远不止此,但作为网络爬虫的入门应用,上述知识基本足够。向服务器发送请求的方法也不止一种,怎么熟悉怎么用,怎么方便怎么用,作为入门,多了解,多学习,多练习,多应用才是正道。
【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用的更多相关文章
- 【网络爬虫入门01】应用Requests和BeautifulSoup联手打造的第一条网络爬虫
[网络爬虫入门01]应用Requests和BeautifulSoup联手打造的第一条网络爬虫 广东职业技术学院 欧浩源 2017-10-14 1.引言 在数据量爆发式增长的大数据时代,网络与用户的沟 ...
- Python爬虫入门(二)之Requests库
Python爬虫入门(二)之Requests库 我是照着小白教程做的,所以该篇是更小白教程hhhhhhhh 一.Requests库的简介 Requests 唯一的一个非转基因的 Python HTTP ...
- 【网络爬虫入门05】分布式文件存储数据库MongoDB的基本操作与爬虫应用
[网络爬虫入门05]分布式文件存储数据库MongoDB的基本操作与爬虫应用 广东职业技术学院 欧浩源 1.引言 网络爬虫往往需要将大量的数据存储到数据库中,常用的有MySQL.MongoDB和Red ...
- 【网络爬虫入门03】爬虫解析利器beautifulSoup模块的基本应用
[网络爬虫入门03]爬虫解析利器beautifulSoup模块的基本应用 1.引言 网络爬虫最终的目的就是过滤选取网络信息,因此最重要的就是解析器了,其性能的优劣直接决定这网络爬虫的速度和效率.B ...
- Python爬虫入门四之Urllib库的高级用法
1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...
- 转 Python爬虫入门四之Urllib库的高级用法
静觅 » Python爬虫入门四之Urllib库的高级用法 1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我 ...
- 【网络爬虫入门04】彻底掌握BeautifulSoup的CSS选择器
[网络爬虫入门04]彻底掌握BeautifulSoup的CSS选择器 广东职业技术学院 欧浩源 2017-10-21 1.引言 目前,除了官方文档之外,市面上及网络详细介绍BeautifulSoup ...
- python网络爬虫入门范例
python网络爬虫入门范例 Windows用户建议安装anaconda,因为有些套件难以安装. 安装使用pip install * 找出所有含有特定标签的HTML元素 找出含有特定CSS属性的元素 ...
- 转 Python爬虫入门三之Urllib库的基本使用
静觅 » Python爬虫入门三之Urllib库的基本使用 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器 ...
随机推荐
- Mac系统实现git命令自动补全
当我第一次使用mac电脑的时候,由于我是从事软件开发的程序员,所以必须经常要使用到git,然而发现在mac系统下,git不能实现命令的自动补全,然后网上查找资料,找到了解决办法,终于可以实现了git命 ...
- a链接易混淆与form表单简易验证用法详解
链接可以说遍布互联网,比如你想提供一个可以跳转到百度首页的链接给网友,那么代码如下: <a href="http://www.baidu.com">百度一下,你就知道& ...
- 201521123071 《JAVA程序设计》第二周学习总结
1. 本周学习总结 在本周的学习中,主要学习了书上的String类以及Math类等知识,但是书上学到的东西只是理论,实际打起代码来的时候会学习到更多,比如在PTA上就有学习到StringBuilder ...
- 201521123013 《Java程序设计》第1周学习总结
1. 本章学习总结 1.Java是面向对象的编程语言,它在通过jvm和jre将其转成本地机器代码,达到一次撰写,到处运行的效益,实现跨平台运行,代码开源,使用范围广. 2.了解jdk.jre.jvm的 ...
- Java课程设计-计算器 郑子杰(201521123021)
1.团队课程设计博客链接 http://www.cnblogs.com/I-love-java/p/7058752.html 2.个人负责模块或任务说明 ①图形界面的初始化 ②图形界面的排版设计 ③主 ...
- 201521123070 《JAVA程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 Q1. finally 题目4-2 1.1 截图你的提交结果 ...
- java命令行执行带依赖jar包的main函数
有时候客户端没有运行环境,需要将程序放到服务器上执行,可按如下操作: 1.创建libs文件夹,将运行过程中依赖的jar包全部拷贝到此处; 2.编译.执行 javac -Djava.ext.dirs=l ...
- 使用IntelliJ IDEA查看类的继承关系图形
最近正好也没什么可忙的,就回过头来鼓捣过去的知识点,到Servlet部分时,以前学习的时候硬是把从上到下的继承关系和接口实现记得乱七八糟. 这次利用了IDEA的diagram,结果一目了然,也是好用到 ...
- 如何手动获取Spring容器中的bean(ApplicationContextAware 接口)
ApplicationContextAware 接口的作用 先来看下Spring API 中对于 ApplicationContextAware 这个接口的描述: 即是说,当一个类实现了这个接口之 ...
- JSP获取Cookie对象
cookie是小段的文本信息,在网络服务器上生成,并发送给浏览器的.通过使用cookie可以标识用户身份,记录用户和密码,跟踪重复用户等.浏览器将cookie以key/value的形式保存到客户机的某 ...