Python爬虫入门 ——请求模块 Urllib【2】

复杂的网络请求

Request类简介

上一节的urlopen方法能够发送一个基本的网络请求,但这并不是一个完整的网络请求。一个完整的网络请求,需要包括Headers, Cookies和代理IP等内容,这样才能更好的模拟一个浏览器所发送的网络请求。 Request类则可以为我们解决这个问题

其语法的基本格式如下

urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

# ***************************
# 参数说明:
# url     : 需要访问网站的URL的完整地址
# data    : 该参数默认为None,通过该参数确认请求方式;
#           若为None,则以GET
#           否则的话为POST,在发送POST请求时,参数data需要以字典形式的数据作为参数的值
#           并且需要将字典形式的参数值转化为字节类型的数据才可以实现POST请求
# headers : 设置请求头部信息, 该参数为字典型。添加请求头最常用的方法就是修改 User-Agent 来伪装    #           成浏览器。例如:
#           headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)/                         
#           AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'}
#           伪装成谷歌浏览器进行网络请求
# origin_req_host : 用于是设置请求方的host名称或者IP
# unverifiable : 用于验证网页是否需要验证,默认为False
# method  : 用于设置请求方法 

设置请求头信息

import urllib.parse
import urllib.request

url = 'https://www.httpbin.org/post'
# 定义请求头部信息
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \
            (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'}
# 将表单数据转化bytes类型,并编码方式为UTF-8
dict1 = {'hello': 'python'}
data = bytes(urllib.parse.urlencode(dict1), encoding='utf-8')
# 创建 Request 对象
r = urllib.request.Request(url=url, data=data, headers=headers, method='POST')
response = urllib.request.urlopen(r)
print(response.read().decode('utf-8'))

运行结果如下

{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "hello": "python"
  }, 
  "headers": {
    "Accept-Encoding": "identity", 
    "Content-Length": "12", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "www.httpbin.org", 
# 自定义的请求头信息
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36             (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36", 
    "X-Amzn-Trace-Id": "Root=1-616c0fa1-36cc80405a3d11116f912a4a"
  }, 
  "json": null, 
  "origin": "61.190.213.226", 
  "url": "https://www.httpbin.org/post"
}


进程已结束,退出代码为 0

Cookie 的获取与设置

在实现爬虫的模拟登录中,首选需要获取登录的请求地址,然后通过POST的请求方式将正确的用户名和密码发送至登录验证的后台地址

(1)在谷歌浏览器中打开地址(http://site2.rjkflm.com:666/), 然后单击网页中右上角的“登录”

(2) 按下F12 进入开发者模式勾选 Preserve log (持续记录)

 (3) 在登陆界面输入正确的用户名和密码,然后单击立即登入, 然后在开发者模式界面,请求列表中找到 “chklogin.html”文件

 (4) 向下找到登入验证所需要的表单数据

 (5)接下来使用POST请求方式实现模拟的登录

import urllib.request
import urllib.parse

url = 'http://site2.rjkflm.com:666/index/index/chklogin.html'
# 将表单数据转化为bytes
dict1 = {'username': '********', 'password': '*******'}
data = bytes(urllib.parse.urlencode(dict1), encoding='utf-8')
# 创建Request对象
r = urllib.request.Request(url=url, data=data, method='POST')
response = urllib.request.urlopen(r)
print(response.read().decode('utf-8'))

运行结果如下

{"status":true,"msg":"登录成功!"}

进程已结束,退出代码为 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘的企鹅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值