鱼C论坛

 找回密码
 立即注册
查看: 2371|回复: 4

[已解决]关于爬虫的一个问题。。。

[复制链接]
发表于 2020-10-9 19:08:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 兰竹皋 于 2020-10-9 19:11 编辑

目的:想做一个直接从懒人全网音乐上下载音乐的爬虫

发现ajax数据包

找到数据包

找到数据包

数据包基本信息

请求信息

请求信息

数据包是 json 格式

发现json格式

发现json格式

请求 post 附加 data 数据

附带的data数据

附带的data数据

确定 json 数据

json包

json包


从而写下代码:

  1. import requests


  2. if __name__ == '__main__':
  3.         # name = input('请输入需下载音乐名称:')
  4.         station = ['netease', 'kugou']
  5.         download_by = station[1]
  6.         url = 'http://www.eggvod.cn/music'
  7.         data = {
  8.                 'input': '云烟成雨',
  9.                 'filter': 'name',
  10.                 'type': download_by,
  11.                 'page': '2',                                # 每页10个数据
  12.         }
  13.         headers = {
  14.                 "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
  15.         }
  16.         re_json = requests.post(url=url, headers=headers, data=data).text
  17.         print(re_json)
复制代码


但得到的 re_json 却不是 json 包内结果,而是原网站代码:
6.png

请问这是为什么?再者,改怎么作才能获得 json 数据包的地址?
谢谢各位。。。^_^
最佳答案
2020-10-9 19:34:01
本帖最后由 suchocolate 于 2020-10-9 19:40 编辑

  1. import requests


  2. if __name__ == '__main__':
  3.     url = 'http://www.eggvod.cn/music/'
  4.     station = ['netease', 'kugou']
  5.     download_by = station[1]
  6.     data = {
  7.         'input': '云烟成雨',
  8.         'filter': 'name',
  9.         'type': download_by,
  10.         'page': '1'                               # 每页10个数据
  11.     }
  12.     params = {'input': '云烟成雨', 'type': download_by}
  13.     headers = {
  14.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
  15.         'X-requested-with': 'XMLHttpRequest'
  16.     }
  17.     # header得加 x头,看了实际url从data里抽了2个参数。
  18.     r = requests.post(url=url, headers=headers, data=data, params=params)
  19.     print(r.json())
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-9 19:34:01 | 显示全部楼层    本楼为最佳答案   
本帖最后由 suchocolate 于 2020-10-9 19:40 编辑

  1. import requests


  2. if __name__ == '__main__':
  3.     url = 'http://www.eggvod.cn/music/'
  4.     station = ['netease', 'kugou']
  5.     download_by = station[1]
  6.     data = {
  7.         'input': '云烟成雨',
  8.         'filter': 'name',
  9.         'type': download_by,
  10.         'page': '1'                               # 每页10个数据
  11.     }
  12.     params = {'input': '云烟成雨', 'type': download_by}
  13.     headers = {
  14.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
  15.         'X-requested-with': 'XMLHttpRequest'
  16.     }
  17.     # header得加 x头,看了实际url从data里抽了2个参数。
  18.     r = requests.post(url=url, headers=headers, data=data, params=params)
  19.     print(r.json())
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-9 20:07:01 | 显示全部楼层

谢谢,单请问下,为什么有些ajax请求不需要加 x头同样可以得到 json结果?

1.png
2.png
3.png

是因为 content-type:一个是 application/json;  一个是 text/json        中        text 有第二种选择吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-9 20:11:49 | 显示全部楼层
兰竹皋 发表于 2020-10-9 20:07
谢谢,单请问下,为什么有些ajax请求不需要加 x头同样可以得到 json结果?

x头不是必须的,看网站。有的不加也能拿到,和数据类型无关。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-9 20:28:04 | 显示全部楼层
suchocolate 发表于 2020-10-9 20:11
x头不是必须的,看网站。有的不加也能拿到,和数据类型无关。

谢谢了
^_^
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-28 03:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表