如果要进行客户端与服务器端之间的消息传递,我们可以使用HTTP协议请求进行。 HTTP协议请求主要分为6种类型,各类型的主要作用如下:

  • GET请求:GET请求会通过URL网址传递信息,可以直接在URL中写上要传递的信息,也可以由表单进行传递。如果使用表单进行传递,这表单中的信息会自动转为URL地址中的数据,通过URL地址传递。
  • POST请求:可以向服务器提交数据,是一种比较主流也比较安全的数据传递方式,比如在登录时,经常使用POST请求发送数据。
  • PUT请求:请求服务器存储一个资源,通常要指定存储的位置。
  • DELETE请求:请求服务器删除一个资源。
  • HEAD请求:请求获取对应的HTTP报头信息。
  • OPTIONS请求:可以获取当前URL所支持的请求类型。

除此之外,还有TRACE请求与CONNECT请求等。 接下来,将通过实例讲解HTTP协议请求中的GET请求和POST请求,这两种请求相对来说用的最多。

一、GET请求

有时想在百度上查询一个关键词,我们会打开百度首页,并输入该关键词进行查询,那么这个过程怎样使用爬虫自动实现呢? 我们首先需要对查询过程进行相应的分析,可以打开百度首页,然后输入想检索的关键词,比如输入“csdn”,然后按回车键,我们观察一下URL的变化,此时URL变成:

https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=0&rsv_idx=1&tn=baidu&wd=csdn&rsv_pq=cdc30efa00029c9b&rsv_t=e241AFVDq43ScKqi0aFl08%2FxnDF88zRnCiCbbkMScYi203XzFo4fq84osuU&rqlang=cn&rsv_enter=1&rsv_sug3=1&rsv_sug1=1&rsv_sug7=001&rsv_sug2=1&rsp=0&rsv_sug9=es_1_0&rsv_sug4=1232&rsv_sug=4

可以看出字段ie是utf-8,代表编码信息,而字段wd为csdn,刚好是我们要查询的信息。若我们将网址简化成https://www.baidu.com/s?wd=cadn,也可得到同样的页面。

由此可见,我们在百度上查询一个关键字时,会使用GET请求,其中关键性字段是wd,网址格式为:https://www.baidu.com/s?wd=关键词。如果关键词上有中文等字符,一定要编码。具体代码如下:

import urllib.request

url = "https://www.baidu.com/s?wd="
keyword = "csdn"
url = url + keyword
req = urllib.request.Request (url)
req.add_header('User-Agent','Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45')
data = urllib.request.urlopen(req).read()
fhandle = open('/home/wl/csdn.html','wb')
fhandle.write(data)
fhandle.close()

此时,我们用浏览器打开刚才保存的csdn.html文件,我们就可以看到我们刚才爬取的网页结果,如下图:

如果keyword包含中文字符如“csdn博客”,我们就要进行编码。

keyword_code = urllib.request.quote(keyword)

二、post请求

我们在进行注册、登录等操作的时候,基本上都会遇到POST请求,接下来我们就为大家通过实例来分析如何通过爬虫来实现POST请求。 在此,我们示例一下如何使用爬虫通过POST表单传递信息。 给大家提供一个POST表单的测试网页,做测试使用,网址为:http://www.iqianyue.com/mypost/

然后我们需要构建表单数据,在该网页上右击“查看网页源代码”,找到对应的form表单部分,然后进行分析。

可以发现,表单中的姓名对应的输入框中,name属性值为”name”,密码对应的输入框中,name属性值为”pass”,所以,我们构造的数据中会包含两个字段,字段名分别是”name”,”pass’。字段值设置我们要传递的信息。格式为字典形式,即: {字段名1:字段值1,字段名2:字段值2,…..}

import urllib.request
import urllib.parse url = "http://www.iqianyue.com/mypost/"
postdata = urllib.parse.urlencode({'name':'wanglong','pass':'223'}).encode('utf-8')
req = urllib.request.Request (url,postdata)
req.add_header('User-Agent','Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45')
data = urllib.request.urlopen(req).read()
fhandle = open('/home/wl/post.html','wb')
fhandle.write(data)
fhandle.close()

