urllib的基础使用方法

简介: urllib的基础使用方法

目录

 1.urlib库的使用

response 服务器返回的数据:一个类型,六个方法

案例1: 使用urllib来获取百度首页的源码

urllib.request.urlretrieve(url,filename) 请求下载网页 请求下载图片 请求下载视频%20%E8%AF%B7%E6%B1%82%E4%B8%8B%E8%BD%BD%E7%BD%91%E9%A1%B5%20%E8%AF%B7%E6%B1%82%E4%B8%8B%E8%BD%BD%E5%9B%BE%E7%89%87%20%E8%AF%B7%E6%B1%82%E4%B8%8B%E8%BD%BD%E8%A7%86%E9%A2%91)

2.请求对象的定制

get请求方式:urllib.parse.quote()

get请求方式:urllib.parse.urlencode()

post请求方式


1.urlib库的使用

urllib.request.urlopen() 模拟浏览器向服务器发送请求

response 服务器返回的数据:一个类型,六个方法

  • 案例
import urllib.request
url = 'http://www.baidu.com'
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(url)

# 按照一个字节一个字节的去读
content = response.read()
print('response.read() is: ', content)
import urllib.request
url = 'http://www.baidu.com'

# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(url)

# 返回参数个字节
content = response.read(5)
print('response.read(5) is: ', content)

#--------------------------readline():读取一行
#import urllib.request
url = 'http://www.baidu.com'

# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(url)

# 读取一行
content = response.readline()
print('response.readline() is ', content)


#-------------------readlines():读取所有行
import urllib.request
url = 'http://www.baidu.com'
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(url)
# 读取所有行
content = response.readlines()
print(type(content))
print(content)


#-------------------geturl(): 返回的是url地址
import urllib.request
url = 'http://www.baidu.com'
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(url)
# 返回的是url地址
print(response.geturl())

#--------------------getcode(): 返回状态码
import urllib.request
url = 'http://www.baidu.com'
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(url)
# 返回状态码  如果是200了 那么就证明我们的逻辑没有错
print(response.getcode())
 #获取请求头信息:获取的是一些状态信息
import urllib.request
url = 'http://www.baidu.com'
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(url)
# 获取是一个状态信息
print(response.getheaders())

response的数据类型是HttpResponse\
字节‐‐>字符串 解码decode\
字符串‐‐>字节 编码encode

  • read() 字节形式读取二进制 扩展:rede(5)返回前几个字节
  • readline() 只能 读取一行
  • readlines() 一行一行读取 直至结束
  • getcode() 获取状态码 (判断书写逻辑是否正确,返回200表示正常)
  • geturl() 获取url地址
  • getheaders() 获取headers

案例1: 使用urllib来获取百度首页的源码  

# 使用urllib来获取百度首页的源码
import urllib.request
 
 
# (1)定义一个url  就是你要访问的地址
url = 'http://www.baidu.com'
 
# (2)模拟浏览器向服务器发送请求 response响应
response = urllib.request.urlopen(url)
 
# (3)获取响应中的页面的源码  content 内容的意思
# read方法  返回的是字节形式的二进制数据
# 我们要将二进制的数据转换为字符串
# 二进制--》字符串  解码  decode('编码的格式')
content = response.read().decode('utf-8')
 
# (4)打印数据
print(content)

urllib.request.urlretrieve(url,filename) 请求下载网页 请求下载图片 请求下载视频

  • 参数说明:url:下载地址 filename:下载文件名
​
import urllib.request
 
# 下载网页
# url_page = 'http://www.baidu.com'
 
# url代表的是下载的路径  filename文件的名字
# 在python中 可以变量的名字  也可以直接写值
# urllib.request.urlretrieve(url_page,'baidu.html')
 
# 下载图片
# url_img = 'https://img1.baidu.com/it/u=3004965690,4089234593&fm=26&fmt=auto&gp=0.jpg'
#
# urllib.request.urlretrieve(url= url_img,filename='lisa.jpg')
 
# 下载视频
url_video = 'https://vd3.bdstatic.com/mda-mhkku4ndaka5etk3/1080p/cae_h264/1629557146541497769/mda-mhkku4ndaka5etk3.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1629687514-0-0-7ed57ed7d1168bb1f06d18a4ea214300&bcevod_channel=searchbox_feed&pd=1&pt=3&abtest='
 
urllib.request.urlretrieve(url_video,'hxekyyds.mp4')

​

2.请求对象的定制

UA介绍:User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统 及版本、CPU 类型、浏览器及版本。浏览器内核、浏览器渲染引擎、浏览器语言、浏览器插件等\
UA反爬虫:在进行爬虫时候,程序模仿浏览器操作,但是反爬虫机制在响应爬虫请求时候需要进行UA识别,这时候就需要将UA参数传进我们的爬虫程序中

案例:\
 

import urllib.request
 
url = 'https://www.baidu.com'
 
# url的组成
# https://www.baidu.com/s?wd=周杰伦
 
# http/https    www.baidu.com   80/443     s      wd = 周杰伦     #
#    协议             主机        端口号     路径     参数           锚点
# http   80
# https  443
# mysql  3306
# oracle 1521
# redis  6379
# mongodb 27017
 
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'
}
 
# 因为urlopen方法中不能存储字典 所以headers不能传递进去
# 请求对象的定制
request = urllib.request.Request(url=url,headers=headers)
 
