如果要进行客户端与服务器端之间的消息传递,我们可以使用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. ABP框架没有httpPost,httpget,httpput特性

    需要引用一下组件, Microsoft.AspNetCore.Mvc

  2. Angular js 复制粘贴

    关于copy到剪切板的实现需要引用Clipboard.min.js https://pan.baidu.com/s/1eStTJlo 页面如下所示,需要实现 点击copy字样 将id为content的 ...

  3. POJ 1422 DAG最小路径覆盖

    求无向图中能覆盖每个点的最小覆盖数 单独的点也算一条路径 这个还是可以扯到最大匹配数来,原因跟上面的最大独立集一样,如果某个二分图(注意不是DAG上的)的边是最大匹配边,那说明只要取两个端点只要一条边 ...

  4. 生成私钥、公钥,配置到Git上

    ssh-keygen -t rsa -C "1032671220@qq.com" 输入完毕指令,输入密码.然后会在 /z/.ssh/文件夹下生成一个私钥rsa_id.公钥rsa_p ...

  5. SpringCloud学习之Ribbon使用(四)

    1.关于 Ribbon Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具.Ribbon 是 Netflix 发布的开源项目,主要功能是提供客 ...

  6. 题解 P1403 【[AHOI2005]约数研究】

    题目 看到题解区很多人直接给出结论:答案为 \(\displaystyle \sum_{i=1}^n\lfloor{n\over i}\rfloor\) ,没给出证明,这里给出证明 [分析] 首先,我 ...

  7. 无法安装R程序包

    如题,使用insatll.packages("cluster")安装包时,会出现如下错误提示. Warning: unable to access index for reposi ...

  8. VNC/XRDP/XDMCP尝试

    (记得安装X Window System等 可参考链接https://www.linuxidc.com/Linux/2017-10/147646.htm) 看本文档时可以参考 https://blog ...

  9. Python笔记_第四篇_高阶编程_检测_2.文档检测

    1. 文档检测: 我们观察官方的函数编写的时候会在函数或者类当中有些类的备注,这些备注叫做文档.当我们在编写函数的时候,可以去显示这些文档.因此我们可以用这个文档来进行检测.另外我们还需要导入doct ...

  10. thinkcmf面包屑制作

    网站常有的功能面包屑,如图所示: 支持1级分类 list.html 首页 / {$name} article.html 首页 / {$term['name']} / {$post_title} 链接: ...