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

这篇具有很好参考价值的文章主要介绍了【Python自查手册】之带参数请求params的用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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爬虫伪装成真正的浏览器,不为服务器所辨识;同时也可以标记这个请求的来源是什么,最终帮助我们拿到想要的信息文章来源地址https://www.toymoban.com/news/detail-463462.html

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)#下载该网页,赋值给res
    jsonres = json.loads(res.text)#使用json来解析res.text
    list_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的用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue Router不要再使用params传参了,params获取不到参数,官方删除params传参

    之前说过,vue路由传参有两种方式,分别是 query 和 params ;query是明文,params是隐藏的; 今天在使用params的时候发现获取不到参数了 我的写法: 1、 路由配置: 2、跳转: 3、接收: 4、结果: 得到一个警告和空对象 查看链接4.1.4更新日志发现官方做了删除替代,那这样的话

    2024年02月10日
    浏览(75)
  • 有关optimizer.param_groups用法的示例分析

    日期:2022年7月25日 pytorch版本: 1.11.0 对于 param_groups 的探索 optimizer.param_groups : 是一个list,其中的元素为字典; optimizer.param_groups[0] :长度为7的字典,包括[‘ params ’, ‘ lr ’, ‘ betas ’, ‘ eps ’, ‘ weight_decay ’, ‘ amsgrad ’, ‘ maximize ’]这7个参数; 下面用的Adam优化器

    2023年04月15日
    浏览(56)
  • C#out、ref和params参数

    out参数用于传递一个方法的输出值。它表示在方法内部,该参数没有被初始化,而是由方法赋值。方法结束后,该参数会被赋予一个值。 在使用out参数时,调用方法时必须指定该参数,并且不需先进行初始化。 out参数可以在方法内部定义,并且可以定义多个。 ref参数用于在

    2024年02月13日
    浏览(45)
  • axios 传递参数的方式(data 与 params)

    提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 工作案例:在 vue 项目使用 axios 传递参数的方式(data 与 params) 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 工作中,用到的传递

    2024年04月17日
    浏览(30)
  • 使用PyTorch构建神经网络,并计算参数Params

    在深度学习中,模型的参数数量是一个非常重要的指标,通常会影响模型的大小、训练速度和准确度等多个方面。在本教程中,我们将介绍如何计算深度学习模型的参数数量。 本教程将以PyTorch为例,展示如何计算一个包含卷积、池化、归一化和全连接等多种层的卷积神经网

    2024年02月03日
    浏览(42)
  • 神经网络的参数量(Params)和计算量(FLOPs)

    参数量(Params) 参数量是指模型训练中需要训练的参数总数。用来衡量模型的大小(计算空间复杂度)。 计算量(FLOPs) 浮点运算次数,理解为计算量(计算时间复杂度),可以用来衡量算法的复杂度,常用做神经网络模型速度的间接衡量标准(虽然最近已经有文章证明靠FLOPs间接标

    2023年04月16日
    浏览(37)
  • 为什么axios会有params和data两个参数

    不知道大家有没有过这种感觉,突然一个问题百思不得其解,然后突然有一天就明白了。然后就感觉这个问题原来这么简单,本来想记录下来,但是又感觉这么简单的问题记录下来没啥意义。但是回过头来想一想,这个问题之前其实困扰了你很长时间。感觉还是记录一下比较

    2024年02月08日
    浏览(47)
  • Vue Router携带并接收query、params参数方式

    传递参数 【方式一:通过查询字符串直接拼接在路径后面】 【方式二:传递一个对象,路径是path属性,拼接的参数是query属性,推荐】 接收参数 【直接在$route.query中获取】 router/index.js 【需要在router中配置path、name】 传递参数 接收参数 在router/index.js中配置props属性 接收参

    2024年02月13日
    浏览(37)
  • Python 中 key 参数的含义及用法

    哈喽大家好,我是咸鱼 我们在使用 sorted() 或 map() 函数的时候,都会看到里面有一个 key 参数 其实这个 key 参数也存在于其他内置函数中(例如 min() 、 max() 等),那么我们今天就来了解一下 key 参数的含义以及用途吧! 原文:https://www.thepythoncodingstack.com/p/the-key-to-the-key-para

    2024年02月04日
    浏览(37)
  • 【vscode】生成函数参数@param注释 及 自动添加头注释和函数注释

    自动添加头部、函数注释 方法一:输入/**,IDE会自动弹出完整的多行注释demo: 方法二:下载安装koroFileHeader, 一个vscode插件, 用于生成文件头部注释和函数注释的插件,效果如下: 用户设置文件settings.json,输入以下配置: 配置完成保存后, 重启vscode 完成插件环境生成。

    2024年02月13日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包