如何使用bs4在python中抓取html并将数据保存到csv

时间:2016-10-23 00:21:25

标签: python beautifulsoup export-to-csv

我希望从网站中提取数据并将其以干净的格式保存到csv。目前我的代码没有运行并返回错误:" AttributeError:' int'对象没有属性' writerow'"

from bs4 import BeautifulSoup
import urllib.request
import csv
url="http://www.covers.com/pageLoader/pageLoader.aspx?page=/data/nfl/injury/injuries.html"

arr=[[],[],[],[],[]]

with urllib.request.urlopen(url) as url:
    s = url.read()
    soup = BeautifulSoup(s)
    tables = soup.find_all("table", class_="data")
    for table in tables:
       teams=table.find_all("td", class_="datahead")
       teamName=teams[0].text
       rrows=table.find_all("tr")
       for rrow in rrows:
           ccols=rrow.find_all("td")
           if len(ccols)>3:
               name=ccols[0].text
               pos=ccols[1].text    
               status=ccols[2].text
               desc=ccols[3].text
               arr[0].append(teamName)
               arr[1].append(name)
               arr[2].append(pos)
               arr[3].append(status)
               arr[4].append(desc)

with open('injuries.csv', 'w', newline='') as datafile:
    a=csv.writer(datafile, delimiter=',')
    for a in range(1000):
        a.writerow([arr[0][a],arr[1][a],arr[2][a],arr[3][a],arr[4][a]])
    datafile.close

非常感谢有关导致此错误原因的任何解释

2 个答案:

答案 0 :(得分:0)

您使用a作为循环变量和csv.writer对象的名称。将for a in range(1000)替换为for i in range(1000),将arr[0][a]替换为arr[0][i],依此类推。

答案 1 :(得分:0)

a=csv.writer(datafile, delimiter=',')
for a in range(1000):

您正在使用a作为csv.writer,然后立即将其用作索引。改变其中一个。