我有一些问题。首先,当我尝试从网页抓取中编写CSV文件时,没有任何内容写入。该文件确实保存,但它完全空白。最后,我希望打开它并打电话给水温柱来计算平均值。
我的另一个问题是我只需要CSV文件中表格中的一些列。有人可以验证我所做的是正确的吗?我只想要前3列,然后是第14列。
谢谢!
import sys
import urllib2
import csv
import requests
from bs4 import BeautifulSoup
r_temp1 = requests.get('http://www.ndbc.noaa.gov/data/realtime2/BZBM3.txt')
html_temp1 = r_temp1.text
soup = BeautifulSoup(html_temp1, "html.parser")
table_temp1 = soup.find('table')
rows_temp1 = table.findAll('tr')
rows_temp1 = rows_temp1[1:]
#writing to a csv file
csvfile_temp1 = open("temp1.csv","wb")
output_temp1 = csv.writer(csvfile_temp1, delimiter=',',quotechar='"',quoting=csv.QUOTE_MINIMAL)
for row in rows_temp1:
Year = cells[0].text.strip()
Month = cells[1].text.strip()
Day = cells[2].text.strip()
W_temp = cells[14].text.strip()
output.writerow([Year,Month,Day,W_temp])
csvfile_temp1.close()
答案 0 :(得分:0)
运行代码会给出:
File "hh.py", line 11, in <module>
rows_temp1 = table.findAll('tr')
NameError: name 'table' is not defined
确实在第10行你定义了table_temp1,而不是table。不知道你是否还有其他问题,但首先要阅读你得到的错误
答案 1 :(得分:0)
由于rows_temp1
中没有行,您在文件中看不到任何内容。该数组为空,因为文本文件中没有表行。看起来您期望带有表的HTML文件,但该文件只是一个纯文本文件。
这是一个可以满足您需求的版本:
import csv
import requests
r_temp1 = requests.get('http://www.ndbc.noaa.gov/data/realtime2/BZBM3.txt')
rows_temp1 = r_temp1.text.split('\n')
#writing to a csv file
csvfile_temp1 = open("temp1.csv","wb")
output_temp1 = csv.writer(csvfile_temp1, delimiter=',',quotechar='"',quoting=csv.QUOTE_MINIMAL)
for row in rows_temp1:
if not row: continue
cells = row.split()
Year = cells[0].strip()
Month = cells[1].strip()
Day = cells[2].strip()
W_temp = cells[14].strip()
output_temp1.writerow([Year,Month,Day,W_temp])
csvfile_temp1.close()