【发布时间】:2016-07-12 10:22:49
【问题描述】:
我需要抓取这个网站 (http://setkab.go.id/profil-kabinet/#) 并生成一个 Excel 文件,其中第 1 列的标题为“内阁名称”,第 2 列的标题为“时代”。这意味着每个内阁名称(例如 Kabinet Presidensil、Kabinet Sjahrir I ) 应该有其自己的行 - 与其各自的时代(例如 Era Revolusi Fisik、Era Republik Indonesia Serikat)一起。
这是我得到的最接近的:
import requests
from bs4 import BeautifulSoup
response = requests.get('http://setkab.go.id/profil-kabinet/#')
soup = BeautifulSoup(response.text, 'html.parser')
eras = soup.find_all('div', attrs={'class':"wpb_accordion_section group"})
setkab = {}
for element in eras:
setkab[element.a.get_text()] = {}
for element in eras:
cabname = element.find('div',attrs={'class':'wpb_wrapper'}).get_text()
setkab[element.a.get_text()]['cbnm'] = cabname
for item in setkab.keys():
print item + setkab[item]['cbnm']
import os, csv
os.chdir("/Users/mxcodes/Code")
with open("setkabfinal.csv", "w") as toWrite:
writer = csv.writer(toWrite, delimiter=",")
writer.writerow(["Era", "Cabinet name"])
for a in setkab.keys():
writer.writerow([a.encode("utf-8"), setkab[a]["cbnm"]])
但是,这会创建一个 Excel 文件,其中第 1 列和第 2 列中的标题分别为“Era”和“Cabinet names”。它未能将每个内阁名称放在 单独的 行中。例如,它在第 1 列中有“Era Revolusi Fisik”,并在第 2 列中列出所有橱柜一起。
我的猜测是,我需要以某种方式切换键值对,以便每个机柜都成为键,而它的时代成为它的价值——因为目前情况正好相反。但我已经尝试过,但没有成功。有什么帮助吗?谢谢!
【问题讨论】:
标签: python-2.7 dictionary web-scraping beautifulsoup key-value