爬虫基础(2)

Proxyhandler 处理器(代理)

 

使用方法:

  1. urllib.request.Proxyhandle 传入一个代理,这个代理是一个字典,字典的关键字key依赖于代理能够接受的类型(http\https),值是一个套接字。
  2. 使用创建的 hander 以及 ruquest.build_opener() 创建一个opener。
  3. 使用opener调用open函数,发起请求

示例代码如下:

from urllib import request
url = “www.baidu.com”
# 创建一个 handler 
handler = request.Proxyhandler(["http":"233.241.25.25:3375"])
# 使用handler 创建一个opener
opener = request.build_opener(handler)
# 使用opener打开open方法
resp = opener.open(url)

print(resp.read())

 

http.cookiejar库之CookieJar

CookieJar和HTTPCookieProcessor

我们在使用爬虫的时候,经常会用到cookie进行模拟登陆和访问。在使用urllib库做爬虫,我们需要借助http.cookiejar库中的CookieJar来实现。

CookieJar类有一些子类,分别是FileCookieJar,MozillaCookieJar,LWPCookieJar。

  • CookieJar:管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失。

  • FileCookieJar (filename,delayload=None,policy=None):从CookieJar派生而来,用来创建FileCookieJar实例,检索cookie信息并将cookie存储到文件中。filename是存储cookie的文件名。delayload为True时支持延迟访问访问文件,即只有在需要时才读取文件或在文件中存储数据。

  • MozillaCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与Mozilla浏览器 cookies.txt兼容的FileCookieJar实例。

  • LWPCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与libwww-perl标准的 Set-Cookie3 文件格式兼容的FileCookieJar实例。

其实大多数情况下,我们只用CookieJar(),如果需要和本地文件交互,就用 MozillaCookjar() 或 LWPCookieJar()

示例代码如下:

form urllib import request
form http.cookieJar import cookieJar
form urllib import parse

# 1.登录
# 1.1 创建cookieJar对象
cookieJar = cookieJar()
# 1.2使用cookieJar创建一个 HTTPCookierProcessor(cookieJar)
handler = request.HTTpCookieProcessor(cookieJar)
# 1.3适用handler创建一个opener
opener = request.builid_opener(handler)

handers = {XXXXX}
data = {"user":"xxx""password":"xxx"
            }    

login_url = "http:\\XXXXX"
reqs = request.Request(login_url,data=patse.urlencode(data).encode("utf-8"),handers=handers)

request.urlopen(resq)

# 访问个人主页
gr_url = "http:\\xxxxxxxx"

request.open(gr_url)

 

response.text和 response.content

1、重点理解

response.text返回的类型是str

response.content返回的类型是bytes,可以通过decode()方法将bytes类型转为str类型

推荐使用:response.content.decode()的方式获取相应的html页面

2、扩展理解

    • response.text 
      解码类型:根据HTTP头部对响应的编码做出有根据的推测,推测的文本编码 
      如何修改编码方式:response.encoding = 'gbk'
    • response.content 
      解码类型:没有指定 
      如何修改编码方式:response.content.decode('utf8')

 

posted @ 2019-08-12 21:29  五木徒羚  阅读(166)  评论(0编辑  收藏  举报