Python爬虫——Urllib库-2

news2024/9/20 1:04:16

编解码

问题引入

例如:

https://www.baidu.com/s?wd=章若楠

https://www.baidu.com/s?wd=%E7%AB%A0%E8%8B%A5%E6%A5%A0

第二部分的一串乱码就是章若楠

如果这里是写的章若楠就会

产生这样的错误

所以我们就可以使用get请求方式的quote方法了

get请求方式的quote()方法

urllib.parse.quote("章若楠"):可将参数中的中文变成Unicode编码
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/122.0.0.0 Safari/537.36"
}
# 将周杰伦三个字变成Unicode格式
# 我们需要依赖于urllib.parse
name = urllib.parse.quote("章若楠")
# 拼接一下得到最终的字符串
url = url + name

# 因为urlopen()方法不能存储字典,所以headers无法传入
# 请求对象的定制
request = urllib.request.Request(url=url, headers=headers)
# 模拟浏览器发送请求
response = urllib.request.urlopen(request)
# 获取响应的内容
content = response.read().decode("utf-8")

print(content)

成功查询出来结果 


get请求的urlencode方法

应用场景:多个参数时

例如如下URL有章若楠和女两个参数,也可以使用quote,但是比较麻烦

url = "https://www.baidu.com/s?wd=章若楠&sex=女"

但是如果使用urlencode方法就比较容易;呃

data = {
    "wd": "章若楠",
    "sex": "女",
}
a = urllib.parse.urlencode(data)
print(a)

整体代码示例 

import urllib.request
import urllib.parse

url = "https://www.baidu.com/s?"

data = {
    "wd": "章若楠",
    "sex": "女",
    "location": "浙江"
}
new_data = urllib.parse.urlencode(data)
# 请求资源路径
url = url + new_data

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 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请求百度翻译

(1)post请求的参数需要进行编码

new_data = urllib.parse.urlencode(data)

(2)参数放置在请求对象定制的参数中

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

(3)编码之后需要调用encode方法,否则会报错

new_data = urllib.parse.urlencode(data).encode("utf-8")

        但是即使是加了encode将data编码之后,打印出来的内容还是乱码,这时候就需要将content从字符串转换成JSON对象了

整体代码如下:

import urllib.request
import urllib.parse
import json

# post请求
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/122.0.0.0 Safari/537.36"
}

data = {
    "kw": "spider",
}
# post请求的 参数需要进行编码
new_data = urllib.parse.urlencode(data).encode("utf-8")

# 请求对象的定制
# post请求的参数 不拼接在URL的后面,而是放在请求对象定制的参数中
request = urllib.request.Request(url=url, data=new_data, headers=headers)

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

# 获取网页源码数据
content = response.read().decode("utf-8")

# 将字符串转换为JSON对象
obj = json.loads(content)
print(obj)

post请求百度翻译之详细翻译

百度翻译存在一个详细翻译,位置下图课可见

然后我们一顿操作就可以得到下面代码

import urllib.request
import urllib.parse
import json

# post请求
url = "https://fanyi.baidu.com/v2transapi?from=en&to=zh"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}

data = {
    "from": "en",
    "to": "zh",
    "query": "love",
    "transtype": "realtime",
    "simple_means_flag": "3",
    "sign": "198772.518981",
    "token": "cdd52406abbf29bdf0d424e2889d9724",
    "domain": "common",
    "ts": "1709212364268"
}
# post请求的 参数需要进行编码
new_data = urllib.parse.urlencode(data).encode("utf-8")

# 请求对象的定制
# post请求的参数 不拼接在URL的后面,而是放在请求对象定制的参数中
request = urllib.request.Request(url=url, data=new_data, headers=headers)

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

# 获取响应的数据
content = response.read().decode("utf-8")

# 将字符串转换为JSON对象
obj = json.loads(content)
print(obj)

再得到如下的结果

wdf,发生了什么   o((⊙﹏⊙))o

被反扒拿下了又  o(╥﹏╥)o

那么来看请求头,

        这么多东西都是真实的浏览器需要发送过去的东西,而我们只发送了一个User-Agent,显然是被识破了

