Python爬虫实战入门二:从一个简单的HTTP请求开始(转载)
一、为什么从HTTP请求开始
无论我们通过浏览器打开网站、访问网页,还是通过脚本对URL网址进行访问,本质上都是对HTTP服务器的请求,浏览器上所呈现的、控制台所显示的都是HTTP服务器对我们请求的响应。
以打开我的个人网站为例,我们在地址栏输入“zmister.com”,浏览器上呈现的是下图:
我们按F12打开网页调试工具,选择“network”选项卡,可以看到我们对zmister.com的请求,以及zmister.com给我们的响应:
二、基本的HTTP概念
通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个指示头域结束的空行和可选的消息体组成。
我们看上面对zmister.com的HTTP示例来说明:
1、HTTP概览
Request URl:表示请求的URL
Request Method:表示请求的方法,此处为GET。除此之外,HTTP的请求方法还有OPTION、HEAD、POST、DELETE、PUT等,而最常用的就是GET和POST方法:
- POST:
向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。 - GET:
向指定的资源发出“显示”请求。
Status Code:显示HTTP请求和状态码,表示HTTP请求的状态,此处为200,表示请求已被服务器接收、理解和处理;
状态代码的第一个数字代表当前响应的类型,HTTP协议中有以下几种响应类型:
- 1xx消息——请求已被服务器接收,继续处理
- 2xx成功——请求已成功被服务器接收、理解、并接受
- 3xx重定向——需要后续操作才能完成这一请求
- 4xx请求错误——请求含有词法错误或者无法被执行
- 5xx服务器错误——服务器在处理某个正确请求时发生错误
2、HTTP请求头
Accept:表示请求的资源类型;
Cookie:为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据;
User-Agent:表示浏览器标识;
Accept-Language:表示浏览器所支持的语言类型;
Accept-Charset:告诉 Web 服务器,浏览器可以接受哪些字符编码;
Accept:表示浏览器支持的 MIME 类型;
Accept-Encoding:表示浏览器有能力解码的编码类型;
Connection:表示客户端与服务连接类型;
基本的HTTP介绍就结束了,如果需要更加详细的HTTP知识,推荐一本HTTP入门书《图解HTTP》
下面,我们用Python来实现一个简单的HTTP请求
三、用Python进行HTTP请求
这里继续用我的个人网站http://zmmister.com 作示例
打开代码编辑器,输入以下代码:
#coding:utf-8 import requests url = "http://bxu2713810459.my3w.com" data = requests.get(url)
这样,就完成了一个简单的对zmister.com的HTTP请求。
我们看看这个请求的状态码:
data.status_code
结果返回的是:200
再看看响应的主体消息:data.content
结果返回了一大串编码了的HTML源码,这些HTML源码未经解码和解析,看上起很是凌乱
对这些凌乱的html源码进行处理,就需要使用到BeautifulSoup模块了,下一章咱们继续。
原文地址:https://www.cnblogs.com/zeliangzhang/p/15223212.html
- 2015年编程之美(资格赛) ---2月29日
- 编程之美--2. Trie树 (Trie图)
- 编程之美 --1 : 骨牌覆盖问题·一
- go语言中的数组切片:特立独行的可变数组
- go语言单例模式(Singleton)实例分析
- C++ template的一些高级用法(元编码,可变参数,仿函数,using使用方法,. C++ 智能指针)
- Golang memory model
- go的非侵入式接口
- C++ 如何重复利用一个内存地址块
- 如何减轻挖矿攻击给企业安全带来的威胁
- C++ 高级语法学习与总结(代码实例)
- golang使用原始套接字构造UDP包
- C与C++在const用法上的区别
- vs---错误收集并自己解决后归纳
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 排障集锦:九九八十一难之第八难!ERROR 2002 (HY000): Can‘t connect to local MySQL server
- Vue Router配置参数、404页面
- 机器学习之决策树三-CART原理与代码实现
- Vue Router路径切换过渡动画
- 听说Mysql你很豪横?-------------深入解析mysql数据库中的索引!
- 听说Mysql你很豪横?-------------深入解析mysql数据库中的事务!
- Struts2笔记
- Vue Router实现路由嵌套单页面展示
- 排障集锦:九九八十一难之第九难!mysql备份恢复路上的小插曲
- jQuery限制复选框checkbox的选中次数
- jQuery点击切换增加和删除class类
- Vue使用props和emit父子组件通信
- 听说Mysql你很豪横?-------------呕心沥血深入解析mysql备份与恢复!!!
- 排障集锦:九九八十一难之第十难!mysq备份恢复,Could not read entry at offset *: Error in log format or read error.
- Vue使用ref父子组件通信