python2.X和python3.X中的urllib、urllib2,以及Request

1、urllib和urllib2库在python2中的使用

Urllib和Urllib2是python2中提供的一个用于操作url的模块,但是提供了不同的功能。

在python2中,有urllib库和urllib2库。在python3中,urllib2被合并到urllib库中,在我们爬取网页的时候,经常用到这个库。

1.1 urllib2可以接受一个Request类的实例来设置URL请求的headers

代码如下:

req = urllib2.Request(url = url,data = postdata,headers = headers)
result = urllib2.urlopen(req)

1.2 urillb仅可以接受url,这意味着,不可以伪装自己的User Agent字符串等。

但是urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。这就是为何urllib常和urllib2一起使用的原因,如下:

postdata = urllib.urlencode(postdata)
(把字典形式的postdata编码一下)

2、urllib库在python3中的使用

2.1 urillb2在python3中的变化。

  • 在Pytho2.x中使用import urllib2——-对应的,在Python3.x中会使用import urllib.request,urllib.error。
  • 在Pytho2.x中使用import urllib——-对应的,在Python3.x中会使用import urllib.request,urllib.error,urllib.parse
  • 在Pytho2.x中使用import urlparse——-对应的,在Python3.x中会使用import urllib.parse。
  • 在Pytho2.x中使用import urlopen——-对应的,在Python3.x中会使用import urllib.request.urlopen。
  • 在Pytho2.x中使用import urlencode——-对应的,在Python3.x中会使用import urllib.parse.urlencode。
  • 在Pytho2.x中使用import urllib.quote——-对应的,在Python3.x中会使用import urllib.request.quote。
  • 在Pytho2.x中使用cookielib.CookieJar——-对应的,在Python3.x中会使用http.CookieJar。
  • 在Pytho2.x中使用urllib2.Request——-对应的,在Python3.x中会使用urllib.request.Request。

2.2 urillb在python3中的使用。

2.2.1 快速抓取一个网页
import urllib.request
 
file=urllib.request.urlopen('http://www.baidu.com')
 
data=file.read()    #读取全部
 
dataline=file.readline()    #读取一行内容
 
fhandle=open("./1.html","wb")    #将爬取的网页保存在本地
fhandle.write(data)
fhandle.close()
2.2.2 浏览器的模拟

应用场景: 一部分网页为了防止别人恶意采集其信息所以进行了一些反爬虫的设置。

解决办法:设置一些Headers信息(User-Agent),模拟成浏览器去访问这些网站。

import urllib.request
import urllib.parse
 
url = 'http://www.baidu.com'
header = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36'
}
 
request = urllib.request.Request(url, headers=header)
reponse = urllib.request.urlopen(request).read()
 
fhandle = open("./baidu.html", "wb")
fhandle.write(reponse)
fhandle.close()

2.2.2 代理服务器的设置
应用场景:使用同一个IP去爬取同一个网站上的网页,久了之后会被该网站服务器屏蔽。

解决办法:使用代理服务器。 (使用代理服务器去爬取某个网站的内容的时候,在对方的网站上,显示的不是我们真实的IP地址,而是代理服务器的IP地址)。

def use_proxy(proxy_addr,url):
    import urllib.request
    proxy=urllib.request.ProxyHandler({'http':proxy_addr})
    opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
    urllib.request.install_opener(opener)
    data=urllib.request.urlopen(url).read().decode('utf8')
    return data
 
proxy_addr='61.163.39.70:9999'
data=use_proxy(proxy_addr,'http://www.baidu.com')
print(len(data))
2.2.3 Cookie的使用

应用场景:HTTPS是无连接的状态协议,但是客户端和服务器端需要保持一些互相信息,比如cookie,有了cookie,服务器才知道刚才是这个用户登录了网站,才会给予客户端访问一些页面的权限。所以我们需要保存cookie,之后附带cookie再来访问网站,才能达到效果。这里就需要Python的cookie和urllib2等的配合,将cookielib绑定到urllib2在一起,就能够在请求网页的时候附带cookie。在构造req请求之前可以获取一个保存cookies的对象,并把该对象和http处理器、http的handler资源以及urllib3的对象绑定在一起。`

cj = cookielib.LWPCookieJar()  
cookie_support = urllib2.HTTPCookieProcessor(cj)  
# 创建一个opener,将保存了cookie的http处理器,还有设置一个handler用于处理http的URL的打开  
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)  
# 将包含了cookie、http处理器、http的handler的资源和urllib2对象板顶在一起  
urllib2.install_opener(opener)  

转载自:https://blog.csdn.net/weixin_38706928/article/details/80362823

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值