【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。

【为什么学爬虫?】        1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!        2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是:网络请求:模拟浏览器的行为从网上抓取数据。数据解析:将请求下来的数据进行过滤,提取我们想要的数据。数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据或者redis等。那么本课程也是按照这几个步骤循序渐进的进行解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是:爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求!【课程服务】 专属付费社群+定期答疑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值