然后把这些参数都加入到header之中

headers = {
    "Accept": "*/*",
    # "Accept-Encoding": "gzip, deflate, br, zstd",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Acs-Token": "1709208007739_1709212364277_2rynw+ePk52zCeBqFrnpVyboCMK+LPtSWG7fFss9tB46byfbwCQfYELvJyCkm1etX3UxQpeq1u0RZgDNoBMV4TZMgoBePG0jlPUTwV8YiGfTxR3L02wu6DP3wBEe6UBFONiLTSWESnmEOBRoQ3yX7KBs+A8w1QV8BHgguDCGc9Q/foG9jowZncaCVGl2AYTUbzGjkPg8xb4EZ62L2FIjpVZ1oVatDtgSFqtAVEO5W3z7tRVaI0JxFF2kkhw6bxnVHPNSiSkoKD3AXdrFhj2GatPAyn9YXlLw20qoyE+UjZIyRat4xdWkFsdTG/kvPlVLTh7qoabs+NaNVC8a21dlyWxgBsmrTbUEojKiYyaURQG0COiv/u0teilELxPLCo+FwatSE0yD8alqLGXSbi6v/yOOphDWau7zRYMynAEaxaLrQTuOgHfvllflSel+GMBctvdS6RtLdhQb+pIa3Sp1c8C2JvJ/DM/1Th2s+7pdaqE=",
    "Connection": "keep-alive",
    "Content-Length": "152",
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    "Cookie": 'BIDUPSID=2DC3FD925EDB9E9310057AAA4313A978; PSTM=1679797623; BAIDUID=2DC3FD925EDB9E939299595287C491C9:FG=1; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; MCITY=-75%3A; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID_BFESS=2DC3FD925EDB9E939299595287C491C9:FG=1; ZFY=KUd37zEBYu5HusDOqV1jxs1znlRRBUOop2UvOac44TU:C; RT="z=1&dm=baidu.com&si=8d0cddbe-c90e-4db5-b3a0-3fd3a4f6ea21&ss=lt6jrqb7&sl=3&tt=rei&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&nu=9y8m6cy&cl=6qwh&ld=6pgv&ul=7z34&hd=7z3q"; BA_HECTOR=2k802l8l0l010184242k04a598vrdh1iu0cmp1t; H_PS_PSSID=40009_39661_40206_40211_40215_40222_40246_40274_40294_40289_40286_40317_40080; PSINO=1; delPer=0; APPGUIDE_10_6_9=1; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1709210293; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1709210293; ab_sr=1.0.1_MGY0MDFkY2E0MjFjNzAwODk0Yjg1NTk1M2ZmYmUxMjlmMGEyZGRjNTk0MDM4NWE2NmM0ZmQzNzE4NzhhMDBhZWM5M2QxNDEwNzljNjhlNTE1MThhMTg3OWI0NmQ4OTAwOTlhMGExODIxNWM3ZDVmNmJmZTQ1MTIyM2JkNDIzMTRhOWMzYzM2ZTFjZTcyZDQ4MTUxNzBlZjE2NmFmODczYw==',
    "Host": 'fanyi.baidu.com',
    "Origin": 'https://fanyi.baidu.com',
    "Referer": 'https://fanyi.baidu.com/?ext_channel=DuSearch',
    "Sec-Ch-Ua": '"Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"',
    'Sec-Ch-Ua-Mobile': '?0',
    'Sec-Ch-Ua-Platform': '"Windows"',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-origin',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest'
}

我们成功了吗!!!

并没有,怎么了呢

这里的编码格式并没有utf-8,所以我们不要携带这一行参数

        但是这里你把这里百分之九十的东西删除了都行,只留下一个cookie即可,因为这里只有cookie被用来验证了。

import urllib.request
import urllib.parse
import json

# post请求
url = "https://fanyi.baidu.com/v2transapi?from=en&to=zh"

