请求模块urllib的基本使用,中高级Python面试中你不得不会的知识点
urllib的子模块简单了解web前端✅爬取baidu官网HTML源代码✅💘扩展知识💘urllib的子模块=======================================================================| 模块 | 描述 || — | — || urllib.request | 用于实现基本HTTP请求的模块 || urllib.error | 异
🥳请求模块urllib的基本使用🥳
-
urllib的子模块
-
- HttpResponse常用方法与属性获取信息
-
- urlli.parse的使用(一般用于处理带中文的url)
-
- 字典格式的处理方式
-
- 字符串格式的处理方式
-
简单了解web前端
-
✅爬取baidu官网HTML源代码✅
-
- 添加请求头信息(重构user_agent)
-
- 创建Request对象
-
💘扩展知识💘
-
- 1.使用with open 和 open保存图片
-
- 2.使用urillib.request.urlretrieve() 函数保存图片
=======================================================================
| 模块 | 描述 |
| — | — |
| urllib.request | 用于实现基本HTTP请求的模块 |
| urllib.error | 异常处理模块,如果在发送网络请求的过程时出现错误,可以捕获异常进行有效处理 |
| urllib.parse | 用于解析URL的模块 |
| urllib.robotparser | 用于解析robots.txt文件,判断网站是否可以爬取信息 |
通过urllib.request() 获取的对象类型是HttpReponse,有以下几种常用的方法,示例如下:
import urllib.request
定义一个url(你要爬取的网址)
url = ‘https://www.baidu.com’
添加请求头信息
headers = {
“user-agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36”
}
创建Request对象
res = urllib.request.Request(url=url, headers=headers)
模拟浏览器向服务器发送网络请求
response = urllib.request.urlopen(res)
read()函数可以获取响应,但返回的响应格式是二进制的,需要解码
解码:decode(‘编码格式’) 编码格式在Response Headers,Content_Type里面查看
print(‘baidu官网HTML代码如下:\n’, response.read().decode(‘utf-8’))
HTTPResponse这个类型
常见方法:read、readline、readlines、getcode、status、geturl、getheaders、getheader
print(type(response)) # response是HTTPResponse的类型
(1) 按照一个字节一个字节去读
content = response.read()
print(content)
读取具体的n个字节,在read()函数中传参即可
content2 = response.read(5)
print(content2)
(2) 按行读取,但是只能读取一行
content3 = response.readline()
print(content3)
(3) 按行读取,并且读取所有行
content4 = response.readlines()
print(content4)
(4) 返回状态码的方法:200状态码没有问题,其他的状态码可能有问题
print(‘响应状态码为’, response.getcode())
print(‘响应状态码为’, response.status)
(5) 返回访问的目标的url地址
print(‘响应访问的url地址为’, response.geturl())
(6) 获取的是响应头所有信息
print(‘响应头所有信息为’, response.getheaders())
(7)获取响应头指定信息
print(‘响应头指定信息为’, response.getheader(‘Content-Type’))
urlli.parse的使用(一般用于处理带中文的url)
💡使用urllib模块向一个携带中文字样的url发送请求时 ,会报错:‘ascii’ codec can’t encode characters in position 10-11: ordinal not in range(128)💡
字典格式的处理方式
步骤
(1)导入request和parse模块
(2)添加请求头header(重构ua)反反爬第一步
(3)使用urllib.parse方法处理url中的中文字样(使用字典存储要处理的内容,经过parse处理返回正常的url地址)
(4)使用+拼接固定的url地址和经过处理后的url地址
(5)创建请求对象
(6)使用urlopen()模拟浏览器像服务器发送网络请求
(7)打印获取响应对象里面的内容,并进行decode解码
import urllib.parse # 导入parse解析模块
import urllib.request # 导入request模块
url = ‘https://www.baidu.com/s?wd=酷我’
header = {
“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36”
}
通过urllib.parse处理url中的中文字样–> 得到可以通过urllib发送请求的url地址
字典格式的处理方式
org = {‘wd’: ‘酷我’}
经过处理之后返回wd=%E9%85%B7%E6%88%9
result = urllib.parse.urlencode(org)
使用+拼接固定的url地址和经过处理的url地址
https://www.baidu.com/s?wd=%E9%85%B7%E6%88%91
new_url = ‘https://www.baidu.com/s?’ + result
1、构造请求对象
res = urllib.request.Request(new_url, headers=header)
2、发送请求 获取响应
response = urllib.request.urlopen(res)
3、获取响应对象里面的内容(获取网页源码)
print(response.read().decode(‘utf-8’))
字符串格式的处理方式
步骤
(1)导入request和parse模块
(2)添加请求头header(重构ua)反反爬第一步
(3)使用urllib.parse.quote方法处理url中的中文字样(用一个变量存储酷我字样,使用parse.quote处理即可返回酷我经过处理的url地址)
(4)使用+拼接固定的url地址(需要加上wd=)和经过处理后的url地址(酷我字样处理后的url地址)
(5)创建请求对象
(6)使用urlopen()模拟浏览器像服务器发送网络请求
(7)打印获取响应对象里面的内容,并进行decode解码
import urllib.request
import urllib.parse
header = {
“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36”
}
第二种 字符串格式的处理方式
string_org = ‘酷我’
%E9%85%B7%E6%88%91
string_result = urllib.parse.quote(string_org)
使用+拼接固定的url地址(需要加上wd=)和经过处理后的url地址
new_string_url = ‘https://www.baidu.com/s?wd=’ + string_result
1、构造请求对象
res = urllib.request.Request(new_string_url, headers=header)
2、发送请求 获取响应
response = urllib.request.urlopen(res)
3、获取响应对象里面的内容,并进行decode解码
print(response.read().decode(‘utf-8’))
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
深知大多数初中级Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
[外链图片转存中…(img-MqTcIEzq-1711103261761)]
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)