【问题标题】:Python-Can't Pull JSON Format from JSON SourcePython-Can't Pull JSON Format from JSON Source
【发布时间】:2016-03-31 23:01:37
【问题描述】:

我正在尝试从 Verizon 的回购定价网站抓取数据。我在浏览器中通过“网络”请求时找到了信息的来源。该网站是 JSON 格式,但我不会下载该数据https://www.verizonwireless.com/vzw/browse/tradein/ajax/deviceSearch.jsp?act=models&car=Verizon&man=Apple&siz=large

我不记得我尝试过的所有内容,但这是我遇到的问题。另外,我不确定如何插入多个代码块。

import json,urllib,requests
res=urllib.request.urlopen(url)
data=json.loads(res)
TypeError: the JSON object must be str, not 'bytes'

import codecs
reader=codecs.getreader('utf-8')
obj=json.load(reader(res))
ValueError: Expecting value: line 1 column 1 (char 0)
#this value error happens with other similar attempts, such as....
res=requests.get(url)
res.json()#Same error Occurs

在这一点上,我已经研究了很多小时,但找不到解决方案。我假设该网站的格式不正常,或者我遗漏了一些明显的东西。我在我的 Web 开发人员工具中看到了 JSON 请求/结构。

有人对此有任何想法或解决方案吗?如果您有任何问题,请告诉我。

【问题讨论】:

  • 这是因为 Verizon 正在发回一个 HTML 页面,其中包含隐藏在 HTML 标签中的 JSON 外观的内容,而不是 JSON 格式的字符串(.json() 将其作为输入)。 This answer 应该可以帮到你。

标签: python json web-scraping python-requests


【解决方案1】:

您需要发送一个User-Agent HTTP 标头字段。试试这个程序:

import requests

url='https://www.verizonwireless.com/vzw/browse/tradein/ajax/deviceSearch.jsp?act=models&car=Verizon&man=Apple&siz=large'
# Put your own contact info in next line
headers = {'User-agent':'MyBot/0.1 (+user@example.com)'}
r = requests.get(url, headers=headers)
print(r.json()['models'][0]['name'])

结果:

iPhone 6S

【讨论】:

    猜你喜欢
    • 2020-12-31
    • 2017-02-10
    • 1970-01-01
    • 2022-08-20
    • 2019-01-14
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2022-12-27
    相关资源
    最近更新 更多