03精通Python网络爬虫——HTTP协议请求实战
2018-03-09 00:05
651 查看
运行环境Python3.6.4
如果要进行客户端与服务器之间的消息传递,我们可以使用HTTP协议请求进行。
HTTP协议请求分为6种类型:
1. GET请求:GET请求会通过URL网址传递信息,可以直接在URL中写上要传递的信息,也可以由表单进行传递。如果使用表达进行传递,表单中的信息会自动转为URL地址中的数据,通过URL地址传递。
2. POST请求:可以向服务器提交数据,是一种比较主流也比较安全的数据传递方式,比如在登录时,经常使用POST请求发送数据。
3. PUT请求:请求服务器存储一个资源,通常指定存储的位置。
4. DELETE请求:请求服务器删除一个资源。
5. HEAD请求:请求获取对应的HTTP报头信息。
6. OPTIONS请求:可以获取当前URL所支持的请求类型。
此外还有TRAC请求和CONNECT请求等,TRACE请求主要用于测试或诊断。
这里主要介绍GET请求和POST请求。
使用GET请求思路如下:
1. 构建对应的URL地址,格式为:”http://网址?字段名1 = 字段内容1&字段名2 = 字段内容2“
2. 以对应的URL为参数,构建Request对象;
3. 通过urlopen()打开构建的Request对象。
4. 按需求进行后续的处理操作,比如读取网页的内容,将内容写入文件等。
使用POST请求思路如下:
1. 设置好URL网址
2. 构建表单数据,并使用urllib.parse.urlencode对数据进行编码处理
3. 构建Request对象,参数包括URL地址和要传递的数据
4. 使用add_header()添加头信息,模拟浏览器进行爬取
5. 使用urllib.request.urlopen()打开对应的Request对象,完成信息的传递
6. 后续处理,比如读取网页内容、讲内容写入文件等。
如果要进行客户端与服务器之间的消息传递,我们可以使用HTTP协议请求进行。
HTTP协议请求分为6种类型:
1. GET请求:GET请求会通过URL网址传递信息,可以直接在URL中写上要传递的信息,也可以由表单进行传递。如果使用表达进行传递,表单中的信息会自动转为URL地址中的数据,通过URL地址传递。
2. POST请求:可以向服务器提交数据,是一种比较主流也比较安全的数据传递方式,比如在登录时,经常使用POST请求发送数据。
3. PUT请求:请求服务器存储一个资源,通常指定存储的位置。
4. DELETE请求:请求服务器删除一个资源。
5. HEAD请求:请求获取对应的HTTP报头信息。
6. OPTIONS请求:可以获取当前URL所支持的请求类型。
此外还有TRAC请求和CONNECT请求等,TRACE请求主要用于测试或诊断。
这里主要介绍GET请求和POST请求。
一、GET请求实战
实现在百度上查询一个关键词,以下代码在谷歌学术上不行使用GET请求思路如下:
1. 构建对应的URL地址,格式为:”http://网址?字段名1 = 字段内容1&字段名2 = 字段内容2“
2. 以对应的URL为参数,构建Request对象;
3. 通过urlopen()打开构建的Request对象。
4. 按需求进行后续的处理操作,比如读取网页的内容,将内容写入文件等。
import urllib.request url = "http://www.baidu.com/s?wd=" #将要爬取的网址赋值给变量url key = "肝癌"#定义查询关键词 key_code = urllib.request.quote(key)#编码关键词 url_all = url + key_code#构建URL req = urllib.request.Request(url_all)#创建一个Request对象并赋值给req变量,格式为:urllib.request.Request(url地址) #模拟成浏览器 req.add_header("User-Agent","Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36")#使用add_header()函数添加对应的User-Agent信息,格式为:Request对象名.add_header(字段名,字段值) data = urllib.request.urlopen(req).read()#模仿为浏览器去打开、爬取网址并读取赋值给变量data.此时是具有头信息的打开操作 fhandle = open("D:/Python35/myweb/part4/7.html","wb") #用 "wb"二进制的方式用open()函数打开该文件,并赋值给fhandle变量 fhandle.write(data) #用write()函数将data的数据写入变量fhandle fhandle.close() #用close()函数关闭该文件
二、POST请求实战
我们在进行注册、登陆等操作的时候,基本都会遇到POST请求,实现爬虫自动登陆,不过自动登陆CSDN失败使用POST请求思路如下:
1. 设置好URL网址
2. 构建表单数据,并使用urllib.parse.urlencode对数据进行编码处理
3. 构建Request对象,参数包括URL地址和要传递的数据
4. 使用add_header()添加头信息,模拟浏览器进行爬取
5. 使用urllib.request.urlopen()打开对应的Request对象,完成信息的传递
6. 后续处理,比如读取网页内容、讲内容写入文件等。
#登陆测试网页 import urllib.request import urllib.parse url = "http://www.iqianyue.com/mypost/" #构建表单数据,格式为字典形式,即{字段名1:字段值1,字段名2:字段值2,...} postdata = urllib.parse.urlencode({ "name" : "ceo@iqianyue.com", #","不能省 "pass" : "aA123456" }).encode('utf-8') #将数据使用urlencode编码处理后,使用encode()设置为utf-8编码 req = urllib.request.Request(url,postdata) req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36") data = urllib.request.urlopen(req).read() fhandle = open("D:/Python35/myweb/part4/8.html","wb") #用 "wb"二进制的方式用open()函数打开该文件,并赋值给fhandle变量 fhandle.write(data) #用write()函数将data的数据写入变量fhandle fhandle.close() #用close()函数关闭该文件
本文中另外两个问题还有待解决,如何爬取谷歌学术上的论文?如何自动登陆CSDN?
声明:本文是学习笔记,参考书籍为《精通Python网络爬虫》相关文章推荐
- 06精通Python网络爬虫——Cookiejar实战
- 04精通Python网络爬虫——代理服务器的设置&DebuLog实战&URLError实战
- 09精通Python网络爬虫——糗事百科爬虫实战
- Python网络爬虫实战:根据天猫胸罩销售数据分析中国女性胸部大小分布
- Python网络爬虫实战案例之:7000本电子书下载(2)
- python爬虫 - python requests网络请求简洁之道
- python网络爬虫实战--重点整理
- 精通python网络爬虫笔记一
- 精通Python网络爬虫(0):网络爬虫学习路线
- 02精通Python网络爬虫——模拟浏览器&超时设置
- 精通Python网络爬虫之网络爬虫学习路线【普及贴】
- Python3网络爬虫快速入门实战解析(一小时入门 Python 3 网络爬虫)
- python实战之网络爬虫
- python网络爬虫实战3——抓取新闻内文相关信息
- Python爬虫入门实战系列(一)--爬取网络小说并存放至txt文件
- 【备忘】最新Python3网络爬虫实战案例高清视频教程
- Python3 大型网络爬虫实战 004 — scrapy 大型静态商城网站爬虫项目编写及数据写入数据库实战 — 实战:爬取淘宝
- python3网络爬虫一《使用urllib.request发送请求》
- Python实战:Python网络爬虫