response = urllib.request.urlopen(request)
 
content = response.read().decode('utf8')
 
print(content)

3.编解码

  • get请求方式:urllib.parse.quote()

  • quote()方法能够将汉字转换成unicode编码的格式,适用于单个参数
# https://www.baidu.com/s?wd=%E5%91%A8%E6%9D%B0%E4%BC%A6
 
 
# 需求 获取 https://www.baidu.com/s?wd=周杰伦的网页源码
 
import urllib.request
import urllib.parse
 
 
url = 'https://www.baidu.com/s?wd='
 
# 请求对象的定制为了解决反爬的第一种手段
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'
}
 
# 将周杰伦三个字变成unicode编码的格式
# 我们需要依赖于urllib.parse
name = urllib.parse.quote('周杰伦')
 
url = url + name
 
# 请求对象的定制
request = urllib.request.Request(url=url,headers=headers)
 
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)
 
# 获取响应的内容
content = response.read().decode('utf-8')
 
# 打印数据
print(content)

  • get请求方式:urllib.parse.urlencode()

    • urlencode()方法也可以将汉字转换成unicode编码,适用于多个参数
  • 案例:
# urlencode应用场景:多个参数的时候
 
 
# https://www.baidu.com/s?wd=周杰伦&sex=男
 
# import urllib.parse
#
# data = {
#     'wd':'周杰伦',
#     'sex':'男',
#     'location':'中国台湾省'
# }
#
# a = urllib.parse.urlencode(data)
# print(a)
#运行结果            
>>>wd=%E5%91%A8%E6%9D%B0%E4%BC%A6&sex=%E7%94%B7&location=%E4%B8%AD%E5%9B%BD%E5%8F%B0%E6%B9%BE%E7%9C%81

 
 
#获取https://www.baidu.com/s?wd=%E5%91%A8%E6%9D%B0%E4%BC%A6&sex=%E7%94%B7的网页源码
 
>>>import urllib.request
>>>import urllib.parse
 
>>>base_url = 'https://www.baidu.com/s?'
 
>>>data = {
    'wd':'周杰伦',
    'sex':'男',
    'location':'中国台湾省'
}
 
>>>new_data = urllib.parse.urlencode(data)
 
# 请求资源路径
>>>url = base_url + new_data
 
>>>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(url=url,headers=headers)
 
# 模拟浏览器向服务器发送请求
>>>response = urllib.request.urlopen(request)
 
# 获取网页源码的数据
>>>content = response.read().decode('utf-8')
 
# 打印数据
print(content)

  • post请求方式

    • post请求方式与get请求方式区别

      • 1:get请求方式的参数必须编码,参数是拼接到url后面,编码之后不需要调用encode方法
      • 2:post请求方式的参数必须编码,参数是放在请求对象定制的方法中,编码之后需要调用encode方法
  • 案例
# post请求
 
>>>import urllib.request
>>>import urllib.parse
 
 
>>>url = 'https://fanyi.baidu.com/sug'
 
>>>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'
}
 
>>>data = {
    'kw':'spider'
}
 
# post请求的参数 必须要进行编码
>>>data = urllib.parse.urlencode(data).encode('utf-8')
 
# post的请求的参数 是不会拼接在url的后面的  而是需要放在请求对象定制的参数中
# post请求的参数 必须要进行编码
>>>request = urllib.request.Request(url=url,data=data,headers=headers)
 
# 模拟浏览器向服务器发送请求
>>>response = urllib.request.urlopen(request)
 
# 获取响应的数据
>>>content = response.read().decode('utf-8')
 
# 字符串--》json对象
 
>>>import json
 
obj = json.loads(content)
>>>print(obj)

相关文章
|
6月前
|
存储 缓存 JavaScript
python实战篇:利用request库打造自己的翻译接口
python实战篇:利用request库打造自己的翻译接口
123 1
python实战篇:利用request库打造自己的翻译接口
|
6月前
|
Python
Python Requests 基本使用(与 urllib 的区别)
Python Requests 基本使用(与 urllib 的区别)
86 0
|
6月前
|
数据采集 API Python
Python 初步了解urllib库:网络请求的利器
Python 初步了解urllib库:网络请求的利器
98 0
|
数据采集 存储 机器人
【 ⑦】urllib库的基本使用
【 ⑦】urllib库的基本使用
103 0
|
Python
Python urllib 入门使用(步骤详细)
Python urllib 入门使用(步骤详细)
64 0
|
数据处理 Python
使用urllib库简单入门
使用urllib库简单入门
102 0
|
Web App开发 Python
Python—urllib的基本使用
Python—urllib的基本使用
113 0
|
数据采集 Web App开发 iOS开发
Urllib爬虫项目编写实战|学习笔记
快速学习Urllib爬虫项目编写实战
Urllib爬虫项目编写实战|学习笔记
|
数据采集 Python
爬虫第一次笔记 urllib的基本使用 urllib一个类型,六个方法 urllib下载 urllib请求对象的定制
爬虫第一次笔记 urllib的基本使用 urllib一个类型,六个方法 urllib下载 urllib请求对象的定制
126 0
爬虫第一次笔记 urllib的基本使用 urllib一个类型,六个方法 urllib下载 urllib请求对象的定制
|
数据采集 Python
Python爬虫:urllib内置库基本使用
Python爬虫:urllib内置库基本使用
117 0