【发布时间】:2018-08-20 07:23:20
【问题描述】:
我在 python 中编写了一个脚本来抓取一些 item names、estimated time 以及 reviews、reviewers 和 rating 连接到每个 item name 的网页使用他们的 api 并将它们写入一个csv文件。问题是我下面的脚本可以相应地解析数据,但我不能将它们写入 csv 文件。
但是,当我尝试将它们写入 csv 文件时,我收到以下错误:
Traceback (most recent call last):
File "C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\demo000000.py", line 71, in <module>
w.writerow(reviews)
File "C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\lib\csv.py", line 155, in writerow
return self.writer.writerow(self._dict_to_list(rowdict))
File "C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\lib\csv.py", line 151, in _dict_to_list
+ ", ".join([repr(x) for x in wrong_fields]))
ValueError: dict contains fields not in fieldnames: 'reviews'
这是我迄今为止尝试过的:
import csv
import requests
url = "https://eatstreet.com/api/v2/restaurants/{}?yelp_site="
res = requests.get("https://eatstreet.com/api/v2/locales/madison-wi/restaurants")
with open('reviews.csv', 'w', newline='') as f:
w = csv.DictWriter(f,['name','eta','messg','reviewer','rating'])
w.writeheader()
for item in res.json():
itemid = item['id']
req = requests.get(url.format(itemid))
if not 'yelpReviews' in req.json():continue
reviews = {}
reviews['name'] = req.json()['name']
reviews['eta'] = req.json()['waitTime']
reviews['reviews'] = []
for texualreviews in req.json()['yelpReviews']:
reviews_data = {'messg':texualreviews['message'],'reviewer':texualreviews['reviewerName'],'rating':texualreviews['rating']}
reviews['reviews'].append(reviews_data)
w.writerow(reviews)
任何将抓取的数据写入 csv 文件的帮助将不胜感激。谢谢。
【问题讨论】:
标签: python json python-3.x csv web-scraping