🥳请求模块urllib的基本使用🥳

  • urllib的子模块

    • HttpResponse常用方法与属性获取信息
    • urlli.parse的使用(一般用于处理带中文的url)
    • 字典格式的处理方式
    • 字符串格式的处理方式
  • 简单了解web前端

  • ✅爬取baidu官网HTML源代码✅

    • 添加请求头信息(重构user_agent)
    • 创建Request对象
  • 💘扩展知识💘

    • 1.使用with open 和 open保存图片
    • 2.使用urillib.request.urlretrieve() 函数保存图片

urllib的子模块

=======================================================================

| 模块 | 描述 |

| — | — |

| urllib.request | 用于实现基本HTTP请求的模块 |

| urllib.error | 异常处理模块,如果在发送网络请求的过程时出现错误,可以捕获异常进行有效处理 |

| urllib.parse | 用于解析URL的模块 |

| urllib.robotparser | 用于解析robots.txt文件,判断网站是否可以爬取信息 |

HttpResponse常用方法与属性获取信息


通过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)
img

在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

深知大多数初中级Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
[外链图片转存中…(img-MqTcIEzq-1711103261761)]

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