headers = {
    # "Accept": "*/*",
    # "Accept-Encoding": "gzip, deflate, br, zstd",
    # "Accept-Language": "zh-CN,zh;q=0.9",
    # "Acs-Token": "1709208007739_1709212364277_2rynw+ePk52zCeBqFrnpVyboCMK+LPtSWG7fFss9tB46byfbwCQfYELvJyCkm1etX3UxQpeq1u0RZgDNoBMV4TZMgoBePG0jlPUTwV8YiGfTxR3L02wu6DP3wBEe6UBFONiLTSWESnmEOBRoQ3yX7KBs+A8w1QV8BHgguDCGc9Q/foG9jowZncaCVGl2AYTUbzGjkPg8xb4EZ62L2FIjpVZ1oVatDtgSFqtAVEO5W3z7tRVaI0JxFF2kkhw6bxnVHPNSiSkoKD3AXdrFhj2GatPAyn9YXlLw20qoyE+UjZIyRat4xdWkFsdTG/kvPlVLTh7qoabs+NaNVC8a21dlyWxgBsmrTbUEojKiYyaURQG0COiv/u0teilELxPLCo+FwatSE0yD8alqLGXSbi6v/yOOphDWau7zRYMynAEaxaLrQTuOgHfvllflSel+GMBctvdS6RtLdhQb+pIa3Sp1c8C2JvJ/DM/1Th2s+7pdaqE=",
    # "Connection": "keep-alive",
    # "Content-Length": "152",
    # "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    "Cookie": 'BIDUPSID=2DC3FD925EDB9E9310057AAA4313A978; PSTM=1679797623; BAIDUID=2DC3FD925EDB9E939299595287C491C9:FG=1; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; MCITY=-75%3A; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID_BFESS=2DC3FD925EDB9E939299595287C491C9:FG=1; ZFY=KUd37zEBYu5HusDOqV1jxs1znlRRBUOop2UvOac44TU:C; RT="z=1&dm=baidu.com&si=8d0cddbe-c90e-4db5-b3a0-3fd3a4f6ea21&ss=lt6jrqb7&sl=3&tt=rei&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&nu=9y8m6cy&cl=6qwh&ld=6pgv&ul=7z34&hd=7z3q"; BA_HECTOR=2k802l8l0l010184242k04a598vrdh1iu0cmp1t; H_PS_PSSID=40009_39661_40206_40211_40215_40222_40246_40274_40294_40289_40286_40317_40080; PSINO=1; delPer=0; APPGUIDE_10_6_9=1; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1709210293; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1709210293; ab_sr=1.0.1_MGY0MDFkY2E0MjFjNzAwODk0Yjg1NTk1M2ZmYmUxMjlmMGEyZGRjNTk0MDM4NWE2NmM0ZmQzNzE4NzhhMDBhZWM5M2QxNDEwNzljNjhlNTE1MThhMTg3OWI0NmQ4OTAwOTlhMGExODIxNWM3ZDVmNmJmZTQ1MTIyM2JkNDIzMTRhOWMzYzM2ZTFjZTcyZDQ4MTUxNzBlZjE2NmFmODczYw==',
    # "Host": 'fanyi.baidu.com',
    # "Origin": 'https://fanyi.baidu.com',
    # "Referer": 'https://fanyi.baidu.com/?ext_channel=DuSearch',
    # "Sec-Ch-Ua": '"Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"',
    # 'Sec-Ch-Ua-Mobile': '?0',
    # 'Sec-Ch-Ua-Platform': '"Windows"',
    # 'Sec-Fetch-Dest': 'empty',
    # 'Sec-Fetch-Mode': 'cors',
    # 'Sec-Fetch-Site': 'same-origin',
    # 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
    # 'X-Requested-With': 'XMLHttpRequest'
}

data = {
    "from": "en",
    "to": "zh",
    "query": "love",
    "transtype": "realtime",
    "simple_means_flag": "3",
    "sign": "198772.518981",
    "token": "cdd52406abbf29bdf0d424e2889d9724",
    "domain": "common",
    "ts": "1709212364268"
}
# post请求的 参数需要进行编码
new_data = urllib.parse.urlencode(data).encode("utf-8")

