检验了一下value的类型是字典,为什么会出现str?
# noinspection PyUnresolvedReferences
import json
import pandas as pd
import numpy as np
import requests
from lxml import html
import os
from bs4 import BeautifulSoup
import re
from operator import itemgetter
import csv
import demjson
#请求地址
url='https://ncov.dxy.cn/ncovh5/view/pneumonia'
#设置请求头
header={
"User-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
}
#发送请求
response =requests.get(url=url, headers=header)
page=response.content.decode('utf-8')
#构建BeautifulSoup对象
soup = BeautifulSoup(page, 'lxml')
#根据id属性查找
script=soup.find(id="getAreaStat")
#活动标签中的文本内容
data = script.text
json_str = re.findall(r'\[.+\]', data)[0]
resut = json.loads(json_str)
# resultData = json.dumps(resut,ensure_ascii=False)
#print(type(resut))
#print(type(resut[1]))
#print(len(resut))
#print(resut[1]) resut是列表
city=list()
keys=['provinceName','cities']
for i in range (len(resut)):
if(i>2):
out = itemgetter(*keys)(resut[i])
city.append(resut[i].get('cities'))
#print(out)
#print(i,city)#现在每一个city都是一个字典,把字典转换成列表
#print(city)
a=[]
for headers in sorted(city[0][0].keys()):#把字典的键取出来
a.append(headers)
header=a#把列名给提取出来,用列表形式呈现
#print(header)
value={}
for m in range (len(city)):
for n in range(len(city[m])):
value.update(city[m][n].items())
#print(type(value))
mid = pd.DataFrame(data=value, index=[0])
#print(type(mid))
#mid.to_csv('C:/Users/Administrator/Desktop/实训/city1.csv',encoding='gbk')
print(type(value))
print(type(mid))
filednames=['cityName','currentConfirmedCount', 'confirmedCount','suspectedCount','curedCount','deadCount','highDangerCount','midDangerCount','locationId','currentConfirmedCountStr']
with open('C:\\Users\\Administrator\\Desktop\\实训\\city1.csv','w',newline='',encoding='gbk')as f2:
writer=csv.DictWriter(f2,filednames)
writer.writeheader()
writer.writerows(value)
<class 'dict'>
<class 'pandas.core.frame.DataFrame'>
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\实训\YQdata.py", line 78, in <module>
writer.writerows(value)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\csv.py", line 157, in writerows
return self.writer.writerows(map(self._dict_to_list, rowdicts))
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\csv.py", line 147, in _dict_to_list
wrong_fields = rowdict.keys() - self.fieldnames
AttributeError: 'str' object has no attribute 'keys'