【python】爬虫系列Day03--url传参

【python】爬虫系列Day03--url传参,第1张

🙋作者:爱编程的小贤
⛳知识点: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骨架

我们在网址栏输入的url,一般情况下都是网页主框架的url,当浏览器拿到了该主框架的url的响应response以及接受到了这个html文件的代码之后就会呈现出来,同时图片也是url,浏览器会拿着这个url去请求这个图片,在拿到具体的响应之后就将图片显示出来,最终组成了一个完整的 页面给我们查看。

2.url路径分析


从上方我们可以看到,当我们将url路径中的参数删除掉一些只剩下wd参数之后仍然可以得到服务器给我们的响应,那么也就是说,url中并不是所有的参数都是有效参数。

大家可以测试一下参数完整时和参数不完整时的情况。 其实,经过分析的话能得出的结果那就是只要关键参数wd存在那么就会返回正确的响应,并且响 应的数据是一样的,也就是说在当前的这个URL中,只有wd这个参数是关键的。

综上,我们就知道了在url中并不是所有参数都是有效参数,例如百度搜索的url地址,其中只有一个wd参数是有用的,而其他的参数都是可以删除的,那么如何确定那些请求参数有用或者没用呢?
最简单的方法:一个一个的尝试。对应的,在后续的爬虫学习过程中,遇到很多参数的url地址,都可以尝试删除 参数。
总结:参数是以键值对的形式存在的。

3. request URL

通过对url的观察发现,中文的传参并不是那么的友好,中文经过浏览器的解析之后发送给服务器。
风景=%E9%A3%8E%E6%99%AF

https://www.baidu.com/s?wd=%E9%A3%8E%E6%99%AF
将url放在浏览器访问,会发现转义部分进行直接请求也是可以的

4.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。

🏆二、发送带参数的请求

我们在使用百度搜索的时候经常发现url地址中会有一个 ? ,那么该问号后面的就是请求参数,又叫做查询字符串或查询参数。

1.什么叫做请求参数

例1:http://www.webkaka.com/tutorial/server/2015/021013/
例2:https://www.baidu.com/s?wd=python&a=c

例1中没有请求参数!例2中?后边的就是请求参数

2.请求参数的形式:字典

kw = {‘wd’:‘风景’}

3.请求参数的用法

requests.get(url,params=kw)

4.两种方式:发送带参数的请求
  1. 对 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)
  1. 也可以直接对 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


🏆总结

案例有需要的可以私我获取哦 🥰🥰🥰本文到这里就结束啦👍👍👍,如果有帮到你欢迎给个三连支持一下哦❤️ ❤️ ❤️
文章中有哪些不足需要修改的地方欢迎指正啦!!!让我们一起加油👏👏👏

⭕⭕⭕最最最后还是要提示一下啦!!!!!🔺🔺🔺

提示:做爬虫一定要**注意**如果涉及到私人信息或者公司单位的机密信息就不要去碰,爬虫开发过程中意外拿到了用户私人信息或者公司机密,千万不要交易!!!!掌握好爬虫的度就没有任何问题!!!!!!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1295132.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存