2017-07-29 6 views
1

私は、websiteから不動産業者の名前、役職、電話番号を掻き集めるスクリプトを書こうとしています。これは、最初の30かそこらの人々のために動作しますが、エラーメッセージが起動します:PythonとBeautifulSoupを使用したWebscrape - エラーメッセージの修正方法がわからない

role = agent_role[0].text 
IndexError: list index out of range 

これは私のコードです:私はこの問題は私のスクリプトは上で立ち往生していることである

containers = page_soup.findAll("div",{"class":"card horizontal-split vcard"}) 

for container in containers: 
    agent_name = container.findAll("li", {"class":"agent-name"}) 
    name = agent_name[0].text 

agent_role = container.findAll("li", {"class":"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)) 

理解します不動産仲介人の役割は記載されていませんが、私はそれを克服して残りの代理店を続ける方法は不明です。役割がある場合の条件とはチェックすると

答えて

1

のPut Aが

agent_role = container.findAll("li", {"class":"agent-role"}) 
if len(agent_role) > 0: 
    role = agent_role[0].text 
else: 
    role = '' 
1

agent_roleリストは "truthy" であれば単純に確認してください。

agent_role = container.findAll("li", {"class":"agent-role"}) 
role = '' 
if agent_role: 
    role = agent_role[0].text 

またはonelinerとして:

role = agent_role[0].text if agent_role else '' 
+1

クリーンかつ効果的なコードが、あなたが最初の一致が必要な場合は、 'find'を使用することを検討してください –

関連する問題