# 请求对象的定制
# post请求的参数 不拼接在URL的后面,而是放在请求对象定制的参数中
request = urllib.request.Request(url=url, data=new_data, headers=headers)

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

# 获取响应的数据
content = response.read().decode("utf-8")

# 将字符串转换为JSON对象
obj = json.loads(content)
print(obj)

        这个就是百度翻译所需的验证,看见没有连UA甚至都不需要,这就是各种网站的反扒机制需要不同的headers的数值,百度网盘只需要一个cookie


总结

累了,以后再总结ヾ( ̄▽ ̄)Bye~Bye~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1482164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv9:使用可编程梯度信息学习您想学习的内容

摘要 arxiv.org/pdf/2402.13616.pdf 当今的深度学习方法侧重于如何设计最合适的目标函数,以便模型的预测结果能最接近于实际结果。同时,还必须设计一个适当的架构,以便于获取足够的预测信息。现有的方法忽略了一个事实,即当输入数据经历层层特征提取和空间变换时,会损失…

加密与安全_探索密钥交换算法_Diffie-Hellman算法

文章目录 概述数学理论支持使用Java实现DH算法DH算法的缺点 概述 对称加密算法解决了数据加密的问题,例如AES加密可以有效地保护文件的安全性。然而,一个关键的挑战是如何在不安全的通信信道上安全地传输密钥。 假设小明需要向路人甲发送一个加密文件&a…

代码随想录刷题笔记 DAY 37 | 动态规划理论基础 | 斐波那契数 No.509 | 爬楼梯 No.70 | 使用最小花费爬楼梯 No.746

文章目录 Day 3700. 动态规划理论基础01. 斐波那契数&#xff08;No. 509&#xff09;<1> 题目<2> 笔记<3> 代码 02. 爬楼梯&#xff08;No. 70&#xff09;<1> 题目<2> 笔记<3> 代码 03. 使用最小花费爬楼梯&#xff08;No. 746&#xff…

Project_Euler-44 题解

Project_Euler-44 题解 题目 思路 题目给出了一个性质&#xff0c;让我在对应性质的数据中找出目标值&#xff0c;这种问题首先想到的就是枚举。 我们可以枚举 P k P_k Pk​ &#xff0c;对于每一个 P k P_k Pk​ &#xff0c;我们再枚举 P j P_j Pj​&#xff0c; P j P_…

阿尔卡特Adixen ADP/ADS 系列 2 干泵使用说明

阿尔卡特Adixen ADP/ADS 系列 2 干泵使用说明

《求生之路2》服务器如何选择合适的内存和CPU核心数,以避免丢包和延迟高?

根据求生之路2服务器的实际案例分析选择合适的内存和CPU核心数以避免丢包和延迟高的问题&#xff0c;首先需要考虑游戏的类型和对服务器配置的具体要求。《求生之路2》作为一款多人在线射击游戏&#xff0c;其服务器和网络优化对于玩家体验至关重要。 首先&#xff0c;考虑到游…

Android修行手册-集成Python开发环境

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

redis实现分布式全局唯一id

目录 一、前言二、如何通过Redis设计一个分布式全局唯一ID生成工具2.1 使用 Redis 计数器实现2.2 使用 Redis Hash结构实现 三、通过代码实现分布式全局唯一ID工具3.1 导入依赖配置3.2 配置yml文件3.3 序列化配置3.4 编写获取工具3.5 测试获取工具 四、运行结果 一、前言 在很…

PySide6+VSCode Python可视化环境搭建

#记住在cmd中运行&#xff0c;不要在vscode里运行&#xff0c;否则env会装到工程目录下 python -m venv env #env\Scripts\activate.bat pip install pyside6 下载本期源码 vscode装一个PYQT Integration插件&#xff0c;设置好两个路径&#xff08;下面有个脚本用于获取路径&…

陶瓷工业5G智能制造工厂数字孪生可视化平台,推进行业数字化转型

