python爬虫学习笔记(3)

urllib.request 使用:

一般用于发送请求和接收响应

  • urlopen 方法
#url为必填参数,后两个可不填
urllib.request.urlopen(url,data,timeout)

urlopen方法返回一个HTTPResponse对象

  • request对象
    实际上,我们可以给urllib.request.urlopen()传入一个request对象
    为什么需要request对象传入参数?! 此方法与上文显示的有什么区别?

urllib.request.urlopen()此方法无法指定请求头部,而有时必须指定请求头部以避免被浏览器识别为爬虫。

request对象如下:
url:指定目标网站的URL
data:发送POST数据时提交的榜单,默认为None
headers:发送请求时附加的头部,默认为{}
origin_req_host:请求方的host名称或者IP地址,默认为None
unverfiable:请求方的请求无法验证,默认为False
method:指定请求方法,默认为None

#初始化一个request对象
url='http://www.baidu.com'
#指定头部信息,可以通过chorme自带的进行查看
headers = {
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36'
}
req=urllib.request.Request(url=url,headers=headers,method='GET')

获取Cookie

import urllib,request
#为了有效地管理session,采取的包
import http.cookiejar


#创建名为 cookie的 http.cookiejar.CookieJar 对象
cookie=http.cookiejar.CookieJar()

#以 CookieJar对象为参数,创建 urllib.request.HTTPCookieProcessor对象,
#该对象负责调用 CookieJar 来管理 cookie。
cookie_hander=urllib.request.HTTPCookieProcessor(cookie)

#调用 urllib.request.build_opener()函数创建 OpenerDirector对象。
opener=urllib.request.build_opener(cookie_hander)

#使用 OpenerDirector 对象来发送请求
response=opener.open('www.baidu.con')
for item in cookie
	print(item.name + '=' + item.value)
  • http.cookiejar 这个包
    urlopen可以发送GET,POST请求,大多数情况下urlopen就可以完成任务。但使用urllib.request访问被保护的界面时,需要维护浏览器与服务器之间的session,需要借助cookie管理器来完成。

HTTP 是一种“请求-响应”式协议:客户端向服务器发送请求,服务器向客户揣生成响应数据。这就涉及一个问题,服务器如何辨别两次请求的客户端是同一个客户端呢?答案是 session id。当客户端第一次向服务器发送请求时,服务器会为该客户端分配一个 session id 作为其标识,服务器在生成响应数据时,也会把该 session id 作为响应数据发送给客户端。当客户端第二次向服务器发送请求时,如果客户端把自己的 session id 也发送给服务器,且服务器端的 session id 还未过期,服务器就知道该客户端与前一次发送请求的客户端是同一个。

如果直接urlopen发送未管理session,那么服务器无法识别是否为一个客户端发出的。为有效管理Cookie,引入http.cookiejar包

此外,程序还需要使用 OpenerDirector 对象来发送请求。为了使用 urllib.request 模块通过 cookie 来管理 session,可按如下步骤进行操作:

  1. 创建 http.cookiejar.CookieJar 对象或其子类的对象。
  2. 以 CookieJar 对象为参数,创建 urllib.request.HTTPCookieProcessor 对象,该对象负责调用 CookieJar 来管理 cookie。
  3. 以 HTTPCookieProcessor 对象为参数,调用 urllib.request.build_opener() 函数创建 OpenerDirector 对象。
  4. 使用 OpenerDirector 对象来发送请求,该对象将会通过 HTTPCookieProcessor 调用 CookieJar 来管理 cookie
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值