Экспорт JSON в CSV с использованием Python - PullRequest
0 голосов
/ 03 марта 2019

Я написал код для извлечения некоторой информации с веб-сайта.вывод в формате JSON, и я хочу экспортировать его в CSV.Итак, я попытался преобразовать его в фрейм данных панд, а затем экспортировать его в CSV в пандах.Я могу напечатать результаты, но все же, он не конвертирует файл в информационный фрейм pandas.Знаете ли вы, в чем проблема с моим кодом?

# -*- coding: utf-8 -*-
# To create http request/session 
import requests
import re, urllib
import pandas as pd
from BeautifulSoup import BeautifulSoup

url = "https://www.indeed.com/jobs? 
q=construction%20manager&l=Houston&start=10"

# create session
s = requests.session()
html = s.get(url).text

# exctract job IDs
job_ids = ','.join(re.findall(r"jobKeysWithInfo\['(.+?)'\]", html))
ajax_url = 'https://www.indeed.com/rpc/jobdescs?jks=' + 
urllib.quote(job_ids)
# do Ajax request and convert the response to json 
ajax_content = s.get(ajax_url).json()
print(ajax_content)
#Convert to pandas dataframe
df = pd.read_json(ajax_content)
#Export to CSV
df.to_csv("c:\\users\\Name\desktop\\newcsv.csv")

Сообщение об ошибке:

Трассировка (последний последний вызов):

Файл "C: \Users \ Mehrdad \ Desktop \ Действительно 06.py ", строка 21, в df = pd.read_json (ajax_content)

Файл" c: \ python27 \ lib \ site-packages \ pandas \ io \ json \ json ".py ", строка 408, в read_json path_or_buf, кодировка = кодировка, сжатие = сжатие,

Файл" c: \ python27 \ lib \ site-packages \ pandas \ io \ common.py ", строка 218,в get_filepath_or_buffer поднять ValueError (msg.format (_type = type (filepath_or_buffer))))

ValueError: Неверный путь к файлу или тип объекта буфера:

1 Ответ

0 голосов
/ 03 марта 2019

Проблема заключалась в том, что когда вы вызывали read_json(), в кадр данных ничего не входило, потому что это был вложенный код JSON:

import requests
import re, urllib
import pandas as pd
from pandas.io.json import json_normalize

url = "https://www.indeed.com/jobs?q=construction%20manager&l=Houston&start=10"

s = requests.session()
html = s.get(url).text

job_ids = ','.join(re.findall(r"jobKeysWithInfo\['(.+?)'\]", html))
ajax_url = 'https://www.indeed.com/rpc/jobdescs?jks=' + urllib.quote(job_ids)

ajax_content= s.get(ajax_url).json()
df = json_normalize(ajax_content).transpose()
df.to_csv('your_output_file.csv')

Обратите внимание, что я вызвал json_normalize() длясвернуть вложенные столбцы из JSON.Я также назвал transpose(), чтобы строки были помечены идентификатором задания, а не столбцами.Это даст вам фрейм данных, который выглядит следующим образом:

0079ccae458b4dcf    <p><b>Company Environment: </b></p><p>Planet F...
0c1ab61fe31a5c62    <p><b>Commercial Construction Project Manager<...
0feac44386ddcf99    <div><div>Trendmaker Homes is currently seekin...
...

Не совсем понятно, каков ваш ожидаемый результат, хотя ... как вы ожидаете, что файл DataFrame / CSV будет выглядеть?Если вы на самом деле искали только одну строку / серию с идентификаторами заданий в качестве меток столбцов, просто удалите вызов transpose()

...