我正在尝试编写一个脚本,用于从website中删除房地产经纪人的姓名,角色和电话号码。
我的代码:
containers = page_soup.findAll("div",{"class":"card horizontal-split vcard"})
filename = "agents.csv"
f = open(filename, "w")
headers = "name, role, number\n"
f.write(headers)
for container in containers:
agent_name = container.findAll("li", {"class":"agent-name"})
if agent_name:
name = agent_name[0].text
agent_role = container.findAll("li", {"class":"agent-role"})
if agent_role:
role = agent_role[0].text
filterfn = lambda x: 'href' in x.attrs and x['href'].startswith("tel")
phones = list(map(lambda x: x.text,filter(filterfn,container.findAll("a"))))
print("name: " + name)
print("role: " + role)
print("phones:" + repr(phones))
f.write(name + "," +role + "," + phones.replace(",", "|") + "," + "\n")
f.close()
我的代码在终端内工作,然后尝试将其保存到我可以在excel中打开的csv文件中。但是,现在我收到了两条错误消息:
TypeError: must be str, not list
f.write(name + "," +role + "," + phones.replace(",", "|") + "," + "\n")
和
f.write(name + "," +role + "," + phones.replace(",", "|") + "," + "\n")
AttributeError: 'list' object has no attribute 'replace'
**注意,我正在替换","用" |"避免在csv文件中创建额外的列。*
答案 0 :(得分:0)
如错误提及,phones
是一个没有replace()
方法的列表。您可以使用.join()
来加入列表中的元素与指定的分隔符(在本例中为|
):
f.write(name + "," +role + "," + '|'.join(phones) + "," + "\n")
例如:
>>> phones = ['123', '321', '123']
>>> '|'.join(phones)
'123|321|123'