Python爬虫——Urllib库-中

编解码

问题引入

例如:

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~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

thefour--Love is like a tide

最后一部分了,要开始进行我们的训练了。 先上代码: import os import numpy as np from tqdm import tqdm import tensorflow as tf from thetwo import NeuralStyleTransferModel import theone import thethree #创建模型 modelNeuralStyleTransferM…

从零开始写 Docker(三)---基于 cgroups 实现资源限制

本文为从零开始写 Docker 系列第三篇,在mydocker run 基础上基于 cgroups 实现容器的资源限制。 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 如果你对云原生技术充满好奇,想要深入了解更多相关的文章和资讯,欢迎关注…

C# Post数据或文件到指定的服务器进行接收

目录 应用场景 实现原理 实现代码 PostAnyWhere类 ashx文件部署 小结 应用场景 不同的接口服务器处理不同的应用,我们会在实际应用中将A服务器的数据提交给B服务器进行数据接收并处理业务。 比如我们想要处理一个OFFICE文件,由用户上传到A服务器…

紫罗兰栽培养护简单,这些要点多注意——花园传说

紫罗兰,以其独特的芬芳和优雅的花姿,历来备受人们的喜爱。无论是摆放在室内还是庭院中,紫罗兰都能为生活增添一份别样的雅致。那么,如何将紫罗兰成功栽培到家中呢?下面就为大家详细介绍紫罗兰的养殖方法及养护要点。 选…

《Spring Security 简易速速上手小册》第3章 用户认证机制(2024 最新版)

文章目录 3.1 认证流程3.1.1 基础知识详解认证流程的核心概念认证流程的步骤 3.1.2 主要案例:内存用户认证案例 Demo:快速启动你的 Spring Boot 守护程序 3.1.3 拓展案例 1:数据库用户认证案例 Demo:让数据库守护你的秘密 3.1.4 拓…

Django学习笔记-ModelForm使用(完全依赖)

1.创建模型 ,code,name,sex,entrydate 2.模型映射 python manage.py makemigrations myapp01,python manage.py migrate 3.创建模型表单,继承forms.ModelForm,Meta:元数据,models需引入,fields填写引用的模型变量 4.创建testModelForm.html,添加urls 5.views编写testmodelfo…

【Python笔记-设计模式】模板方法模式

一、说明 模板方法模式是一种行为设计模式,就是继承和多态的使用,将通用操作在父类中实现,不同操作的细节在子类中具体实现,父类只声明接口。 (一) 解决问题 减少相似逻辑的重复代码,提高代码复用性提高代码逻辑性&…

深入探讨Python中的os模块:基础大总结与实战【第109篇—os模块】

深入探讨Python中的os模块:基础大总结与实战 在Python编程中,操作系统(os)模块是一个强大的工具,它提供了与操作系统交互的各种功能,使得开发者能够轻松地执行文件和目录操作、获取系统信息以及执行系统命令。在本篇技术博客中&a…

React中对表格实现列表的拖拽排序

1. 效果:推拽手柄列 2. 实现: react中我们需要两个包来实现 ‘array-move’‘react-sortable-hoc’Installation Use npm $ npm install react-sortable-hoc --save 引入 import { arrayMoveImmutable } from array-move import { SortableContainer, SortableElement, Sort…

具身智能计算系统,机器人时代的 Android | 新程序员

【导读】具身智能作为一种新兴的研究视角和方法论,正在刷新我们对智能本质及其发展的理解:传统的 AI 模型往往将智能视为一种独立于实体存在的抽象能力,而具身智能则主张智能是实体与其环境持续互动的结果。 本文深度剖析了具身智能计算系统…

Unity(第十六部)声音和视频

声音 1、听声音 创建相机的时候,相机自带Audio Listener 多个相机的时候,我们只保留一个Audio Listener就可以 2、声音源,环境音 添加Audio Source就行中文叫声音源 3、脚本执行的声音 using System.Collections; using System.Collection…

如何用ai智能写作?推荐5款优秀的AI写作神器

写作是件繁琐的事情,也是需要耗费精力和时间的,还好目前有了ai写作神器的出现,帮助我们解决了不少的写作难题。这些AI写作工具不仅可以帮助我们提高写作效率,还能够生成高质量的内容。在本文中,我将向你推荐5款优秀的A…

CentOS 定时调度

文章目录 一、场景说明二、脚本职责三、参数说明四、操作示例五、注意事项 一、场景说明 本自动化脚本旨在为提高研发、测试、运维快速部署应用环境而编写。 脚本遵循拿来即用的原则快速完成 CentOS 系统各应用环境部署工作。 统一研发、测试、生产环境的部署模式、部署结构、…

深度学习 精选笔记(7)前向传播、反向传播和计算图

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

当无人机飞手真的有前途吗?无人机工作怎么找,感觉找不到太难了?无人机飞手未来的出路在哪里?

无人机飞手这个职业的前途很大程度上取决于市场需求和行业发展趋势。随着无人机技术的不断进步和应用领域的扩大,无人机飞手的需求量也在逐渐增加。然而,这个职业的发展也受到政策法规、技术更新换代等因素的影响,因此需要不断学习新技术和适…

Fastjson2 <== 2.0.26反序列漏洞

根据Y4TACKER师傅在2023-03-20发布了一篇关于Fastjson原生反序列化的文章,文章中引入注目的是利用条件限制条件,不常常关注漏洞预警或者内容的几乎都是未发觉Fastjson2 到Fastjson2 2.0.26版本都有问题,其实如果单独去使用一些关键词去搜索&a…

python 小游戏《2048》字符版非图形界面

参考链接: 闲谈2048小游戏和数组的旋转及翻转和转置 目录 2048 一、方阵类 二、随机插入1或2 三、 合并和递增 四、 判断和移动 五、 键盘控制 完整源代码 玩法过程 2048 上回说到2048小游戏中数组的各种旋转、翻转的方法,就是为代码编程作准…

单词规律00

题目链接 单词规律 题目描述 注意点 pattern只包含小写英文字母s只包含小写英文字母和 ’ ’s不包含任何前导或尾随对空格s中每个单词都被 单个空格 分隔 解答思路 本题与上一次同构字符串类似,思路可以参照同构字符串 代码 class Solution {public boolean …

C++——内存管理(new和delete)详解

目录 C/C内存管理 案例:变量在内存中到底会在哪? New和delete Operator new和operator delete函数 New和delete的原理 对内置类型 对自定义类型 定位new New/delete和malloc/free的区别 C/C内存管理 C/C内存管理分布图:(从…

C语言while 语句的基本格式是什么?

一、问题 C语⾔中有三种循环语句,while 语句是其中的⼀个,它的基本格式是怎样的呢? 二、解答 while 语句的⼀般形式为: while(表达式) 语句; 其中,表达式是循环条件,语句为循环体。 注意: …