Python - Web抓取表格并仅将特定列写入CSV文件

时间:2015-12-03 23:24:34

标签: python csv web-scraping

我有一些问题。首先,当我尝试从网页抓取中编写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()

2 个答案:

答案 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()