带参数请求数据以及Requests Headers(5)

什么是带参数请求数据?

URL的组成
完整url都由两部分组成:“前半部分?后半部分”
前半部分大多形如:https://xx.xx.xxx/xxx/xxx。是我们所请求的地址。它告诉服务器,我想访问这里。
后半部分多形如:xx=xx&xx=xxx&xxxxx=xx&……。是我们的请求所附带的参数。它会告诉服务器,我们想要什么样的数据。参数的结构,会和字典很像,有键有值。键值用=连接;每组键值之间,使用&来连接。
前半部分和后半部分使用“?”来连接。

举例:
https://www.douban.com/search?q=%E6%B5%B7%E8%BE%B9%E7%9A%84%E5%8D%A1%E5%A4%AB%E5%8D%A1

在Network下查找参数数据
1、 打开Network,选中All,点击刷新。第0个请求一般都会是html。我们点开第0个请求来看看(看Preview或Response都可以),看里面有没有我们想要的信息。
2、 没有。转去看XHR
3、 常规来说有两种方法来寻找XHR:阅读它们的name看看哪个可能是;或者是一个一个翻。还有一种更好的方法是先把Network面板清空,再点击一下要找栏目的“点击加载更多”,看看有没有多出来的新XHR,多出来的那一个,就应该是和要找的内容相关的啦。

5-1.png

4、回到上面我们找到XHR的地方,选中Headers,保持General打开,保持Response Headers和Request Headers关闭。点开Query String Parametres,它的中文翻译是:查询字符串参数。

如何带参数请求数据

读懂url的各个参数,修改它们,重新发起请求。

读懂参数,有两个重要的方法是“观察”和“比较”
“观察”指的是阅读参数的键与值,尝试理解它的含义。
“比较”指的是比较两个相近的XHR——它们有哪些不同,对应的页面显示内容有什么不同。分别点开它们的Query String Parametres,比较参数之间有什么不同。

举例:
查看一个热点文章(或歌曲等)的评论。很多时候,因为评论太多需要跨过很多页面。通过观察和比较,我们发现它们在参数上的变化只是体现在pagenum一个值上。

目标:写一个次数不超过5的循环,每次循环去更改pagenum的值,爬取5个页面上的评论信息。

写法如下:
import requests# 引用requests模块
for i in range(5):
res_comments = requests.get('https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg?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') # 调用get方法,下载评论列表
json_comments = res_comments.json() # 使用json()方法,将response对象,转为列表/字典
list_comments = json_comments['comment']['commentlist'] # 一层一层地取字典,获取评论列表
for comment in list_comments: # list_comments是一个列表,comment是它里面的元素
print(comment['rootcommentcontent']) # 输出评论
print('-----------------------------------') # 将不同的评论分隔开来

params参数

用途:
可以让我们用字典的形式,把参数传进去。

上述代码的更优雅的表达方法:
把Query String Parametres里的内容,直接复制下来,封装为一个字典,传递给params。只是有一点要特别注意:要给他们打引号,让它们变字符串。

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('-----------------------------------')

通过修改URL的参数,获取被隐藏的部分内容

举例:
import requests# 引用requests模块
url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
for x in range(5):
params = {
'ct':'24',
'qqmusic_ver': '1298',
'new_json':'1',
'remoteplace':'sizer.yqq.song_next',
'searchid':'64405487069162918',
't':'0',
'aggr':'1',
'cr':'1',
'catZhida':'1',
'lossless':'0',
'flag_qc':'0',
'p':str(x+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,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') # 查找播放链接

什么是Request Headers

5-2.png

每一个请求都会有一个Requests Headers,叫请求头。它里面会有一些关于该请求的基本信息,比如:这个请求是从什么设备什么浏览器上发出?这个请求是从哪个页面跳转而来?
如上图:
user-agent(中文:用户代理)会记录电脑的信息和浏览器版本。
origin(中文:源头)和referer(中文:引用来源)则记录了这个请求,最初的起源是来自哪个页面。它们的区别是referer会比origin携带的信息更多些。

用途:

反爬。如果想告知服务器,我们不是爬虫是一个正常的浏览器,就要去修改user-agent。倘若不修改,那么这里的默认值就会是Python,会被浏览器认出来。而对于爬取某些特定信息,也要求你注明请求的来源,即origin或referer的内容。如果不注明就有可能拿不到想要的数据,根据情况决定。

如何添加Requests Headers

Requests模块允许修改Headers的值。

添加方法:
只需要封装一个字典就好了。和写params非常相像。

无论是修改user-agent,还是修改origin或referer都一样,一并作为字典写入headers就好。

举例:
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/XXX.XX (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/XXX.XX', # 标记了请求从什么设备,什么浏览器上发出
}# 伪装请求头

params = {
'ct':'24',
'qqmusic_ver': '1298',
'new_json':'1',
'remoteplace':'sizer.yqq.song_next',
'searchid':'64405487069162918',
'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)# 发起请求,填入请求头和参数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,113评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,644评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,340评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,449评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,445评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,166评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,442评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,105评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,601评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,066评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,161评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,792评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,351评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,352评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,584评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,618评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,916评论 2 344

推荐阅读更多精彩内容