python - 如何使用字典创建 CSV 文件并且仅使用变量作为键和值
问题描述
我需要做一些房地产市场研究,为此需要新房子的价格和其他价值。
所以我的想法是去我获取信息的网站上。转到 Main-Search-Site 并抓取所有 RealEstateID,这些 RealEstateID 可以直接将我导航到每个房子的单个页面,我可以在其中提取我需要的信息。现在我得到了我想要的每所房子的所有数据,但就像原始数据一样print()
。我想将它全部保存在 .csv 文件中,我的方法是使用字典文件。由于我对 Python 很陌生,如果您能帮助我并解释我的错误,那就太好了。
csv.file 最后应该是这样的:
IDS Price Size District Flattyp Rooms
123 1200 250 Hollywood good 4
253 25 Beverly Hills bad 2
952
代码:
res = requests.get('https://www.immobilienscout24.de/Suche/S-T/Wohnung-Kauf/Nordrhein-Westfalen/Duesseldorf/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/true?enteredFrom=result_list')
soup = bs(res.content, 'lxml')
r = re.compile(r'resultListModel:(.*)')
data = soup.find('script', text=r).text
script = r.findall(data)[0].rstrip(',')
#resultListModel:
results = json.loads(script)
ids = list(results['searchResponseModel']['entryInformation'].keys())
data = json.dumps(ids)
houseinfo = {}
csvData = [['id','purchasePrice','Spacesize','District','Flattyp','Rooms']]
def get_house_info (House):
for id in ids:
try:
sourceCode = urllib.request.urlopen('https://www.immobilienscout24.de/expose/' + str(id)).read()
purchasePrice = str(sourceCode).split('"purchasePrice":')[1].split(',"geoCode"')[0]
Spacesize = str(sourceCode).split('"area":')[1].split('},"details"')[0]
District = str(sourceCode).split('"quarter":')[1].split('},')[0]
Flattyp = str(sourceCode).split('"is24qa-typ grid-item three-fifths">')[1].split('</dd> </dl> <dl class')[0]
Rooms = str(sourceCode).split('is24qa-zimmer grid-item three-fifths"> ')[1].split(' </dd> </dl> <dl class=')[0]
#parking_space = str(sourceCode).split('<dd class="is24qa-garage-stellplatz grid-item three-fifths">')[1].split('</dd> </dl>')[0]
#parking_price = str(sourceCode).split('<dd class="is24qa-garage-stellplatz-kaufpreis grid-item three-fifths">')[1].split('</dd> </dl> </div>')[0]
#print(id, purchasePrice, Spacesize, Flattyp, Rooms, District,)
houseinfo [id]= {'price' : purchasePrice, 'size' : Spacesize,
'district': District, 'flattyp' : Flattyp,
'rooms': Rooms};
with open ('house.csv', 'a') as csvData:
writer = csv.writer(csvData)
writer.writerow(houseinfo)
csvData.close()
except Exception as e:
print("failed in the main loop", str(e))
get_house_info(ids)
解决方案
看起来你很接近。因为看起来你已经有一个名为 houseinfo 的字典,对于每个 id 都有一个特定格式的字典,我建议你做类似的事情
with open('foo.txt', 'w') as csvfile:
cols = ['price', 'size', 'district', 'flattyp', 'rooms']
dict_result = {'price': 1.0, 'size': 1, 'district': 'Hollywood', 'flattyp': 'good', 'rooms': 3}
writer = csv.DictWriter(csvfile, fieldnames=cols)
writer.writeheader()
writer.writerow(dict_result)
dict_result 是你的houseinfo[id]
.
这会产生一个文本文件
price,size,district,flattyp,rooms
1.0,1,Hollywood,good,3
然后您可以使用 csvreader 阅读。
推荐阅读
- matlab - 我所有的梯度下降权重在特征扩展时都变为 0
- go - 在 Golang 中为 gRPC 服务器添加处理程序
- dompdf - Dompdf 在 Symfony 中不起作用并显示字符
- selenium - java.lang.NoSuchMethodError: org.jsoup.nodes.Document.wholeText()Ljava/lang/String;
- ruby-on-rails - 从最终结果栏删除 group_by 字段
- java - UI 自动化 - 自愈代理
- algorithm - 使用动态规划的最小旅行路径成本
- excel - 在文本来自另一列的 excel 范围内计算具有特定文本和特定颜色的单元格数
- asp.net-mvc - Google 登录返回访问被拒绝
- javascript - 为什么这不会输出任何东西?