2017-07-31 20 views
0

私は、websiteから不動産業者の名前、役職、電話番号を掻き集めるスクリプトを書こうとしています。PythonとBeautifulSoupを使用したWebscrape - csvファイルに保存中のエラー

マイコード:

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ファイルに保存しようとする前に、端末内に働きました。しかし、今私は2つのエラーメッセージの受信しています: "|"

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' 

**注を、私は "" に置き換えています*

+0

最も簡単な修正スーパーシンプルニシキヘビです天才 'str(yourVariable)'です。これはあなたが探している答えではなく、簡単な問題解決者です; – hansTheFranz

+0

phonesはリストであり、リストにはreplaceメソッドがありません。 – slackmart

答えて

0

エラーが記載されているので、phonesreplace()メソッドを持たないリストです。例えば

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

:あなたは(この場合は|で)指定されたセパレータと、リストの要素を結合するために代わりに.join()を使用することができ、文字列などの問題のため

>>> phones = ['123', '321', '123'] 
>>> '|'.join(phones) 
'123|321|123' 
関連する問題