Python爬虫之Urllib库(二):浏览器伪装(header)、维持登录状态(cookie)、代理服务器设置、超时设置

import urllib.request
import urllib.parse

一、HTTP协议

1.HTTP是一个面向应用层的通讯协议,它使用URL定位资源、建立链接和传输数据。

2.当爬取指定URL页面时,主机会向服务器发送HTTP请求消息,消息的格式包含:

  • 请求行
  • 请求头部
  • 空行
  • 请求数据
    image.png

3.请求行

用来说明请求类型,要访问的资源和所使用的HTTP版本

4.请求头部(Headers)

包括服务器要使用的附件信息

二、常见Headers字段的含义

1.Accept:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

1.1 Accept字段主要用来表示浏览器能够支持的内容类型有哪些

1.2 text/html表示HTML文档

1.3 application/xhtml+xml表示XHTML文档

1.4 application/xml表示XML文档

1.5 q代表权重系数,值介于0和1之间

2.Accept-Encoding:gzip,deflate

2.1 Accept-Encoding字段主要用来表示浏览器支持的压缩编码有哪些

2.2 gzip是压缩编码的一种

2.3 deflate是一种无损数据压缩算法

3.Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

3.1 Accept-Language主要用来表示浏览器所支持的语言类型

3.2 zh-CN表示简体中文语言,zh表示中文,CN表示简体

3.3 en-US表示英语(美国)语言

3.4 en表示英语语言

4.User-Agent:Mozilla/5.0(Wiindows NT 6.1;WOW64;rv:47.0) Gecko/20100101 Firefox/47.0

4.1 User-Agent字段主要表示用户代理;服务器可以通过该字段识别出客户端的浏览器类型、浏览器版本号、客户端的操作系统及版本号,网页排版引擎等客户端信息

4.2 Mozilla/5.0表示浏览器名及版本信息

4.3 Windows NT 6.1;WOW64;rv:47.0表示客户端操作系统对应信息

4.4 Gecko表示网页排版引擎对应信息

4.5 firefox表示火狐浏览器

5.Connection:keep-alive

5.1 Connection表示客户端与服务器的连接类型,对应的字段值主要有两种:keep-alive表示持久性连接;close表示单方面关闭连接,让连接断开

6.Host:www.youku.com

6.1 Host字段表示请求的服务器网址是多少

7.Referer:网址

7.1 Referer字段主要表示来源网址地址

三、浏览器伪装

  • 爬取一些网页时,会出现403错误,这表示这些网页防止别人恶意采集其信息所以进行了一些反爬虫设置
  • 可以设置一些Headers信息,模拟成浏览器去访问这些网站,此时就能解决这个问题*

1.使用build_opener

headers = ("User-Agent","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36")
opener = urllib.request.build_opener()
opener.addheaders=[headers]
with opener.open("http://www.baidu.com") as file:
    data = file.read()

2.使用add_opener

req = urllib.request.Request("http://www.baidu.com")
req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36")
with urllib.request.urlopen(req) as file:
    data = file.read()

四、维持登录状态cookie

1.cookie介绍

  • HTTP是一个无状态协议,但是在访问网页时,有时我们需要保存会话信息,比如登录信息
  • 有两种比较常用的保存会话信息的方式:Cookie及Session
  • 使用Cookie会将所有会话信息保存在客户端
  • 使用Session会将会话信息保存在服务器端,但是服务器端会给客户端发SessionID等信息,这些信息一般存在客户端的Cookie中
  • 有了Cookie,当我们登录成功后,爬取该网站的其他网页时,则会保存登录状态进行内容的爬取

2.使用cookie进行登录

import http.cookiejar
url = "https://blog.csdn.net/bqw18744018044/article/details/79875181"
postdata = urllib.parse.urlencode({
    "username":"123456",
    "password":"123456"
}).encode("utf-8")
req = urllib.request.Request(url,postdata)
req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36")
cjar = http.cookiejar.CookieJar() #场景cookieJar对象
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))#使用HTTPCookieProcessor创建Cookie处理器,并以其为参数构建opener对象
urllib.request.install_opener(opener)#将opener安装为全局
with opener.open(req) as file:
    data = file.read()

五、代理服务器设置

proxy = urllib.request.ProxyHandler({'http':'211.167.248.228:8080'})# 代理服务器的地址
opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
with urllib.request.urlopen(url) as file:
    data = file.read()

六、超时设置

# 设置超时时间为1s
file = urllib.request.urlopen("https://blog.csdn.net/bqw18744018044/article/details/79875181",timeout=1)

你可能感兴趣的:(Python爬虫)