2017-03-15 90 views
0

http://www.americashealthrankings.org/api/v1/downloads/131中的「2016年度」表格提取爲csv。該表有3個字段 - 狀態,排名,值。出現以下錯誤:Python從網址提取表格到csv

import urllib2 
from bs4 import BeautifulSoup 
import csv 

url = 'http://www.americashealthrankings.org/api/v1/downloads/131' 
header = {'User-Agent': 'Mozilla/5.0'} 
req = urllib2.Request(url,headers=header) 
page = urllib2.urlopen(req) 
soup = BeautifulSoup(page) 

table = soup.find('2016-Annual', {'class': 'STATE-RANK-VALUE'}) 

f = open('output.csv', 'w') 

for row in table.findAll('tr'): 
    cells = row.findAll('td') 

    if len(cells) == 3: 
     STATE = cells[0].find(text=True) 
     RANK = cells[1].find(text=True) 
     VALUE = cells[2].find(text=True) 

    print write_to_file 
    f.write(write_to_file) 

f.close() 

我在這裏錯過了什麼?使用python 2.7

+0

你得到什麼錯誤? – DyZ

+1

你永遠不會定義'write_to_file'或設置任何東西 – ryugie

回答

0

根據Beautifulsoup docs,您需要傳遞一個字符串以在初始化時進行解析。但是,page = urllib2.urlopen(req)會返回一個指向頁面的指針。

嘗試使用soup = BeautifulSoup(page.read(), 'html.parser')來代替。

此外,變量write_to_file不存在。

如果這不能解決問題,也請發佈您遇到的錯誤。

1

你的代碼是錯誤

這個 'http://www.americashealthrankings.org/api/v1/downloads/131' 下載 csv文件。

將csv文件下載到本地計算機,您可以使用此文件。

#!/usr/bin/env python 
# coding:utf-8 
'''黃哥Python''' 

import urllib2 

url = 'http://www.americashealthrankings.org/api/v1/downloads/131' 

html = urllib2.urlopen(url).read() 

with open('output.csv', 'w') as output: 
    output.write(html) 
0

它不工作的原因是因爲你指向的文件已經是一個CSV - 你可以從字面上加載URL在您的瀏覽器,它會以CSV文件格式下載----期待您的表不過,是不是該端點 - 正是在這個網址:

http://www.americashealthrankings.org/explore/2016-annual-report

而且 - 我沒有看到一個名爲STATE-RANK-VALUE我只看到th頭叫staterank類和,value