Webscrape使用Python和BeautifulSoup - 保存到csv文件时出错

时间:2017-07-31 00:19:58

标签: python web-scraping beautifulsoup

我正在尝试编写一个脚本,用于从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文件中创建额外的列。*

1 个答案:

答案 0 :(得分:0)

如错误提及,phones是一个没有replace()方法的列表。您可以使用.join()来加入列表中的元素与指定的分隔符(在本例中为|):

f.write(name + "," +role + "," + '|'.join(phones) + "," + "\n")

例如:

>>> phones = ['123', '321', '123']
>>> '|'.join(phones)
'123|321|123'