Как очистить html в python с помощью bs4 и сохранить данные в csv

#python #beautifulsoup #export-to-csv

#python #beautifulsoup #экспорт в 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
  

Любое объяснение причины возникновения этой ошибки было бы с благодарностью

Комментарии:

1. измените wr=csv.writer(datafile, delimiter=',') и wr.writerow(... , которые вы используете a как для объекта записи, так и в цикле for.

Ответ №1:

Вы используете a как переменную цикла, так и имя csv.writer объекта. Замените for a in range(1000) на for i in range(1000) и arr[0][a] на arr[0][i] и так далее.

Комментарии:

1. почему отрицательные оценки для этого и моего? Это правильный ответ

Ответ №2:

В

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

Вы используете a как csv.writer , а затем сразу же используете его в качестве индекса. Измените один из них.