Webscrape使用Python和BeautifulSoup - 错误消息不确定如何修复

时间:2017-07-29 06:50:30

标签: python web-scraping beautifulsoup

我正在尝试编写一个脚本,用于从website中删除房地产经纪人的姓名,角色和电话号码。它适用于前30个左右的人,但随后会出现错误消息:

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))

我理解问题是我的剧本被卡在没有列出角色的房地产经纪人身上,但是我不确定如何让它克服这一点并继续为其他代理人服务。

2 个答案:

答案 0 :(得分:1)

设置if条件并检查角色是否存在

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

答案 1 :(得分: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 ''