【Python网络爬虫】150讲轻松搞定Python网络爬虫付费课程笔记 篇二——爬虫基本库的使用1(urllib)

1. urllib 库 -- 内置

1.1 urlopen函数

from urllib import request

resp = request.urlopen('https://www.baidu.com')

print(resp.read(10))
print(resp.readlines())
print(resp.getcode())

1.2 urlretrieve 函数

将网页上的一个文件保存到本地

from urllib import request

# 通过链接下载文件
request.urlretrieve(url, 保存的文件名)

例如: 

from urllib import request

# 通过链接下载文件
request.urlretrieve('https://www.sogou.com/', 'sougou.html')

request.urlretrieve('https://pic.baike.soso.com/ugc/baikepic2/6108/20200529140813-1463090803_jpeg_239_300_8762.jpg/0', 'huge.jpg')

1.3 编码和解码函数

1.3.1 urlencode  函数 :编码

将字典数据转换成url编码数据

1.3.2 parse_qs函数 :解码

将经过编码后的url参数进行解码

from urllib import parse

data = {'name': '哈哈', 'age': 18}
# urlencode(dict) 参数是字典
ps = parse.urlencode(data)
print(ps)
print(parse.parse_qs(ps))

 1.4 url解析

urlparse 函数 和 urlsplit 函数

都是对url各个组成部分进行解析分割,得到url的各个部分

不同的是: urlparse 里有params属性,而urlsplit里面没有这个params属性

from urllib import parse

url = 'http://www.baidu.com/index.html;user?id=S#comment'

result = parse.urlparse(url)
print(result)
print(result.scheme)
print(result.netloc)
print(result.params)

print('-'*20)

result1 = parse.urlsplit(url)
print(result1)
print(result1.scheme)
print(result1.netloc)
# print(result1.params)会报错,说明urlsplit没有params这个属性

1.5 request.Request 

在请求时增加一些请求头 使用request.Request类来实现

from urllib import request

header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'
}

res = request.Request('https://www.baidu.com', headers=header)
# print(res)
resp = request.urlopen(res)
print(resp.read())

 

2. ProxyHandler处理器(代理设置):解决封IP问题

很多网站会检测某段时间某个IP访问次数(通过流量统计、系统日志等),如果访问过多,网站会禁止这个IP访问。

因此这个时候我们往往需要换个“小号”来继续获取我们所用的数据。这个“小号”就是我么说的,代理。

代理原理:

在请求目的网站之前,先请求代理服务器,然后让代理服务器去请求目的网站,代理服务器拿到目的网站的数据后再转发给我们代码。

http://httpbin.org/ 这个网站能够http请求一些参数。

常用的代理有:

西刺免费代理IP:https://mtop.chinaz.com/site_www.xici.net.co.html

快代理:https://www.kuaidaili.com/

代理云:http://www.dailiyun.com/

以代理云为例,使用代理:

从代理云种选择一个代理IP

from urllib import request

# 没有使用代理
url = 'http://httpbin.org/ip'
resp = request.urlopen(url)
print(resp.read())

#使用代理
url = 'http://httpbin.org/ip'
# 1.使用ProxyHandler创建一个代理handler
handler = request.ProxyHandler({'http': '140.143.6.16:1080'})
# 2.创建opener
opener = request.build_opener(handler)
# 3.使用opener发送一个请求
resp = opener.open(url)
print(resp.read())

上面为未使用代理的访问IP, 下面的为使用代理后的IP。

猜你喜欢

转载自blog.csdn.net/weixin_44566432/article/details/108542523