2016-03-31 24 views
0

Verizon'un geri alım fiyatlandırma sitesinden verileri kazımaya çalışıyorum. Tarayıcımdaki "Net" istekleri boyunca bilgi kaynağını buldum. Site JSON biçimindedir, ancak yaptığım hiçbir şey bu veriyi indirmeme izin verecek https://www.verizonwireless.com/vzw/browse/tradein/ajax/deviceSearch.jsp?act=models&car=Verizon&man=Apple&siz=largePython-JSON Biçimini JSON Biçimini Çekemez Kaynak

Denediğim herşeyi hatırlayamıyorum, ancak şu an sahip olduğum sorunlar. Ayrıca, çoklu kod bloklarını nasıl ekleyeceğimi bilmiyorum.

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 

Bu noktada birçok saat araştırdım ve bir çözüm bulamıyorum. Sitenin normal biçimlendirilmemiş olduğunu veya açık bir şeyi kaçırdığımı varsayarak düşünüyorum. Web geliştirici araçlarındaki JSON isteklerini/yapısını görüyorum.

Bunun için herhangi bir fikri veya çözümü olan var mı? Sorularınız varsa lütfen bize bildirin.

+0

Verizon HTML etiketleri içine gömülü JSON görünümlü şeylerle bir HTML sayfası geri gönderiyor da ondan, 'ne değildir JSON biçimli dize (. json() 'giriş olarak alır). [Bu cevap] (http://stackoverflow.com/questions/13323976/how-to-extract-a-json-object-that-was-defined-in-a-html-page-javascript-block-us) gerekir sana yardım etmek. –

cevap

0

User-Agent HTTP başlık alanı göndermeniz gerekiyor. Bu programı deneyin:

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 ([email protected])'} 
r = requests.get(url, headers=headers) 
print(r.json()['models'][0]['name']) 

Sonuç:

iPhone 6S