我写了一段代码来从网站上提取一些信息。输出是JSON格式的,我想将其导出为CSV。因此,我尝试将其转换为pandas数据帧,然后将其导出为pandas中的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")错误消息为:
回溯(最近一次调用):
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:无效的文件路径或缓冲区对象类型:
发布于 2019-03-03 12:59:27
问题是,当您调用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(),以便使用作业ID而不是列来标记行。这将为您提供如下所示的数据帧:
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()的调用
https://stackoverflow.com/questions/54965284
复制相似问题