首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python将JSON导出为CSV

使用Python将JSON导出为CSV
EN

Stack Overflow用户
提问于 2019-03-03 11:25:02
回答 1查看 433关注 0票数 1

我写了一段代码来从网站上提取一些信息。输出是JSON格式的,我想将其导出为CSV。因此,我尝试将其转换为pandas数据帧,然后将其导出为pandas中的CSV。我可以打印结果,但它仍然不能将文件转换为pandas数据帧。你知道我的代码有什么问题吗?

代码语言:javascript
复制
# -*- 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")

错误消息为:

回溯(最近一次调用):

df = pd.read_json(ajax_content)中的文件"C:\Users\Mehrdad\Desktop\Indeed 06.py",第21行

File "c:\python27\lib\site-packages\pandas\io\json\json.py",第408行,在read_json path_or_buf中,encoding=encoding,compression=compression,

File "c:\python27\lib\site-packages\pandas\io\common.py",第218行,在get_filepath_or_buffer raise ValueError(msg.format(_type=type(filepath_or_buffer)))中

ValueError:无效的文件路径或缓冲区对象类型:

EN

回答 1

Stack Overflow用户

发布于 2019-03-03 12:59:27

问题是,当您调用read_json()时,数据帧中没有任何内容,因为它是一个嵌套的JSON字典:

代码语言:javascript
复制
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(),以便使用作业ID而不是列来标记行。这将为您提供如下所示的数据帧:

代码语言:javascript
复制
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文件是什么样子的?如果您实际上只查找一个以作业ID作为列标签的行/系列,只需删除对transpose()的调用

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54965284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档