Python TypeError:uuu init_uuuuuuuuu()为参数';获取了多个值;字段名';

Python TypeError:uuu init_uuuuuuuuu()为参数';获取了多个值;字段名';,python,csv,web-scraping,Python,Csv,Web Scraping,我已经在一个网站上做了一个网络抓取练习,我正在尝试将数据放入一个可以导出到csv的pandas数据框中,当我遇到一个点时,TypeError:\uuu init\uuuuu()为参数“fieldnames”显示了多个值。我想使用csv模块编写文件。有人能解释错误是如何发生的以及如何解决它吗?我的代码如下: from urllib.request import urlopen as uReq from bs4 import BeautifulSoup as soup import csv my_

我已经在一个网站上做了一个网络抓取练习,我正在尝试将数据放入一个可以导出到csv的pandas数据框中,当我遇到一个点时,
TypeError:\uuu init\uuuuu()为参数“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'])

提前感谢您的帮助。

我怀疑您对
DictWriter
的呼叫参数太多:

writer = csv.DictWriter(filename, "w", fieldnames ...
                                   ^
                           what is this?
我想应该是:

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

在您的调用中,
fieldnames
参数被指定为
“w”
,但您也提供了自己的版本作为列表。

我怀疑您对
DictWriter
的调用有太多参数:

writer = csv.DictWriter(filename, "w", fieldnames ...
                                   ^
                           what is this?
我想应该是:

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

在您的调用中,
fieldnames
参数被指定为
“w”
,但您也提供了自己的版本作为列表。

csv.DictWriter
中,前两个参数是文件对象(不是文件名),然后是
fieldnames
(您指定为
“w”
)。试试这个:

with open(filename, 'w') as f:
    writer = csv.DictWriter(f, ['company', 'address', 'telephone'])
    # write stuff in this block

csv.DictWriter
中,前两个参数是文件对象(不是文件名),然后是
fieldnames
(您将其指定为
“w”
)。试试这个:

with open(filename, 'w') as f:
    writer = csv.DictWriter(f, ['company', 'address', 'telephone'])
    # write stuff in this block

哪一行代码导致错误?哪一版本的Python?@jwm:只有Python 3将
urllib.request
作为一个模块。@HD:请您的问题添加缺少的细节。版本:Python 3.6.5哪一行代码导致错误?哪一版本的Python?@jwm:只有Python 3将
urllib.request
作为一个模块。@HD:请您的问题是添加缺少的详细信息。版本:Python 3.6.5它只接受打开的文件对象,而不是文件名。这不是报告错误的原因,但我将在下一步添加它。它只接受打开的文件对象,而不是文件名。这不是报告错误的原因,但我将在下一步添加它。
“w”
是文件模式,应该传递给
open()
调用。
“w”
是文件模式,应该传递给
open()
调用。