python爬虫之urllib库学习

urllib库

urllib库是Python中一个最基本的网络请求库。可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返

回的数据。urllib库是python内置的一个http请求库,不需要额外的安装。只需要关注请求的链接,参数,提供了强大的解析。

urllib库提供了如下功能:

  • 网页请求
  • 响应获取
  • 代理和cookie设置
  • 异常处理
  • URL解析

爬虫所需要的功能,基本上在urllib中都能找到,学习这个标准库,可以更加深入的理解后面更加便利的requests库。

urllib库有一下三个模块:

  • urllb.request 请求模块
  • urllib.error 异常处理模块
  • urllib.parse 解析模块

urllib库中的urlopen函数:

Python3urllib库中,所有和网络请求相关的方法,都被集到urllib.request模块下面了,首先来讲一下urlopen函数:

实际上,使用浏览器访问百度,右键查看源代码。你会发现,跟我们刚才打印出来的数据是一模一样的。也就是说,上面的三行代码就已经帮我们把百度的首页的全部代码爬下来了。一个基本的url请求对应的python代码真的非常简单。 以下对urlopen函数的进行详细讲解:

1.url:请求的url。

2.data:请求的data,如果设置了这个值,那么将变成post请求。

3.返回值:返回值是一个http.client.HTTPResponse对象,这个对象是一个类文件句柄对象。有read(size)readlinereadlines以及getcode等方法。

     read()方法:读取整个页面的全部代码。

     readline()方法:读取某一行的代码,默认是第一行的代码。

     readlines()方法:按行来读取整个页面的代码存放在数组中。

     getcode()方法:读取整个页面的状态码。

(1)简单的get请求

from urllib.request import urlopen
 
# if has Chinese, apply decode()
html = urlopen(
    "http://www.baidu.com/"
).readline().decode('utf-8')
print(html)

(2)简单的post请求

import urllib.parse
import urllib.request
data = bytes(urllib.parse.urlencode({'hello':'world'}),encoding='utf-8')
reponse = urllib.request.urlopen('http://httpbin.org/post',data=data)
print(reponse.read())
(3)超时处理
import urllib.parse
import urllib.request
data = bytes(urllib.parse.urlencode({'hello':'world'}),encoding='utf-8')
reponse = urllib.request.urlopen('http://httpbin.org/post',data=data)
print(reponse.read())

 参考链接:https://blog.csdn.net/qq_27524749/article/details/105119634 网易爬虫工程师

urlretrieve函数:

urlretrieve() 方法直接将远程数据下载到本地。

这个函数可以方便的将网页上的一个文件保存到本地。文件类型可以是网页的html文件、图片、视频等媒体文件。

函数原型:urlretrieve(url, filename=None, reporthook=None, data=None)

  • 参数 url 指定了要下载的文件的url
  • 参数 finename 指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)
  • 参数 reporthook 是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
  • 参数 data 指 post 到服务器的数据,该方法返回一个包含两个元素的(filename, headers)元组,filename 表示保存到本地的路径,header 表示服务器的响应头。
from urllib import request
 
request.urlretrieve("https://blog.csdn.net/sereasuesue/category_10790248.html",'csdn.html')
 
#前面参数是url,后面是保存的路径以及文件名

下载图片见https://blog.csdn.net/sereasuesue/article/details/113730274

编码urlencode或者quote

urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%。

在url中如果出现一些中文或者字符,url不识别的,则需要进行转换,使用urllib库中的urlencode函数,可以把key-value这样的

键值对转换成我们想要的格式,返回的是a=1&b=2这样的字符串,比如:

from urllib import request
from urllib import parse
 
params={'name':'Demo',"age":18}
qs=parse.urlencode(params)
print(qs)


#name=Demo&age=18

解码unquote()或者parse_qs函数

unquote()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其原理就是把十六进制字符串转换为中文字符

当urlencode之后的字符串传递过来之后,接受完毕就要解码了——urldecode。urllib提供了unquote()这个函数,可没有urldecode()函数!

n='%E8%BF%AA%E4%B8%BD%E7%83%AD%E5%B7%B4'
print(parse.unquote(n))
#迪丽热巴

parse_qs函数:

可以将经过编码后的url参数进行解码。示例代码如下:

from urllib import parse
qs = "name=%E7%88%AC%E8%99%AB%E5%9F%BA%E7%A1%80&greet=hello+world&age=100"
print(parse.parse_qs(qs))

#{'name': ['爬虫基础'], 'greet': ['hello world'], 'age': ['100']}

URL解析函数urlparse

url='https://baike.baidu.com/item/%E8%BF%AA%E4%B8%BD%E7%83%AD%E5%B7%B4/1180418?fr=aladdin#3'
result = parse.urlparse(url)
print(result)
print('scheme:',result.scheme)  #网络协议
print('netloc:',result.netloc)  #域名
print('path:',result.path)      #文件存放路径
print('query:',result.query)    #查询字符
print('fragment:',result.fragment)  #拆分文档中的特殊猫

分割函数urlsplit

urlparseurlsplit基本上是一模一样的。唯一不一样的地方是,urlparse里面多了一个params属性,而urlsplit没有这个params属性。比如有一个url为:url = 'https://www.baidu.com/s;index.php?tn=78040160_14_pg&ch=16#1', 那么urlparse可以获取到index.php,而urlsplit不可以获取到。url中的params也用得比较少。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python爬虫教程urllib主要是介绍了Python爬虫技术中的urllib的基础用法。该教程详细讲解了urllib的各种功能和方法,包括发送请求、处理响应、设置请求头、处理异常等。这个教程对于想要学习和使用Python进行网络爬虫的人来说具有很大的参考价值。 同时,该教程也提到了一些常见的问题和解决方法,例如模拟超时的处理方法。在网络爬虫中,有时候我们长时间无法访问一个页面,可能是因为网速有限或者被发现我们是一个爬虫。针对这种情况,可以使用timeout参数来设置超时时间,如果超过了设定的时间仍无法获取响应,则会抛出URLError异常,我们可以在异常处理中对超时进行相应的处理。 总的来说,Python爬虫教程urllib是一个很好的学习资源,适合想要入门或深入学习Python爬虫技术的人使用。它提供了详细的教程和实例,可以让你快速上手和掌握使用urllib进行网络爬虫的基本知识和技巧。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python爬虫urllib基础用法教程](https://download.csdn.net/download/weixin_38656741/12858843)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Python爬虫 —— urllib的使用(get/post请求+模拟超时/浏览器)](https://blog.csdn.net/qq_50587771/article/details/123840479)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [python爬虫urllib3的使用示例](https://download.csdn.net/download/weixin_38681147/12867742)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值