params, 可以让我们带着参数来请求数据:我想要第几页?我想要搜索的关键词?我想要多少个数据?
headers, 请求头。它告诉服务器,我的设备/浏览器是什么?我从哪个页面而来?

带参数请求,实现抓取多条链接

  • 和抓取单条URL不同,参数统一封装在params里
  • params是一个字典,添加进请求中去
  • 通过对params进行修改,我们能爬到许多信息

url = 'https://www.douban.com/search?q=%E6%B5%B7%E8%BE%B9%E7%9A%84%E5%8D%A1%E5%A4%AB%E5%8D%A1'
url = 'https://y.qq.com/n/ryqq/search?searchid=1&remoteplace=txt.yqq.top&w=%E5%91%A8%E6%9D%B0%E4%BC%A6&t=song'
以上两条URL示例,用 ? 或 # 分割:一个url由两部分组成,?(有时候是“#”)之前是我们请求的地址,?之后是我们的请求所附带的参数
注意: 用#分割的可以用?代替;用?分隔的url不一定可以用#代替

前半部分,是我们所请求的地址,它告诉服务器,我想访问这里。
后半部分,是我们的请求所附带的参数,它告诉服务器,我们想要什么样的数据。
参数的结构,会和字典很像,有键有值,键值用=连接;每组键值之间,使用&来连接。

查询字符串参数:XHR–Payload–Query String Parameters

读懂参数,有两个重要的方法是“观察”和“比较”:

  • “观察”指的是阅读参数的键与值,尝试理解它的含义
  • “比较”指的是比较两个相近的XHR——它们有哪些不同,对应的页面显示内容有什么不同

Request Headers

每一个请求,都会有一个Request Headers,我们把它称作请求头。它里面会有一些关于该请求的基本信息,比如:这个请求是从什么设备什么浏览器上发出?这个请求是从哪个页面跳转而来?

user-agent(中文:用户代理)会记录你电脑的信息和浏览器版本

origin(中文:源头)和referer(中文:引用来源)则记录了这个请求,最初的起源是来自哪个页面。它们的区别是referer会比origin携带的信息更多些

它最大的应用是帮助我们应对“反爬虫”技术,将Python爬虫伪装成真正的浏览器,不为服务器所辨识;同时也可以标记这个请求的来源是什么,最终帮助我们拿到想要的信息

headers和params示例笔记

