首页 新闻 会员 周边 捐助

python 爬虫 关于如何获取网页的json文件

-1
[已解决问题] 解决于 2021-04-03 11:02

中午耍谋音 看见一个老哥花了一年半的时间 将一个 地下水 换到了 流浪者 我以为用曲别针换别墅只是故事而已 没想到啊没想到
所有有了这个帖子因为 咱平常也会玩玩c**g 加上最近在学爬虫 所以突发奇想 能不能做一个程序 自动获取想买的饰品的价格
按照平常的来说 直接获取网页源码 然后找到价格 输出就好
但是发现 这个网站的数据是动态加载的 所以就想到了ajax 找了找 果然在一个json文件中找到了物品的价格 接着遇到一个问题就是 弄不下来 内个json文件
是我代码写的不对吗?还是怎么回事,请大佬们帮帮忙
这是获取json的代码
head = {
'user_agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36Mozilla/5.0 (Windows
NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/88.0.4324.150 Safari/537.36'
}
url = 'https://buff.163.com/api/market/goods/sell_order?
game=csgo&goods_id=769258&page_num=1&sort_by=price.asc&mode=&allow_tradable_cooldown=1&min_paintwear=0.15&max_paintwear=0.18&_=1617168547790'

        page = '769258'
        data = {
            'game': 'csgo',
            'goods_id': page,
            'page_num': '1',
            'sort_by': 'price.asc',
            'mode':'',
            'allow_tradable_cooldown': '1',
            'min_paintwear': '0.15',
            'max_paintwear':  '0.18',
            '_': '1617168547790'
        }
        json = requests.get(url=url, headers=head, data=data).json()
        with open('./json.txt', 'w') as f:
            f.write(json)
木三136的主页 木三136 | 初学一级 | 园豆:159
提问于:2021-03-31 14:11

老哥们,频率别太快啊,封了给

木三136 3年前
< >
分享
最佳答案
0

找那种不要登录的爬,或者说 他在你本地放了cookie?

奖励园豆:5
echo_lovely | 小虾三级 |园豆:1584 | 2021-03-31 14:17

首先感谢您的回答,请问不需要登陆的和需要登录的有什么区别的吗?

木三136 | 园豆:159 (初学一级) | 2021-03-31 14:19

@木三136: 有没有那种情况,没有登录或者没有读到本地cookie的,直接返回 非法请求

echo_lovely | 园豆:1584 (小虾三级) | 2021-03-31 14:26

@小草上飞飞: 您说的有道理 我试试登录之后

木三136 | 园豆:159 (初学一级) | 2021-03-31 14:34

@木三136: 你可以直接用浏览器去请求这个json的url,看返回结果是什么

echo_lovely | 园豆:1584 (小虾三级) | 2021-03-31 14:35

@小草上飞飞: 直接就是json文件的内容了,然后我加上了登录部分,返回了
{"code": "Login Required", "extra": null, "error": "\u8bf7\u5148\u767b\u5f55"}
这些

木三136 | 园豆:159 (初学一级) | 2021-03-31 14:36

忘了说了,就是网站是 get 请求 而不是post请求![]

木三136 | 园豆:159 (初学一级) | 2021-03-31 14:39

@小草上飞飞: 您说得对,的确是cookies的问题,但是我明明是在登录后又访问了一次,但是还是没有正确的返回,我手动添加了一下cookies,结果返回了正确的json,十分感谢

木三136 | 园豆:159 (初学一级) | 2021-03-31 14:47
其他回答(2)
0

紧接着有了一个新的问题,请问有没有什么办法获得 Headers 中 cookies的值呢

木三136 | 园豆:159 (初学一级) | 2021-03-31 14:54

你直接把headers里面复制进去,也可以用requests.session,每次可以获取新的cookies

支持(0) 反对(0) Python从入门到大神 | 园豆:202 (菜鸟二级) | 2021-03-31 15:56

@Python从入门到大神: 对,我目前hi打算手动复制的,另外向像是您说的,查到了可以用requests.session,但是应该怎么用呢,我直接对网址访问的话,需要登录,登录后,出了一点问题
先看代码:
session = requests.session()
response = session.post(url='https://buff.163.com/market/goods?goods_id=769258&from=market#tab=selling&min_paintwear=0.15&max_paintwear=0.18&page_num=1&sort_by=price.asc', headers=head)
page = '769258'
data = {
'game': 'csgo',
'goods_id': page,
'page_num': '1',
'sort_by': 'price.asc',
'mode': '',
'allow_tradable_cooldown': '1',
'min_paintwear': '0.15',
'max_paintwear': '0.18',
'': '1617168547790'
}
response = session.get(url=url, data=data, headers=head).json()session = requests.session()
response = session.post(url='https://buff.163.com/market/goods?goods_id=769258&from=market#tab=selling&min_paintwear=0.15&max_paintwear=0.18&page_num=1&sort_by=price.asc', headers=head)
page = '769258'
data = {
'game': 'csgo',
'goods_id': page,
'page_num': '1',
'sort_by': 'price.asc',
'mode': '',
'allow_tradable_cooldown': '1',
'min_paintwear': '0.15',
'max_paintwear': '0.18',
'
': '1617168547790'
}
response = session.get(url=url, data=data, headers=head).json()
请看图片

支持(0) 反对(0) 木三136 | 园豆:159 (初学一级) | 2021-03-31 16:22
0

先把登录处理好吧

ycyzharry | 园豆:25683 (高人七级) | 2021-03-31 21:13

感谢您的回答,登录已经不是问题了

支持(0) 反对(0) 木三136 | 园豆:159 (初学一级) | 2021-03-31 21:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册