Glassdoor API не печатает пользовательский ответ

#python #json #api

#python #json #API

Вопрос:

При попытке распечатать что-либо из этого API у меня возникает следующая проблема. Я пытаюсь настроить его так, чтобы я мог получать доступ к разным заголовкам, а затем печатать из него определенные элементы. Но вместо этого, когда я пытаюсь распечатать soup, он выдает мне весь ответ api в формате json.

 import requests, json, urlparse, urllib2
from BeautifulSoup import BeautifulSoup   

url = "apiofsomesort"                

#Create Dict based on JSON response; request the URL and parse the JSON
#response = requests.get(url)
#response.raise_for_status() # raise exception if invalid response
hdr = {'User-Agent': 'Mozilla/5.0'}
req = urllib2.Request(url,headers=hdr)
response = urllib2.urlopen(req)
soup = BeautifulSoup(response)

print soup
  

При печати он выглядит следующим образом:

 {
  "success": true,
  "status": "OK",
  "jsessionid": "0541E6136E5A2D5B2A1DF1F0BFF66D03",
  "response": {
    "attributionURL": "http://www.glassdoor.com/Reviews/airbnb-reviews-SRCH_KE0,6.htm",
    "currentPageNumber": 1,
    "totalNumberOfPages": 1,
    "totalRecordCount": 1,
    "employers": [{
      "id": 391850,
      "name": "Airbnb",
      "website": "www.airbnb.com",
      "isEEP": true,
      "exactMatch": true,
      "industry": "Hotels, Motels, amp;amp; Resorts",
      "numberOfRatings": 416,
      "squareLogo": "https://media.glassdoor.com/sqll/391850/airbnb-squarelogo-1459271200583.png",
      "overallRating": 4.3,
      "ratingDescription": "Very Satisfied",
      "cultureAndValuesRating": "4.4",
      "seniorLeadershipRating": "4.0",
      "compensationAndBenefitsRating": "4.3",
      "careerOpportunitiesRating": "4.1",
      "workLifeBalanceRating": "3.9",
      "recommendToFriendRating": "0.9",
      "sectorId": 10025,
      "sectorName": "Travel amp;amp; Tourism",
      "industryId": 200140,
      "industryName": "Hotels, Motels, amp;amp; Resorts",
      "featuredReview": {
        "attributionURL": "http://www.glassdoor.com/Reviews/Employee-Review-Airbnb-RVW12111314.htm",
        "id": 12111314,
        "currentJob": false,
        "reviewDateTime": "2016-09-28 16:44:00.083",
        "jobTitle": "Employee",
        "location": "",
        "headline": "An amazing place to work!",
        "pros": "Wonderful people and great culture. Airbnb really strives to make you feel at home as an employee, and everyone is genuinely excited about the company mission.",
        "cons": "The limitations of Rails 3 and the company infrastructure make developing difficult sometimes.",
        "overall": 5,
        "overallNumeric": 5
      },
      "ceo": {
        "name": "Brian Chesky",
        "title": "CEO amp;amp; Co-Founder",
        "numberOfRatings": 306,
        "pctApprove": 95,
        "pctDisapprove": 5,
        "image": {
          "src": "https://media.glassdoor.com/people/sqll/391850/airbnb-brian-chesky.png",
          "height": 200,
          "width": 200
        }
      }
    }]
  }
}
  

Я хочу распечатать конкретные элементы, такие как «работодатели»: имя, отрасль и т. Д…

Ответ №1:

Вы можете загрузить ответ JSON в dict, а затем искать нужные значения, как и в любом другом dict.

Я взял ваши данные и сохранил их во внешнем файле JSON для выполнения теста, поскольку у меня нет доступа к API. Это сработало для меня.

 import json

# Load JSON from external file
with open (r'C:Tempjsondata.json') as json_file:
  data = json.load(json_file)

# Print the values
print 'Name:', data['response']['employers'][0]['name']
print 'Industry:', data['response']['employers'][0]['industry']
  

Поскольку вы получаете свои данные из API, что-то вроде этого должно работать.

 import json
import urlib2

url = "apiofsomesort"                

# Load JSON from API
hdr = {'User-Agent': 'Mozilla/5.0'}
req = urllib2.Request(url, headers=hdr)
response = urllib2.urlopen(req)
data = json.load(response.read())

# Print the values
print 'Name:', data['response']['employers'][0]['name']
print 'Industry:', data['response']['employers'][0]['industry']
  

Комментарии:

1. Проблема в том, что для json. загрузка вы должны передать файлоподобный объект с функцией чтения, определенной json.loads(response.read())

Ответ №2:

 import json, urlib2

url = "http..."

hdr = {'User-Agent': 'Mozilla/5.0'}
req = urllib2.Request(url, headers=hdr)
response = urllib2.urlopen(req)
data = json.loads(response.read())

# Print the values
print 'numberOfRatings:', data['response']['employers'][0]['numberOfRatings']