Python的urllib库可以做什么,怎样使用�
Admin 2022-01-11 群英技术资� 215 次浏�
Python的urllib库可以做什么?对于python爬虫应用urllib库起着重要作用,有一些朋友对于urllib库使用不是很了解,对此这篇就给大家来介绍一下urllib库的使用,文中的介绍很详细,感兴趣的朋友就跟随小编一起来学习一下吧�
urllib库用于操作网� URL,并对网页的内容进行抓取处理
urllib� 包含以下几个模块�
urllib.request
- 打开和读� URL�
urllib.error
- 包含 urllib.request 抛出的异常�
urllib.parse
- 解析 URL�
urllib.robotparser
- 解析 robots.txt 文件
python爬虫主要用到的urllib库中的request和parse模块
下面我们来详细说明一下这两个常用模块的基本运�
urllib.request 定义了一些打开 URL 的函数和类,包含授权验证、重定向、浏览器 cookies等�
语法如下�
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None,
capath=None, cadefault=False, context=None)
url
:url 地址�
data
:发送到服务器的其他数据对象,默认为 None�
timeout
:设置访问超时时间�
cafile
� capath
:cafile � CA 证书� capath � CA 证书的路径,使用 HTTPS 需要用到�
cadefault
:已经被弃用�
context
:ssl.SSLContext类型,用来指� SSL 设置�
# -*- codeing = utf-8 -*- # @Author: Y-peak # @Time : 2021/9/2 19:24 # @FileName : testUrllib.py # Software : PyCharm import urllib.request #get请求 response = urllib.request.urlopen("http://www.baidu.com") #返回的是存储网页数据的对� #print(response) 可以尝试打印一下看一� print(response.read().decode('utf-8')) #通过read将数据读取出�, 使用utf-8解码防止有的地方出现乱码
将其打印的内容写到一个html文件中,打开和百度一毛一�
# -*- codeing = utf-8 -*- # @Author: Y-peak # @Time : 2021/9/2 19:24 # @FileName : testUrllib.py # Software : PyCharm import urllib.request response = urllib.request.urlopen("http://www.baidu.com") #返回的是存储网页数据的对� data = response.read().decode('utf-8') #通过read将数据读取出�, 使用utf-8解码防止有的地方出现乱码 #print(data) with open("index.html",'w',encoding='utf-8') as wfile: #或者你们也可以常规打开,不过需要最后关闭记得close() wfile.write(data) print("读取结束")
有时我们爬虫需要模拟浏览器进行用户登录等操作,这个时候我们就需要进行post请求
但是post必须有一个获取请求之后的响应,也就是我们需要有一个服务器。给大家介绍一个免费的服务器网址,就是用来测试用的http://httpbin.org/。主要用来测试http和https�
我们可以尝试执行一下,去获取对应的响应�
可以用Linux命令去发起请求,URL地址为http://httpbin.org/post。得到下方的响应�
我们也可以通过爬虫来实�
# -*- codeing = utf-8 -*- # @Author: Y-peak # @Time : 2021/9/2 19:24 # @FileName : testUrllib.py # Software : PyCharm import urllib.request import urllib.parse #解析� data = bytes(urllib.parse.urlencode({"hello":"world"}),encoding='utf-8')
#转换为二进制数据包,里面是键值对(有时输入的用户名:密码就是这样的)
#还有一些编码解码的数值等.这里就是按照utf-8的格式进行解析封装生成二进制数据� response = urllib.request.urlopen("http://httpbin.org/post",data=data) #返回的请� print(response.read().decode('utf-8')) #通过read将数据读取出�, 使用utf-8解码防止有的地方出现乱码
两个响应结果对比是不是一样几�
相当于进行了一次模拟的post请求。这样有些需要登录的网站也是可以爬取的�
一般进行爬虫时,不可能一直等待响应。有时网络不好或者网页有反爬或者一些其他东西时。无法快速爬出。我们就可以进入下一个网页继续去爬。利用timeout属性就�
# -*- codeing = utf-8 -*- # @Author: Y-peak # @Time : 2021/9/2 19:24 # @FileName : testUrllib.py # Software : PyCharm import urllib.request try: response = urllib.request.urlopen("http://httpbin.org/get",timeout=0.01)
#返回的是存储网页数据的对�, 直接用这个网址的get请求�.timeout表示超时,超�0.01秒不响应就报错,避免持续等待 print(response.read().decode('utf-8'))
#通过read将数据读取出�, 使用utf-8解码防止有的地方出现乱码 except urllib.error.URLError as e: print("超时了\t\t错误为:",e)
status:
首先打开任何一个网页按F12找到Response Headers,拉到最下面找到 User-Agent。将其复制保存下来,为反爬做准备�
下面我们进行尝试,直接爬取豆瓣,直接来个418,知道你是爬虫,我们来伪装一�
为什�418呢,因为如果是直接进行请求访问的话,发过去的User-Agent 是下面的,直接告诉浏览器我们是爬虫。我们需要伪�
# -*- codeing = utf-8 -*- # @Author: Y-peak # @Time : 2021/9/2 19:24 # @FileName : testUrllib.py # Software : PyCharm import urllib.request headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159
Safari/537.36" } request = urllib.request.Request("http://douban.com", headers=headers) #返回的是请求,将我们伪装成浏览器发送的请求 response = urllib.request.urlopen(request) #返回的是存储网页数据的对� data = response.read().decode('utf-8') #通过read将数据读取出�, 使用utf-8解码防止有的地方出现乱码 with open("index.html",'w',encoding='utf-8') as wfile: #或者你们也可以常规打开,不过需要最后关闭记得close() wfile.write(data)
当然反爬不可能如此简单,上面将讲的那� post请求,也是十分常见的突破反爬的方式,不行就将整个Response Headers全部模仿。下面还有个例子作为参考。和上面的post访问的网址一�
浏览器访问结�
爬虫访问结果
# -*- codeing = utf-8 -*- # @Author: Y-peak # @Time : 2021/9/3 0:47 # @FileName : testUrllib.py # Software : PyCharm import urllib.request import urllib.parse headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/92.0.4515.159 Safari/537.36" } url = "http://httpbin.org/post" data = (bytes)(urllib.parse.urlencode({"账户":"密码"}),encoding = 'utf-8') request = urllib.request.Request(url, data = data,headers=headers, method='POST') #返回的是请求 response = urllib.request.urlopen(request) #返回的是存储网页数据的对� data = response.read().decode('utf-8') #通过read将数据读取出�, 使用utf-8解码防止有的地方出现乱码 print(data)
关于Python中urllib库的作用和使用就介绍到这,上述代码有一定的参考价值,大家可以了解看看,想要了解更多urllib库的使用和python爬虫的内容,大家可以关注群英其它的相关文章�
文本转载自脚本之�
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:[email protected]进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容�
猜你喜欢
本篇文章给大家带来了关于Python的相关知识,其中主要介绍了python类对象的析构释放代码演示,文章围绕主题展开详细的内容介绍,下面一起来看一下,希望对大家有帮助�
这篇文章主要是为大家简单介绍一下图像添加油画特效的基本原理以及代码实现,文中的示例代码很详细,对我们学习或者工作有一点的价值,感兴趣的小伙伴可以了解一�
为什么将数据转移至GPU的方法叫�.cuda而不�.gpu,就像将数据转移至CPU调用的方法是.cpu?这是因为GPU的编程接口采用CUDA,而目前并不是所有的GPU都支持CUDA,只有部分Nvidia的GPU才支持�
PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。它具有强大的GPU加速的张量计算和自动求导系统的深度神经网络。本文将介绍如何通过PyTorch实现病虫害图像分类,感兴趣的可以学习一�
这篇文章主要介绍了基于Python中的Pygame模块实现的炸弹人小游戏,文中的示例代码讲解详细,对学习Python有一定的帮助,感兴趣的小伙伴可以学习一�
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所�
增值电信经营许可证 : B1.B2-20140078