文章目录🙋作者:爱编程的小贤
⛳知识点:python爬虫—url传参
🥇:每天学一点,早日成大佬
- 👊前言
- 🏆一、URL传参
- 1.图片显示
- 2.url路径分析
- 3. request URL
- 4.url转义
- 🏆二、发送带参数的请求
- 1.什么叫做请求参数
- 2.请求参数的形式:字典
- 3.请求参数的用法
- 4.两种方式:发送带参数的请求
- 🏆三、案例
- 1.网易云单张图片下载
- 2.网易云非VIP歌曲下载
- 3.网易云单首MV下载
- 4.QQ音乐抽离音频
- 5.附录
- 🏆总结
👊前言
💎 💎 💎今天为大家介绍爬虫的url传参啦!!! 这是爬虫的第三讲咯!!!🚀 🚀 🚀
如果你看完感觉对你有帮助,,,欢迎给个三连哦💗!!!您的支持是我创作的动力。🌹 🌹 🌹 🌹 🌹 🌹 感谢感谢!!!😘😘😘
🏆一、URL传参 1.图片显示
首先分析一下网页上的图片是如何存储进行显示的呢 ?
根据network里面的数据包的分析,图片都是一个单独的数据包,单独发送
HTML骨架
2.url路径分析我们在网址栏输入的url,一般情况下都是网页主框架的url,当浏览器拿到了该主框架的url的响应response以及接受到了这个html文件的代码之后就会呈现出来,同时图片也是url,浏览器会拿着这个url去请求这个图片,在拿到具体的响应之后就将图片显示出来,最终组成了一个完整的 页面给我们查看。
从上方我们可以看到,当我们将url路径中的参数删除掉一些只剩下wd参数之后仍然可以得到服务器给我们的响应,那么也就是说,url中并不是所有的参数都是有效参数。
大家可以测试一下参数完整时和参数不完整时的情况。 其实,经过分析的话能得出的结果那就是只要关键参数wd存在那么就会返回正确的响应,并且响 应的数据是一样的,也就是说在当前的这个URL中,只有wd这个参数是关键的。
3. request URL综上,我们就知道了在url中并不是所有参数都是有效参数,例如百度搜索的url地址,其中只有一个wd参数是有用的,而其他的参数都是可以删除的,那么如何确定那些请求参数有用或者没用呢?
最简单的方法:一个一个的尝试。对应的,在后续的爬虫学习过程中,遇到很多参数的url地址,都可以尝试删除 参数。
总结:参数是以键值对的形式存在的。
通过对url的观察发现,中文的传参并不是那么的友好,中文经过浏览器的解析之后发送给服务器。
风景=%E9%A3%8E%E6%99%AF
4.url转义https://www.baidu.com/s?wd=%E9%A3%8E%E6%99%AF
将url放在浏览器访问,会发现转义部分进行直接请求也是可以的
quote():将明文转为密文
unquote():将密文转为明文
# 类似的url的转义 了解即可 知道有这个东西就可以了
from urllib.parse import quote,unquote
# 明文(看得懂的数据): 风景 固定的关系映射表(固定的格式)
# 密文(看不懂的) 加密的场景....
# 明文转密文
data_ = '风景'
print(quote(data_))
# %E7%BE%8E%E5%A5%B3
# 密文转为明文
print(unquote('%E9%A3%8E%E6%99%AF'))
# 风景
下载本页面
import requests
# 1. 确定目标url
url = "https://www.baidu.com/s?wd=%E9%A3%8E%E6%99%AF"
# 1.1 使用用户代理
header_ = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36", }
# 2.发送请求,获取响应对象
response = requests.get(url, headers=header_)
# 获取字节类型数据
bytes_data = response.content
# 解码 进行字节转换为字符串
str_data = bytes_data.decode()
# 3.保存到本地
with open('baidu_风景.html', 'w', encoding='utf-8') as f:
f.write(str_data)
不带cookie,出现了百度安全验证,被识别出来了是一个爬虫
import requests
# 1. 确定目标url
url = "https://www.baidu.com/s?wd=%E9%A3%8E%E6%99%AF"
# 1.1 使用用户代理
header_ = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36",
# Cookie:前后端的会话记录
"Cookie": "BAIDUID=48348A43C350B83863CB8463819C68D5:FG=1; PSTM=1626964492; BIDUPSID=AD35169F5464900C8C61323FD91243A1; BD_UPN=12314753; BDORZ=FFFB88E999055A3F8A630C64834BD6D0"
}
# 2.发送请求,获取响应对象
response = requests.get(url, headers=header_)
# 获取字节类型数据
bytes_data = response.content
# 解码 进行字节转换为字符串
str_data = bytes_data.decode()
# 3.保存到本地
with open('baidu_风景.html', 'w', encoding='utf-8') as f:
f.write(str_data)
对比搜索框和wd,我们发现搜索框是什么值,wd后面就是什么值
🏆二、发送带参数的请求那么,我们是否可以通过改变wd的值来修改搜索框的值来进行一个动态的下载,那么百度里面在搜索框输入,我们的代码输入在哪里呢,是不是就可以在控制台输入也就是input。
1.什么叫做请求参数我们在使用百度搜索的时候经常发现url地址中会有一个 ? ,那么该问号后面的就是请求参数,又叫做查询字符串或查询参数。
例1:http://www.webkaka.com/tutorial/server/2015/021013/
例2:https://www.baidu.com/s?wd=python&a=c
2.请求参数的形式:字典例1中没有请求参数!例2中?后边的就是请求参数
3.请求参数的用法kw = {‘wd’:‘风景’}
4.两种方式:发送带参数的请求requests.get(url,params=kw)
- 对 https://www.baidu.com/s?wd=python 发起请求可以使用 requests.get(url, params=kw) 的方式
模拟浏览器上搜索
1.浏览器上面是输入要搜索的内容,那么我们现在用代码模拟在哪输入呢 input
2.确定目标的url
3.发送网络请求
4.保存数据
""" url传参第一种, 发送请求的时候再进行传参携带, 而不是直接放在url里面 """
import requests
# 程序入口
if __name__ == '__main__':
# 手动输入获取关键字
input_wd = input("请输入你想搜索的关键字:")
# 1.确认目标的url
url = 'https://www.baidu.com/s?'
# 1.1 使用用户代理 Cookie:前后端的会话记录
header_ = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36",
"cookie": "BAIDUID=48348A43C350B83863CB8463819C68D5:FG=1; PSTM=1626964492; BIDUPSID=AD35169F5464900C8C61323FD91243A1; BD_UPN=12314753; BDORZ=FFFB88E999055A3F8A630C64834BD6D0"
}
# 设置字典,用来url携带参数
params = {
'wd': input_wd
}
# 2.发送网络请求,获取响应对象 指定参数params
response = requests.get(url, headers=headers, params=params)
bytes_data = response.content
str_data = bytes_data.decode()
# 3.保存到本地
with open(f'baidu_{input_wd}.html', 'w', encoding='utf-8') as f:
f.write(str_data)
- 也可以直接对 https://www.baidu.com/s?wd={变量} 完整的url直接发送请求,不使用params参 数
import requests
""" url 传参 爬虫演示 第二种 携带参数直接放在url里面 """
# 程序入口
if __name__ == '__main__':
# 手动输入获取关键字
input_wd = input("请输入你想搜索的关键字:")
# 1.确认目标的url
url = f"https://www.baidu.com/s?&wd={input_wd}"
# 1.1 添加用户代理User-Agent伪造身份
header_ = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36",
}
# 2.发送网络请求,获取响应对象
response = requests.get(url, headers=headers)
# 2.1 提取出里面的文本数据
bytes_data = response.content
str_data = bytes_data.decode() # 设置的是默认的utf-8
# 3.保存到本地
with open(f'baidu_{input_wd}.html', 'w', encoding='utf-8') as f:
f.write(str_data)
🏆三、案例
1.网易云单张图片下载
2.网易云非VIP歌曲下载
3.网易云单首MV下载
4.QQ音乐抽离音频
5.附录
ffmpeg下载地址:http://www.ffmpeg.org/download.html
ffmpeg -i 被抽离的文件.mp4-vn -y -acodec copy
抽离后的文件.m4a -loglevel quiet
回顾:
requests模块
- 发起get请求- 通过requests.get()
- 发起post请求 - 通过requests.post()
headers:可以用于伪装爬虫,添加浏览器信息->User-Agent注意首字母要大写
proxy->代理IP的使用
timeout->请求时长,如果超出了请求时长,则返回请求失败的错误信息response:text->获取文本数据 content:获取字节类型的数据,二进制数据 status_code:获取服务器返回的状态码 cookies:获取服务器为我们设置的cookie信息 json:获取服务器返回的json类型的数据
网易云案例需求:
爬取华语、欧美、民谣三个类别的歌单
新的请求抓到的包一般情况会出现在抓包工具栏的最下方
# https://music.163.com/discover/playlist/?cat=%E6%B0%91%E8%B0%A3
# https://music.163.com/#/discover/playlist/?cat=%s
🏆总结
案例有需要的可以私我获取哦 🥰🥰🥰本文到这里就结束啦👍👍👍,如果有帮到你欢迎给个三连支持一下哦❤️ ❤️ ❤️
文章中有哪些不足需要修改的地方欢迎指正啦!!!让我们一起加油👏👏👏
⭕⭕⭕最最最后还是要提示一下啦!!!!!🔺🔺🔺
提示:做爬虫一定要**注意**如果涉及到私人信息或者公司单位的机密信息就不要去碰,爬虫开发过程中意外拿到了用户私人信息或者公司机密,千万不要交易!!!!掌握好爬虫的度就没有任何问题!!!!!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)