Ошибка типа: __init __ () получила несколько значений для аргумента 'имена полей' - PullRequest
0 голосов
/ 08 мая 2018

Я выполнил веб-очистку на веб-сайте для практики, и я пытаюсь поместить данные в фрейм данных Pandas, который можно экспортировать в CSV, и когда я подхожу к точке, появляется TypeError: __init__() got multiple values for argument 'fieldnames'. Я хочу написать файл с помощью модуля CSV. Может кто-нибудь объяснить, как произошла ошибка и как ее решить? Мой код выглядит следующим образом:

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
import csv

my_url = 'https://www.allagents.co.uk/find-agent/london/'

uClient = uReq(my_url)

page_html = uClient.read()

uClient.close()

page_soup = soup(page_html, 'html.parser')

containers = page_soup.findAll('div', {'class':'itemlabel3'})

filename = "webscrape.csv" 
records = []

for container in containers:
    comp_name   = container.find('div', {'class':'labelleft2 col-md-10'}).div.h4.a.text

    address=container.find('div', {'class':'labelleft2 col-md-10'}).div.p.text.replace('\n','')

    tel         = container.find('div', {'class':'labelleft2 col-md-10'}).div.find('p', {'style':'clear: both; margin-bottom: 15px;'}).strong.text

    records.append({'company': comp_name, 'address': address, 'telephone': tel})
writer = csv.DictWriter(filename, "w", fieldnames=['company', 'address', 'telephone'])

writer.writeheader()

for r in records:
    writer.writerow(r)

Ошибка приходит на линии:

writer = csv.DictWriter(filename, "w", fieldnames=['company', 'address', 'telephone'])

Заранее спасибо, любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

В csv.DictWriter первые два аргумента - это объект файла (не имя файла), а затем fieldnames (который вы указали как "w"). Попробуйте это:

with open(filename, 'w') as f:
    writer = csv.DictWriter(f, ['company', 'address', 'telephone'])
    # write stuff in this block
0 голосов
/ 08 мая 2018

Я подозреваю, что ваш вызов DictWriter имеет слишком много параметров:

writer = csv.DictWriter(filename, "w", fieldnames ...
                                   ^
                           what is this?

Я предполагаю, что это должно быть:

f = open(filename, 'w')
writer = csv.DictWriter(f, fieldnames ...

В вашем вызове параметру fieldnames назначен "w", но вы также предоставляете свою собственную версию в виде списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...