鱼C论坛

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

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

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

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

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

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

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

发现ajax数据包

找到数据包

找到数据包

数据包基本信息

请求信息

请求信息

数据包是 json 格式

发现json格式

发现json格式

请求 post 附加 data 数据

附带的data数据

附带的data数据

确定 json 数据

json包

json包


从而写下代码:
import requests


if __name__ == '__main__':
        # name = input('请输入需下载音乐名称:')
        station = ['netease', 'kugou']
        download_by = station[1]
        url = 'http://www.eggvod.cn/music'
        data = {
                'input': '云烟成雨',
                'filter': 'name',
                'type': download_by,
                'page': '2',                                # 每页10个数据
        }
        headers = {
                "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"
        }
        re_json = requests.post(url=url, headers=headers, data=data).text
        print(re_json)

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

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


if __name__ == '__main__':
    url = 'http://www.eggvod.cn/music/'
    station = ['netease', 'kugou']
    download_by = station[1]
    data = {
        'input': '云烟成雨',
        'filter': 'name',
        'type': download_by,
        'page': '1'                               # 每页10个数据
    }
    params = {'input': '云烟成雨', 'type': download_by}
    headers = {
        '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',
        'X-requested-with': 'XMLHttpRequest'
    }
    # header得加 x头,看了实际url从data里抽了2个参数。
    r = requests.post(url=url, headers=headers, data=data, params=params)
    print(r.json())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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


if __name__ == '__main__':
    url = 'http://www.eggvod.cn/music/'
    station = ['netease', 'kugou']
    download_by = station[1]
    data = {
        'input': '云烟成雨',
        'filter': 'name',
        'type': download_by,
        'page': '1'                               # 每页10个数据
    }
    params = {'input': '云烟成雨', 'type': download_by}
    headers = {
        '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',
        'X-requested-with': 'XMLHttpRequest'
    }
    # header得加 x头,看了实际url从data里抽了2个参数。
    r = requests.post(url=url, headers=headers, data=data, params=params)
    print(r.json())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

1.png
2.png
3.png

是因为 content-type:一个是 application/json;  一个是 text/json        中        text 有第二种选择吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

x头不是必须的,看网站。有的不加也能拿到,和数据类型无关。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢了
^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-12 20:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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