Python爬虫之二:爬虫urllib库的使用(1)

一、urllib库

urllib是Python自带的标准库,无需安装,可以直接使用。它可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据。如果想系统性的学习urllib库,可以直接看它的官方文档(https://docs.python.org/3/library/urllib.html)。

1、urllib.request 请求模块

在Python3的urllib库中,所有的网络请求相关的方法,都被采集到urllib.request模块中。

urlopen()函数的使用:

创建一个表示远程url的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据。

from urllib import request

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

解释:

urlopen(url, data)

1、参数:url(请求的url,即字符串网址),data(如果设置了这个值,那么将变成post请求)。
2、返回值:返回一个http.client.HTTPResponse对象,这个对象是一个类文件句柄对象,有read(size)、readline、readlines及getcode等方法。

urlurlretrieve()函数的使用

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

from urllib import request

request.urlretrieve('https://www.baidu.com/', r'F:\开发工具\python\project\爬虫\爬虫基本库的使用\baidu.html')

解释:

urlretrieve(url, file)

1、参数:url(请求的url,即字符串网址),file(获取文件的保存路径)。

request.Request 类的使用

如果想要在请求的时候添加一个请求头,就必须要使用此类,例如在不添加User-Agent的时候无法爬取百度的HTML文件,如果添加上User-Agent,那么就可以轻而易举的爬取到百度首页的HTML文件:

from urllib import request

url = 'https://www.baidu.com/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}

rq = request.Request(url, headers=headers)
resp = request.urlopen(rq)
print(resp.read())

2、urllib.parse 解析模块

urlencode()和parse_qs()函数的使用

urlencode()是将字典数据转换为URL编码数据,parse_qs()是将经过编码后的URL数据解码。

from urllib import parse

dic = {'name':'晴朗', 'age':18, 'sex':'mail'}
qs = parse.urlencode(dic)
print(qs)  #name=%E6%99%B4%E6%9C%97&age=18&sex=mail
print(parse.parse_qs(qs))  #{'name': ['晴朗'], 'age': ['18'], 'sex': ['mail']}
urlsplit()和urlparse()函数的使用

两者的作用都是对url进行解析,唯一不一样的地方是urlparse里面有params属性,而urlsplit里面没有这个属性。

from urllib import parse

url = 'https://www.baidu.com/index.html;user?id=S#comment'
res1 = parse.urlsplit(url)
res2 = parse.urlparse(url)
print(res1)
# SplitResult(scheme='https', netloc='www.baidu.com', path='/index.html;user', query='id=S', fragment='comment')
print(res2)
# ParseResult(scheme='https', netloc='www.baidu.com', path='/index.html', params='user', query='id=S', fragment='comment')

二、爬取猫眼票房

1、查找url和请求头数据

URL数据:
在这里插入图片描述
请求头数据:
在这里插入图片描述

2、编写代码

from urllib import request

url = 'http://piaofang.maoyan.com/dashboard-ajax?orderType=0&uuid=176f1e319d5c8-036c002cd3facb-c791039-144000-176f1e319d5c8&riskLevel=71&optimusCode=10&_token=eJxtkltv00AQhf%2FLPvRpcPZ%2BsWShSBFtTKOqJi0gVKH1JY6Vi4vtkALivzNeh%2FLCvszns2dHZ3f8i3TLksQUyPeqIzFhEY00ATL0JGaaUWGUs84JDaT4p2ljDFcKSN49Lkj8hSk0GM6fRiVDYVKslk9wQY7IJYyF5Eu0kO0wPMez2XPj240%2F1tHBtz%2F8MSraw6z0%2FTZvfVdiktHWo%2B98Pke5b8pTcOyb4%2B7tqdsnH7PP%2FdfmTba6WfTb24ebLP25pn23ShWr07v3d0q8nHK1SPNPxbvb%2FYdi4Pe7Jqt9fv24o23lrs5lclV9a8qkrKRzvtQUV%2BXNhk6Lq82m0EIIgskP6zG5tgyUpRhOW%2FpKrxpeU0j7H3KBLAjFRhIcKWhCgdBqJElBGBEINctHUuhzoYuyIFkgzUHKsKtRM%2BPIcCigWCCrQKnQz3FMNZEENXVxDnToYqgEHVIZakGHLIZR0CHLRDrsugtpqnDO4ZZUgJmyUIo0nsD%2BSDKQDoRPthufDKu%2F1OHv9wp%2FN7T2TX1EqtKX9UO9nM%2Bv63l2nyTk9x%2BEsqF0'

headers = {
'User-Agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
rq = request.Request(url, headers=headers)
resp = request.urlopen(rq)
print(resp.read().decode('utf-8'))

三、爬取别逗了笑话网多个网页

1、查找动态的url

在这里插入图片描述
分析:原始网页的url是http://www.biedoul.com/,点击14380页的url变成了:http://www.biedoul.com/index/14380/,所以规律显而易见,我们利用字符串拼接的方式可以实现动态的URL。

2、编写代码

from urllib import request

start_url = 'http://www.biedoul.com/index/'
path1 = r'F:\开发工具\python\project\爬虫\爬虫基本库的使用\前五页'
path2 = r'F:\开发工具\python\project\爬虫\爬虫基本库的使用\后五页'
page1 = 14380
page2 = 14382
# 获取前五页
for i in range(5):
    url = start_url + str(page1) +'/'
    path = path1 + '\\' + str(page1) + '.html'
    request.urlretrieve(url, path)
    page1 -= 1
# 获取后五页
for i in range(5):
    url = start_url + str(page2) +'/'
    path = path2 + '\\' + str(page2) + '.html'
    request.urlretrieve(url, path)
    page2 += 1

结果展示:
在这里插入图片描述

  • 13
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值