import requests
url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
headers = {'origin':'https://y.qq.com',# 请求来源,本案例中其实是不需要加这个参数的,只是为了演示'referer':'https://y.qq.com/n/yqq/song/004Z8Ihr0JIu5s.html',# 请求来源,携带的信息比“origin”更丰富,本案例中其实是不需要加这个参数的,只是为了演示'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',# 标记了请求从什么设备,什么浏览器上发出}

伪装请求头

params = {'ct':'24',
'qqmusic_ver': '1298',
'new_json':'1',
'remoteplace':'sizer.yqq.song_next',
'searchid':'59091538798969282',
't':'0',
'aggr':'1',
'cr':'1',
'catZhida':'1',
'lossless':'0',
'flag_qc':'0',
'p':'1',
'n':'20',
'w':'周杰伦',
'g_tk':'5381',
'loginUin':'0',
'hostUin':'0',
'format':'json',
'inCharset':'utf8',
'outCharset':'utf-8',
'notice':'0',
'platform':'yqq.json',
'needNewCode':'0'
} # 将参数封装为字典
res_music = requests.get(url,headers=headers,params=params) # 发起请求,填入请求头和参数

翻页爬取QQ音乐中更多评论

import requests
# 引用requests模块
url = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg'
# 请求歌曲评论的url参数前面的部分
for i in range(5):params = {'g_tk':'5381','loginUin':'0', 'hostUin':'0','format':'json','inCharset':'utf8','outCharset':'GB2312','notice':'0','platform':'yqq.json','needNewCode':'0','cid':'205360772','reqtype':'2','biztype':'1','topid':'102065756','cmd':'6','needmusiccrit':'0','pagenum':str(i),'pagesize':'15','lasthotcommentid':'song_102065756_3202544866_44059185','domain':'qq.com','ct':'24','cv':'10101010'   }# 将参数封装为字典res_comments = requests.get(url,params=params)# 调用get方法,下载这个字典json_comments = res_comments.json()list_comments = json_comments['comment']['commentlist']for comment in list_comments:print(comment['rootcommentcontent'])print('-----------------------------------')

抓取QQ音乐中周杰伦前五页歌曲的歌词

import requests
import json
# 引用requests,json模块
url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
headers = {'referer':'https://y.qq.com/portal/search.html',# 请求来源'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'# 标记了请求从什么设备,什么浏览器上发出}
for x in range(5):params = {'ct':'24','qqmusic_ver': '1298','new_json':'1','remoteplace':'sizer.yqq.lyric_next','searchid':'94267071827046963','aggr':'1','cr':'1','catZhida':'1','lossless':'0','sem':'1','t':'7','p':str(x+1),'n':'10','w':'周杰伦','g_tk':'1714057807','loginUin':'0','hostUin':'0','format':'json','inCharset':'utf8','outCharset':'utf-8','notice':'0','platform':'yqq.json','needNewCode':'0'  }res = requests.get(url, params = params)#下载该网页,赋值给resjsonres = json.loads(res.text)#使用json来解析res.textlist_lyric = jsonres['data']['lyric']['list']#一层一层地取字典,获取歌词的列表for lyric in list_lyric:#lyric是一个列表,x是它里面的元素print(lyric['content'])#以content为键,查找歌词

抓取QQ音乐中任意歌手的歌曲信息

import requests
url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
singer = input('你喜欢的歌手是谁呢?')
for x in range(6):params = {'ct':'24','qqmusic_ver': '1298','new_json':'1','remoteplace':'txt.yqq.song','searchid':'70717568573156220','t':'0','aggr':'1','cr':'1','catZhida':'1','lossless':'0','flag_qc':'0','p':str(x+1),'n':'20','w':singer,'g_tk':'714057807','loginUin':'0','hostUin':'0','format':'json','inCharset':'utf8','outCharset':'utf-8','notice':'0','platform':'yqq.json','needNewCode':'0'    }# 将参数封装为字典res_music = requests.get(url,params=params)# 调用get方法,下载这个列表json_music = res_music.json()# 使用json()方法,将response对象,转为列表/字典list_music = json_music['data']['song']['list']# 一层一层地取字典,获取歌单列表for music in list_music:# list_music是一个列表,music是它里面的元素print(music['name'])# 以name为键,查找歌曲名print('所属专辑:'+music['album']['name'])# 查找专辑名print('播放时长:'+str(music['interval'])+'秒')# 查找播放时长print('播放链接:https://y.qq.com/n/yqq/song/'+music['mid']+'.html\n\n')# 查找播放链接

【Python自查手册】之带参数请求params的用法相关推荐

  1. 【Python自查手册】之存储文件csvopenpyxl模块的用法

    openpyxl import openpyxl # 写入的代码: wb = openpyxl.Workbook() # 利用openpyxl.Workbook()函数创建新的workbook(工作簿 ...

  2. python get方法列表参数_python中requests库get方法带参数请求

    起因是想爬五等分的花嫁的漫画.这是其中的一个坑 先上代码 data={ 'cid':567464, 'page':, 'key':'', 'language':1, 'gtk':6, '_cid':5 ...

  3. Python—爬虫之Network,XHR,json 带参数请求数据(爬取歌单、歌词)

    Python-爬虫之Network,XHR,json & 带参数请求数据(爬取歌单.歌词) Network是什么,能做什么 XHR要如何请求 json格式的转换 带参数请求数据 修改请求头,便 ...

  4. python get方法请求参数_python中requests库get方法带参数请求

    起因是想爬五等分的花嫁的漫画.这是其中的一个坑 先上代码 data={'cid':567464,'page':1,'key':'','language':1,'gtk':6,'_cid':567464 ...

  5. 章节六:带参数请求数据

    章节六:带参数请求数据 目录 章节六:带参数请求数据 1. 复习 2. 项目:狂热粉丝 3. 分析过程 3.1 什么是带参数请求数据 3.2 如何带参数请求数据 4. 代码实现 5. 被隐藏的歌曲清单 ...

  6. python 装饰器 参数-python函数装饰器之带参数的函数和带参数的装饰器用法示例...

    本文实例讲述了python函数装饰器之带参数的函数和带参数的装饰器用法.分享给大家供大家参考,具体如下: 1. 函数带多个参数 # 普通的装饰器, 打印函数的运行时间 def decrator(fun ...

  7. python装饰器函数-python函数装饰器之带参数的函数和带参数的装饰器用法示例

    本文实例讲述了python函数装饰器之带参数的函数和带参数的装饰器用法.分享给大家供大家参考,具体如下: 1. 函数带多个参数 # 普通的装饰器, 打印函数的运行时间 def decrator(fun ...

  8. python装饰器模式带参数_python 装饰器模式 我的理解

    python和javascript类似, 可以把函数当作函数的返回值, 比如 def func(f): def subfunc(): print 'subfunc' return subfunc此外f ...

  9. python装饰器模式带参数_Python装饰器使用实例:验证参数合法性 请教Python 使用装饰器实现单例模式的原理...

    python中一层装饰器的函数可以带参数吗 可以的, 装饰器分为可带参数和不可带参数的两种:但是如果带参数,则带参数装饰器的"参数"及"return"必须也是一 ...

最新文章

  1. pip install失败报错解决方案
  2. eclipse中代码没错但项目名称有个小红X
  3. Win2003 安全设置大全
  4. React里所有已经加载的module列表
  5. MySQL JDBC URL各参数详解
  6. 国内手机产业混乱:产业一窝蜂 企业捞快钱
  7. java timer schedule_java怎么再次设置Timer的schedule???
  8. 【nginx】nginx 高可用集群
  9. 试验IFTTT同步发微博
  10. [转载] python oct_Python oct()
  11. 玩转oracle视频教程(四)百度云
  12. 图像直方图规定化(Specification)数学原理和纯C语言实现
  13. 计算机设备运行频率单位,计算机常见计量单位解析
  14. Spark性能优化之-数据倾斜
  15. 【蓝桥杯】——七段数码管的运用
  16. qt错误:常量中有换行符
  17. 使用Hexo构架个人网站
  18. u盘启动工具哪个好用
  19. 大学生综合测评系统(C++)
  20. 欧姆龙PLC CP1E如何实现远程上下载和编程调试?

热门文章

  1. 游戏设计自学记录(1)
  2. 诺基亚手机的使用口令
  3. 我的世界linux联机游戏,MineCraft 我的世界 – PC 端联机服务器搭建 ( Linux )
  4. 超全在线客服网页特效素材网站整理
  5. R语言-词云(个性化绘制)
  6. wowpve服务器优势,魔兽世界怀旧服:联盟在PVE中并没有优势,部落才是PVE优势的阵营...
  7. Linux内核配置和编译
  8. 机器人 陆梅东_第十一届全国青少年机器人大赛获奖名单9
  9. mysql数据库中 索引的作用是什么意思_什么是数据库索引,索引有什么作用
  10. sysbench mysql测试_用sysbench测试mysql和服务器性能