【发布时间】:2018-10-29 14:24:04
【问题描述】:
我正在尝试网络抓取天气数据,需要获取表格并转换为 csv 格式。但并非表中的所有条目都填充了相同数量的列。所以当我以这种格式输入时
for h in airports:
for i in range(1,3):
if(i==1):
for j in range(1,32):
url="https://www.wunderground.com/history/airport/"+str(h)+"/2018/"+str(i)+"/"+str(j)+"/DailyHistory.html?req_city=&req_state=&req_statename=&reqdb.zip=&reqdb.magic=&reqdb.wmo="
www= urllib3.PoolManager()
page=www.urlopen("GET",url)
bs= BeautifulSoup(page.data,"lxml")
x=bs.find('div',{"class":"high-res"})
for tr in x.findAll('tr'):
weather.append([td for td in tr.stripped_strings])
else:
for k in range(1,29):
url="https://www.wunderground.com/history/airport/"+str(h)+"/2018/"+str(i)+"/"+str(k)+"/DailyHistory.html?req_city=&req_state=&req_statename=&reqdb.zip=&reqdb.magic=&reqdb.wmo="
www= urllib3.PoolManager()
page=www.urlopen("GET",url)
bs= BeautifulSoup(page.data,"lxml")
x=bs.find('div',{"class":"high-res"})
for tr in x.findAll('tr'):
weather.append([td for td in tr.stripped_strings])
输出的 csv 文件到处都是,逗号分隔的变量每个都会进入一个新列,而与标题无关。 有没有一种简单的方法可以做到这一点并以更清晰的方式获取日期?
所以我不断地添加一个包含表格行的列表,而不考虑列。如何确保列中的数据在正确的标题下?
这是我用来将数据写入 csv 文件的内容:
with open ('weather.csv','a') as file:
writer=csv.writer(file)
for row in weather:
writer.writerow(row)
【问题讨论】:
-
为什么这篇文章被标记为熊猫?另外,第一个csv有什么问题?数据在我看来是一致的。
-
我使用 pandas 将其制成数据框并写入 csv。此外,数据是一致的,但标题和所需表格中的数据不匹配,因为单位和数字数据被剥离
-
我在您的代码 sn-p 中没有看到任何熊猫代码。你把它剪掉了吗?我们在看你的第一张截图吗?我看到列内的单位。第一个是您想要的结果,第二个屏幕截图是您当前不想要的结果吗?
-
是的,我切断了数据框 cde。是的,顶部屏幕 sht 是网站中的表格,第二个是我得到的结果
-
如果数据在表中,为什么不使用pandas的@987654323@?
标签: python pandas web-scraping beautifulsoup