爬虫笔记(三)——HTTP协议请求实战的更多相关文章

  1. nodejs爬虫笔记(三)---爬取YouTube网站上的视频信息

    思路:通过笔记(二)中代理的设置,已经可以对YouTube的信息进行爬取了,这几天想着爬取网站下的视频信息.通过分析YouTube,发现可以从订阅号入手,先选择几个订阅号,然后爬取订阅号里面的视频分类 ...

  2. 网络爬虫笔记之http协议

    http协议和https协议: HTTP协议:HyperText Transfer Protocol,超文本传输协议,是一种发布和接收HTML页面的方法.服务器端口号是80. HTTPS协议:是HTT ...

  3. PYTHON 爬虫笔记三:Requests库的基本使用

    知识点一:Requests的详解及其基本使用方法 什么是requests库 Requests库是用Python编写的,基于urllib,采用Apache2 Licensed开源协议的HTTP库,相比u ...

  4. scrapy爬虫笔记(三)------写入源文件的爬取

    开始爬取网页:(2)写入源文件的爬取 为了使代码易于修改,更清晰高效的爬取网页,我们将代码写入源文件进行爬取. 主要分为以下几个步骤: 一.使用scrapy创建爬虫框架: 二.修改并编写源代码,确定我 ...

  5. Linux实战教学笔记26:http协议原理

    目录 第二十六节 http协议原理 第1章 Web服务基础 1.1 http服务重要基础 1.2 HTTP协议 1.3 HTTP资源 1.4 网站流量度量术语 1.5 www服务软件介绍 1.6 本章 ...

  6. 物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus

    物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus 物联网 (IoT) 不只是新技术,还是与旧技术的集成,其关键在于通信.可用的通信方法各不相同,但是,各种不同的协议在将海量“事物”连接 ...

  7. Python网络爬虫第三弹《爬取get请求的页面数据》

    一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...

  8. python网络爬虫第三弹(<爬取get请求的页面数据>)

    一.urllib库 urllib是python自带的一个用于爬虫的库,其主要作用就是通过代码模拟浏览器发送请求,其常被用到的子模块在 python3中的为urllib.request 和 urllib ...

  9. python爬虫笔记Day01

    python爬虫笔记第一天 Requests库的安装 先在cmd中pip install requests 再打开Python IDM写入import requests 完成requests在.py文 ...

随机推荐

  1. springboot学习2 整合mybatis

    springboot整合mybatis 一.添加mybatis和数据库连接的依赖 <!--整合mybatis--> <dependency> <groupId>or ...

  2. Atomic系列类整体介绍

    本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. 并发编程系列博客传送门 本文是转载文章,原文请见此博客,文章主要对java.ut ...

  3. POJ 1651:Multiplication Puzzle 矩阵相乘式DP

    Multiplication Puzzle Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7118   Accepted:  ...

  4. C++ 操作数据库类

    #pragma once #include <string> #include <windows.h> #include <algorithm> #include ...

  5. 递归(VBA实现)

    案列: 给定n个数,取任意g个数之和等于h的组合. 采用递归的方式实现: Option Explicit Dim arr1(1 To 10000, 1 To 1) As String Dim k, g ...

  6. VBE2019的下载、安装和使用(最新版2020.2.22)

    VBE2019可用于XP系统.Windows 7和Windows 10的32位.64位Office对应的VBA环境 安装包下载地址:VBE2019-Setup.zip 下载后解压缩,直接双击安装(请勿 ...

  7. Cavace 自定义View绘制

    一.开发资料与实例教程1.跟囧猫学之Canvas.Matrix 倒影实例教程 http://www.eoeandroid.com/thread-158506-1-1.html 2.Gridview 控 ...

  8. Spring框架-IOC和AOP

    IOC:它并不是一种技术实现,而是一种设计思想.在任何一个有实际开发意义的程序项目中,我们会使用很多类来描述它们特有的功能,并且通过类与类之间的相互协作来完成特定的业务逻辑.这个时候,每个类都需要负责 ...

  9. Class.forName(String className)解析

    功能: Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类, 也就是说JVM会执行该类的静态代码段 一 ...

  10. WOJ 1546 Maze 图论上的状态压缩DP

    http://acm.whu.edu.cn/land/problem/detail?problem_id=1546 这个题目还是聪哥教的方法过的 首先搜索是必须的,而且通过搜索来缩点,这些应该要想到, ...