一.通过Query String Parametres查看参数

请你使用浏览器打开QQ音乐官网,搜索周杰伦。然后打开检查面板里的Network,刷新这个页面。当然,你也可以点击这个链接直达:
https://y.qq.com/portal/search.html#page=2&searchid=1&remoteplace=txt.yqq.top&t=song&w=%E5%91%A8%E6%9D%B0%E4%BC%A6

找到隐藏有歌曲列表的那个XHR,它的名字应该叫client_search……之类,点开它,选中Headers,你的页面看上去会像这样:

我们来到一个熟悉的界面,你能看到Request Url,很长的一个地址。现在,保持General打开,保持Response HeadersRequest Headers关闭。我们点开Query String Parametres
它里面的内容,正是请求所附带的参数,Query String Parametres,它的中文翻译是:查询字符串参数。

二.如何带参数请求数据

可以把Query String Parametres里的内容,直接复制下来,封装为一个字典,传递给params。只是有一点要特别注意:要给他们打引号,让它们变字符串。

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')# 查找播放链接

爬虫小技巧 : 先把Network面板清空,再点击一下评论(你要找的)翻页,看看有没有多出来的新XHR,多出来的那一个,就应该是和评论相关的啦。

import requests
# 引用requests模块
url = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg'
commentid = ''
# 设置一个初始commentid
for x 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':'8','needcommentcrit':'0','pagenum':str(x),'pagesize':'25','lasthotcommentid':commentid,'domain':'qq.com','ct':'24','cv':'101010  '}# 将参数封装为字典,其中pagenum和lastcommentid是特殊的变量res_comment = requests.get(url,params=params)# 调用get方法,下载评论列表json_comment = res_comment.json()# 使用json()方法,将response对象,转为列表/字典list_comment = json_comment['comment']['commentlist']# 一层一层地取字典,获取评论列表for comment in list_comment:# list_comment是一个列表,comment是它里面的元素print(comment['rootcommentcontent'])# 输出评论commentid = list_comment[24]['commentid']# 将最后一个评论的id赋值给comment,准备开始下一次循环

三.伪装成真实浏览器

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

如上图,user-agent会记录你电脑的信息和浏览器版本(如我的,就是windows10的64位操作系统,使用谷歌浏览器)。origin和referer则记录了这个请求,最初的起源是来自哪个页面。它们的区别是referer会比origin携带的信息更多些。
如果我们想告知服务器,我们不是爬虫是一个正常的浏览器,就要去修改user-agent。倘若不修改,那么这里的默认值就会是Python,会被浏览器认出来。
有趣的是,像百度的爬虫,它的user-agent就会是Baiduspider,谷歌的也会是Googlebot……如是种种。
而对于爬取某些特定信息,也要求你注明请求的来源,即origin或referer的内容。比如我有试过,在爬取歌曲详情页里的歌词时,就需要注明这个信息,否则会拿不到歌词。你可以在写练习的时候进行尝试。

请求歌曲评论案例 :

import requests
url = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg'
# 这是那个,请求歌曲评论的url
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 = {
'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':'8',
'needcommentcrit':'0',
'pagenum':0,
'pagesize':'25',
'lasthotcommentid':'',
'domain':'qq.com',
'ct':'24',
'cv':'101010  '}res_music = requests.get(url,headers=headers,params=params)
# 发起请求

请求前五页歌曲的歌词 :

