爬虫(四):带参数请求数据和request Header
时间:2021-07-13
本文章向大家介绍爬虫(四):带参数请求数据和request Header,主要包括爬虫(四):带参数请求数据和request Header使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
爬取思路:
- 分析网页结构
- 找到/并确定请求的数据接口、url
(url是否是规律的? 是否需要手动的构造? 是否需要携带params参数进行请求) - 分析请求的接口数据格式 HTML json
- 爬虫代码实现
url 组成
url由两部分组成,“?”(有时候是“#”)的前半部分是我们请求的地址,“?”的后半部分是请求所附带的参数。
字符串参数
为了代码的简介和方便阅读,通常会把参数封装成一个字典,添加进请求中去。通过对参数进行修改,我们就能爬到许多信息。
-
Query String Parametres的中文翻译就是:查询字符串参数。这个面板用类似字典的形式,呈现了各个参数的键值。
-
读懂参数,有两个重要的方法是“观察”和“比较”。“观察”指的是阅读参数的键与值,尝试去理解参数的含义。“比较”指的是比较两个相近的XHR,例如选电影的初始页面和点击”加载更多“之后。看看它们的参数有哪些不同。
-
requests模块里的requests.get()提供了一个参数叫params,可以让我们用字典的形式,把参数传进去。
res= requests.get(url, params=param, headers=headers)
Request Headers 请求头
请求头会有一些关于该请求的基本信息
- user-agent(既用户代理)记录的就是我的电脑系统信息和浏览器
- origin和referer则是记录了这个请求的最初来源是哪个页面
与封装params非常类似,只需要将origin或referer一并作为字典写入headers
爬取qq音乐歌词
url = "https://c.y.qq.com/soso/fcgi-bin/client_search_cp"
headers = {
'origin': 'https://y.qq.com',
'referer': 'https://y.qq.com/',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
for x in range(1,4):
params = {
'ct': '24',
'qqmusic_ver': '1298',
'new_json': '1',
'remoteplace': 'txt.yqq.song',
'searchid': '54195112887504902',
't': '0',
'aggr': '1',
'cr': '1',
'catZhida': '1',
'lossless': '0',
'flag_qc': '0',
'p': x,
'n': '10',
'w': '王菲',
'g_tk_new_20200303': '5381',
'g_tk': '5381',
'loginUin': '0',
'hostUin': '0',
'format': 'json',
'inCharset': 'utf8',
'outCharset': 'utf-8',
'notice': '0',
'platform': 'yqq.json',
'needNewCode': '0'
}
res = requests.get(url=url, params=params, headers=headers)
try:
if res.status_code == 200:
music_json = res.json()
# print(music_json)
music_list = music_json['data']['song']['list']
# print(music_list)
for music in music_list:
name = music['name']
print(name)
id = music['mid']
print(id)
# music_url = music['singer']
# print(music_url)
url_music = music['url']
# print(url_music)
url_lyrics = "https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg"
headers_lyrics = {'origin': 'https://y.qq.com',
'referer': 'https://y.qq.com/',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
params_lyrics = {'_': '1626093927027',
'cv': '4747474',
'ct': '24',
'format': 'json',
'inCharset': 'utf-8',
'outCharset': 'utf-8',
'notice': '0',
'platform': 'yqq.json',
'needNewCode': '1',
'uin': '0',
'g_tk_new_20200303': '5381',
'g_tk': '5381',
'loginUin': '0',
'songmid': str(id)} # 观察url的不同
res_lyrics = requests.get(url = url_lyrics,params=params_lyrics,headers = headers_lyrics)
lyrics_json = res_lyrics.json()
lyrics_str = lyrics_json['lyric'] #str类型,是编码过的,需要用bs4解码
lyrics_b = bytes(lyrics_str, encoding = "utf8") #bs4解码需要字节类型,不是字符串类型,需要变成字节类型
lyric = base64.decodebytes(lyrics_b)
print(lyric.decode()) # 解码
else:
print("请求失败")
except Exception as error:
print(error)
原文地址:https://www.cnblogs.com/The-dancing-salted-fish/p/15006893.html
- 警惕IT黑洞
- 这或许是对小白最友好的python入门了吧——17,while循环
- 泛型介绍(接上一篇,具体的事例随后呈上)
- PHP高级编程之守护进程
- 看到他我一下子就悟了-- 泛型(2)
- ExtJS4中设置tabpanel的tab高度问题
- Oracle写错误与文件离线
- 看到他我一下子就悟了-- 泛型(1)
- EXTJS4 Grid Filter 插件的使用 与后台数据解析------Extjs 查询筛选功能的实现
- [Java]读取文件方法大全
- WPF Application 类介绍以及怎样修改启动方式
- C#基础知识回顾-- 反射(4)
- C#基础知识回顾-- 反射(3)
- 微信图文消息添加音乐一招搞定 只需修改背景音乐地址
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法