请求对象的定制

关于User Agent,用户代理,简称UA。它是一个特殊的字符串,使得服务器能够识别客户使用的操作系统以及版本,CPU类型,浏览器版本。

浏览器内核,浏览器渲染引擎,浏览器语言,浏览器插件等。

url组成: 协议+主机+端口 + 路径+ 参数

例如: https:www.baidu.com

协议 hthttps ,主机 www.baidu.com, 端口和参数没有显示

常见端口号:

http 80, https 443, mysql 3306, oracle 1521, redis 6379,mongodb 27017

例如百度搜索编程语言:

**url地址:**https://www.baidu.com/s?wd=%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80&rsv_spt=1&rsv_iqid=0x91c63b620006e68f&issp=1&f=3&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_dl=ts_1&rsv_enter=1&rsv_sug3=7&rsv_sug1=5&rsv_sug7=100&rsv_sug2=1&rsv_btype=i&prefixsug=bianc%2520&rsp=1&inputT=3404&rsv_sug4=4090

我们只需要看前面的一部分地址:

https://www.baidu.com/s?wd=%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80

把这复制到浏览器Url ,看起来一样执行。

可以看出,/s为路径;参数为w,等号后的为参数的值。

测试代码:

import urllib.request

import urllib.parse

url =‘https://www.baidu.com/s?wd=python’

response = urllib.request.urlopen(url)

content = response.read().decode(‘utf8’)

print(content)

# 反爬的机制,返回的数据不是完整的

返回的数据:

<head>

    <script>

        location.replace(location.href.replace("https://","http://"));

    </script>

</head>
<noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript>

Process finished with exit code 0

从返回数据看,数据不是完整的,说明存在反爬的。

解决方式:

请求对象的定制是为了解决反爬的一种手段,汉字转Unicode编码

queryName = urllib.parse.quote(“新冠肺炎”)

print(queryName) # %E6%96%B0%E5%86%A0%E8%82%BA%E7%82%8E

在这里插入图片描述

复制这个Url地址

https://www.baidu.com/s?wd=%E6%96%B0%E5%86%A0%E8%82%BA%E7%82%8E

与转换的unicode字符串一样的。所以通过这种方式转换。

传入UA参数和Url 地址的拼接

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’

}

url_base =‘https://www.baidu.com/s?wd=’

queryName = urllib.parse.quote(“新冠肺炎”)

url = url_base + queryName

request = urllib.request.Request(url=url, headers=headers)

response = urllib.request.urlopen(request)

content = response.read().decode(‘utf8’)

print(content)

输出HTML正常!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flysh05

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值