import requests
from bs4 import BeautifulSoup
import reurl = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
font = {}
for x in range(5):headers = {'origin': 'https://y.qq.com',# 请求来源,本案例中其实是不需要加这个参数的,只是为了演示'referer': 'https://y.qq.com/portal/search.html',# 请求来源,携带的信息比“origin”更丰富,本案例中其实是不需要加这个参数的,只是为了演示'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'# 标记了请求从什么设备,什么浏览器上发出}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 = requests.get(url,params=params,headers=headers)json_music = res.json()list_song = json_music['data']['song']['list']for oneSong in list_song:MusicID = oneSong['id']MusicName = oneSong['name']MusicMid = oneSong['mid']header = {'origin': 'https://y.qq.com',# 请求来源,本案例中其实是不需要加这个参数的,只是为了演示'referer': 'https://y.qq.com/n/yqq/song/'+ str(MusicMid)+'.html',# 请求来源,携带的信息比“origin”更丰富,本案例中其实是不需要加这个参数的,只是为了演示'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'# 标记了请求从什么设备,什么浏览器上发出}param = {'nobase64': '1','musicid': str(MusicID),'-': 'jsonp1','g_tk': '5381','loginUin': '0','hostUin': '0','format': 'json','inCharset': 'utf8','outCharset': 'utf - 8','notice': '0','platform': 'yqq.json','needNewCode': '0'}songurl = 'https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_yqq.fcg'songRes = requests.get(songurl,headers = header,params=param)songfont = songRes.json()fontstr = re.sub("[A-Za-z0-9\!\%\[\]\,\。#&;]", " ", songfont['lyric'])fontstr1 = ",".join(fontstr.split())font[str(MusicName)] = fontstr1print(font)

爬虫精进(四) ------ 带参请求/伪装成真实浏览器相关推荐

  1. python爬虫基础Ⅱ——Ajax数据爬取、带参请求:QQ音乐歌单、QQ音乐评论

    文章目录 基础爬虫部分Ⅱ Ajax技术 json 1. Network 2. XHR怎么请求? 3. 什么是json? 4. json数据如何解析? 带参数请求 1. 复习 2. params 3. ...

  2. thymeleaf的初次使用(带参请求以及调用带参js方法)

    thymeleaf的初次使用(带参请求以及调用带参js方法) 之前对于前端框架接触较少,第一次接触thymeleaf,虽说看起来并不复杂但我还是花费了好一会儿才弄懂. 话不多少下面就简单说一下我在项目 ...

  3. vue前端实现从数据库获取数据的下拉框以及带参请求

    一.下拉框的实现 <el-form-item><el-select @change="getOptions" v-model="type" p ...

  4. 爬取斗图网图片,使用xpath格式来匹配内容,对请求伪装成浏览器, Referer 防跨域请求...

    6.21自我总结 一.爬取斗图网 1.摘要 使用xpath匹配规则查找对应信息文件将请求伪装成浏览器Referer 防跨域请求 2.爬取代码 #导入模块 import requests#爬取网址 ur ...

  5. Scrapy伪装成随机浏览器

    好多小伙伴在Scrapy伪装成随机浏览器时,学习伪装浏览器但没开启中间件.现在博主利用空闲时间现在出个完整的教程. Scrapy伪装成随机浏览器实现过程如下,需要在middlewares.py代码中添 ...

  6. python伪装浏览器https_Selenium中通过修改User-Agent标识将PhantomJS伪装成Chrome浏览器...

    Python爬虫.GUI开发.渗透测试.机器学习,尽在http://zmister.com/ 在写爬虫的过程中,出于系统环境或是效率的问题,我们经常使用PhantomJS作为Selenium操纵的浏览 ...

  7. 浏览器伪装成linux,Firefox修改UserAgent伪装成手机浏览器

    这里需要修改Firefox的程序配置,记得千万要小心修改,修改以后无法使用浏览器就只能重装Firefox浏览器. 修改方法 1.进入Firefox的配置页面,在浏览器地址栏输入"about: ...

  8. 小程序码带参请求(邀请码)

    #region 生成小程序推荐码/// <summary>/// 微信小程序带参数二维码的生成/// </summary>/// <param name="Pa ...

  9. 数据分析与爬虫实战视频——学习笔记(一)(python基础、urllib、超时设置、自动模拟HTTP请求、异常处理、浏览器伪装、代理服务器、新闻爬虫、淘宝登陆和图片爬取)

    未经允许,请勿转载. 连载未完成状态 网址: [数据挖掘]2019年最新python3 数据分析与爬虫实战_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili ...

最新文章

  1. OpenCV检测图像轮廓
  2. JQuery-UI组件化开发
  3. nrf51822笔记之密码配对过程梳理
  4. 2020-12-4((ARM汇编)mov指令,LDR指令,LDR伪指令)
  5. 太强了!一份来自清华的「数据分析」笔记!
  6. 图神经网络综述:模型与应用
  7. 在html中用js代替${pagecontext.request.getcontextpath}这样就不用使用jsp了
  8. 使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)
  9. 微型计算机中存储器分成哪几个等级?它们各有什么特点?用途如何?,《微机原理》复习思考题第十二章存储器.DOC...
  10. Fiddler Everywhere全平台抓包调试工具安装和使用(一)
  11. DML数据操作语言练习
  12. echarts3 graph java_echarts 3.0 使用自定义图标
  13. python伪装浏览器https_Python3 伪装浏览器的方法示例
  14. autoflowchart软件使用步骤_【AutoFlowChart流程图自动生成软件】|C语言流程图生成工具(AutoFlowchart)下载_v1.0 中文版_9号软件下载...
  15. Python源码保护
  16. 《计算机技术领域当前的主流技术及其社会需求调查报告》
  17. 爆炒猪肚的做法 爆炒猪肚怎样炒才脆
  18. 微计算机应用是核心吗,北大核心哪个杂志好投
  19. data mapping
  20. 网页设计期末作业ppt+源码(免费获取)

热门文章

  1. 我和媳妇儿欠了几万网贷,工资加起来才一万,看不到未来,怎么办?
  2. Nagios钉钉报警配置
  3. 继国产操作系统开放麒麟发布后,又一国产服务器软件发布
  4. harmonyos开发者纪念版,喜马拉雅基于Harmony OS开发者平至今已交付3个软件版本
  5. IDEA画UML类图
  6. IDEA生成UML类图
  7. 基于Python与OpenCV的纸质票自动统计功能的实现(一)界面编程
  8. MiniMax算法实现井字棋
  9. OPPOReno4SE和荣耀v30 哪个好
  10. 【Python专题】 高级特性