网络请求模块(2)

2022-12-20 09:11:53 浏览数 (1)

1. get 请求方式与 post 请求方式

get 请求

从服务器获取数据 没有对服务器产生影响 通常都是 get 请求、

请求参数在 url 地址上显示,时间戳就是后面的各种参数

post 请求

向服务器发送数据 会对服务器产生影响 通常都是 post 请求

请求参数不会在 url 上显示

就像百度翻译翻译一样他是一个动态加载数据,有道翻译是 ajax 请求,真正的 URL 在 XHR 里

2 User-Agent 用户代理

作用就是伪装爬虫记录用户数据,这会作为反反爬的第一步,更好的获取完整的 HTML 源码

3 urllib 模块

urllib 是 python 的一个内置的网络请求模块 ,内置函数还有很多如 time random 等

有时候需要结合我们的 requests 模块去综合使用 urlretreieve 参数说明 url: 外部或者本地的 url

遇到这样的如何获取源码

代码语言:javascript复制
第一种方法
#urlencode
传入参数类型:字典
r = {'wd':"海贼王"}
对r这个字典进行解码操作
result = urllib.parse.urlencode(r) 
print(result)
wd=海贼王
kw=海贼王
   海贼王

第二种方法  quote
r = '海贼王'
result = urllib.parse.quote(r)
print(result)

z_l = 'https://tieba.baidu.com/f?ie=utf-8&'  result  # 拼接
print(z_l)

4 .urllib.request

urllib.request.urlopen("网址") 向网站发起一个请求并获取响应

字节流 = response.read()

字符串 = response.read().decode("utf-8")

urllib.request.Request"网址",headers="字典") urlopen()不支持重构 User-Agent

read() 读取服务器响应的内容

getcode() 返回 HTTP 的响应码

geturl() 返回实际数据的 URL(防止重定向问题)

5 urllib.parse

UnicodeEncodeError: 'ascii' codec can't encode characters in position 51-53: ordinal not in range(128) 报错信息 urllib 网络请求模块在想一个携带了中文的 url 发送请求的时候可能会出现问题。

方法就是转成 16 进制

urlencode 传入参数类型:字典 功能:将存入的字典参数编码为 URL 查询字符串,即转换成以 key1=value1&key2=value2 的形式

enquote 对 url 进行解码,把类似"%xx"的字符替换成单个字符

代码语言:javascript复制
import urllib.request
url = 'https://www.baidu.com/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
1 创建req请求对象并构建headers
req = urllib.request.Request(url,headers=headers)
print(req)  # <urllib.request.Request object at 0x0000022D35B9BB88>

2 获取响应数据
response = urllib.request.urlopen(req)

3 读取响应内容
html = response.read().decode('utf-8')
print(html)

getcode() 返回HTTP的响应码
print(response.getcode())
geturl()  返回实际数据的URL(防止重定向问题)
print(response.geturl())

0 人点赞