陶瓷工业5G智能制造工厂数字孪生可视化平台&#xff0c;推进行业数字化转型。在陶瓷工业领域&#xff0c;5G智能制造工厂数字孪生可视化平台的应用正在改变着行业的传统生产模式&#xff0c;推动着数字化转型的进程。本文将围绕这一主题展开探讨&#xff0c;分析数字孪生可视化…

Socket网络编程(四)——点对点传输场景方案

目录 场景如何去获取到TCP的IP和Port&#xff1f;UDP的搜索IP地址、端口号方案UDP搜索取消实现相关的流程&#xff1a;代码实现逻辑服务端实现客户端实现UDP搜索代码执行结果 TCP点对点传输实现代码实现步骤点对点传输测试结果 源码下载 场景 在一个局域网当中&#xff0c;不知…

Win11系统安装安卓子系统教程

随着Win11系统的不断普及&#xff0c;以及硬件设备的更新换代&#xff0c;我相信很多同学都已经更新并使用到了最新的Win11系统。那么&#xff0c;Win11系统最受期待的功能“Windows Subsystem for Android”&#xff08;简称WSA&#xff09;&#xff0c;即《安卓子系统》。他可…

CAPL组装IPv4分片包的三种思路(2)

2、使用CAPL的函数自动生成一条完整的ICMPv4 Echo Request报文,然后把数据手动放入两个分片报文中 首先生成一条完整的icmp报文: ethernetPacket ppkt1;//icmpv4 echo requestbyte data[1] = {10};//icmpv4 echo request datappkt1.icmpv4.echo…

湖南湘菜 7页面 美食主题 带设计说明 美食网页设计制作 HTML美食网页成品 美食网页成品 HTML美食网页设计

湖南湘菜 7页面 美食主题 带设计说明 jquery图片轮播特效 滚动文字 aspaccess数据库注册登录留言功能 美食网页设计制作 HTML美食网页成品 美食网页成品 HTML美食网页设计制作 前端美食网页开发 热门美食特产网页制作 静态网页成品 asp/php动态网站设计制作DW定制定做 web前…

佛山50公里徒步组团|真北敏捷社区佛山敏捷DevOps社区

真北敏捷社区&佛山敏捷DevOps社区有两个宗旨&#xff0c;一是求知&#xff0c;二是连接。连接有识之士&#xff0c;同修友士之识。峨峨乎高山&#xff0c;洋洋乎流水。谈笑有鸿儒&#xff0c;往来无白丁。 《柳叶刀》上的研究显示&#xff0c;运动的情绪价值&#xff0c;相…

GitHub Copilot extension activation error: ‘No access to GitHub Copilot found‘

好不容易学生认证通过了&#xff0c;打开vscode用copilot结果一直报这个错误。我的原因是&#xff1a;还未给copilot授权&#xff0c; 通过了学生认证后要进入这里进行授权&#xff1a;

数据分析-Pandas数据探查初步圆饼图

数据分析-Pandas数据探查初步圆饼图 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&am…

PHP使用imap_open读取QQ邮箱

PHP代码&#xff1a; /** PHP使用imap_open读取QQ邮箱imap_open 官方文档&#xff1a;https://www.php.net/function.imap_open */function parse_mailstr($subject) {$a explode(?,$subject);$n count($a);$a $a[$n-2];return base64_decode($a); }function recevie_emai…

点亮城市名片丨计讯物联智慧灯杆系统在通讯基地的成功应用

项目背景 在国家新型城镇化大背景下&#xff0c;十四五规划纲要强调“加快数字化发展&#xff0c;建设数字中国”&#xff0c;明确提出“以数字化助推城乡发展和治理模式创新”&#xff0c;全面提高城市的运行效率和宜居程度。 项目概况 为满足灯杆灯光亮度的远程智能管理、对…

docker构建hyperf环境

一&#xff0c;构建hyperf 镜像 官网git https://github.com/hyperf/hyperf-docker 使用dockerfile构建镜像 根据需要这里我使用8.1 swoole版本的镜像 在/home/hyperfdocker 目录中新建一个Dockerfile文件&#xff0c;将这个git上的Dockerfile内容复制粘贴进去 docker build…