狗宁 发表于 2020-8-30 18:36:07

爬虫中json格式问题求助

今天写一个爬虫小程序,碰到的网站返回值是一组json数据,可是怎么都解析不出来。问一下大佬们错在哪里呢?
我的部分代码如下:
response = requests.post(url,headers,data)
result = response.json()
print(response.status_code,'响应成功')
print(result)

报错是这样的:
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

通过抓包工具看返回值确实是一组json数据,头疼。。。。

1q23w31 发表于 2020-8-30 18:36:57

本帖最后由 1q23w31 于 2020-8-30 18:38 编辑

发完整代码看看,这样看只能看出你得到的不是json类型

狗宁 发表于 2020-8-30 18:39:00

1q23w31 发表于 2020-8-30 18:36
发完整代码看看,这样看只能看出你得到的不是json类型

import requests
from lxml import etree
import json

# music_name = input("请输入想要下载的名称:")
url = 'http://www.eggvod.cn/music/'
data = {
'input': '青花瓷',
'filter': 'name',
'type': 'netease',
'page': '1'
}
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36',
}
response = requests.post(url,headers,data)
result = response.json()
print(response.status_code,'响应成功')
print(result)
一个爬第三方音乐下载网站的小爬虫

1q23w31 发表于 2020-8-30 18:41:46

本帖最后由 1q23w31 于 2020-8-30 18:46 编辑

狗宁 发表于 2020-8-30 18:39



经验证,得到的确实不是json,被反爬了,应该是请求头的问题

狗宁 发表于 2020-8-30 18:46:33

可是通过谷歌的工具看确实是json数据,要是被反爬的话 请问一下有什么解决办法吗?

1q23w31 发表于 2020-8-30 19:02:09

狗宁 发表于 2020-8-30 18:46
可是通过谷歌的工具看确实是json数据,要是被反爬的话 请问一下有什么解决办法吗?

import requests
from lxml import etree
import json

# music_name = input("请输入想要下载的名称:")
url = 'http://www.eggvod.cn/music/'
data = {
'input': '青花瓷',
'filter': 'name',
'type': 'netease',
'page': '1'
}
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36',
    'Host': 'www.eggvod.cn',
    'Origin': 'http://www.eggvod.cn',
    'Referer': 'http://www.eggvod.cn/music/?name=%E9%9D%92%E8%8A%B1%E7%93%B7&type=netease',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'X-Requested-With': 'XMLHttpRequest'
}
response = requests.post(url,data,headers=headers)
result = response.json()
print(response.status_code,'响应成功')
print(result)
一个爬第三方音乐下载网站的小爬虫

已改好

狗宁 发表于 2020-8-30 19:22:28

1q23w31 发表于 2020-8-30 19:02
已改好

谢谢大佬

疾风怪盗 发表于 2020-8-30 20:35:09

1q23w31 发表于 2020-8-30 19:02
已改好

为什么改了headers里面这些,就能读取了?

1q23w31 发表于 2020-8-30 20:42:13

疾风怪盗 发表于 2020-8-30 20:35
为什么改了headers里面这些,就能读取了?

网站通过headers中的字段来判断你是否为爬虫,常见的反爬措施

疾风怪盗 发表于 2020-8-30 20:44:26

1q23w31 发表于 2020-8-30 20:42
网站通过headers中的字段来判断你是否为爬虫,常见的反爬措施

所以?多加几个字段?
还是有哪个字段是特殊的?

1q23w31 发表于 2020-8-30 20:52:58

疾风怪盗 发表于 2020-8-30 20:44
所以?多加几个字段?
还是有哪个字段是特殊的?

这个加什么字段,只能尝试,网站规定的,一般来说 refer host x-requests-with origin是常用的,但不排除有其他字段

疾风怪盗 发表于 2020-8-30 21:02:39

1q23w31 发表于 2020-8-30 20:52
这个加什么字段,只能尝试,网站规定的,一般来说 refer host x-requests-with origin是常用的,但不排除 ...

好的,谢谢解答
页: [1]
查看完整版本: 爬虫中json格式问题求助