我编写了一个Python脚本,用于抓取页面以获取诸如电话号码,地址,评分等信息。当页面上的所有值均可用时,该脚本运行良好。但是,如果没有特定信息(例如电话号码不可用),则会引发错误。它打破了循环,我只想跳过这些页面并继续抓取下一页。
下面是提取电话号码的示例代码:
def get_phone_number(body):
i=0
for item in body.find('p',{'class':'contact-info'}):
i+=1
if(i==2):
phoneNo=''
try:
for element in item.find_all(class_=True):
classes = []
classes.extend(element["class"])
phoneNo+=str((which_digit(classes[1])))
except:
pass
return phoneNo
以上是剪贴簿联系信息的功能。下面是我在for循环中遇到的错误。
TypeError Traceback (most recent call last)
<ipython-input-30-bfd4a9d231f1> in <module>()
20 dict_service = {}
21 name = get_name(service_html)
---> 22 phone = get_phone_number(service_html)
23 rating = get_rating(service_html)
24 count = get_rating_count(service_html)
<ipython-input-25-7168fec7d0c7> in get_phone_number(body)
21 def get_phone_number(body):
22 i=0
---> 23 for item in body.find('p',{'class':'contact-info'}):
24 i+=1
25 if(i==2):
TypeError: 'NoneType' object is not iterable
任何帮助将不胜感激!
答案 0 :(得分:1)
当您尝试遍历None对象时,您将收到此错误。 这行
for element in item.find_all(class_=True):
不会因为引发异常而引发异常。
可能发生此错误的行在try ... except
块之外。很可能是以下行
for item in body.find('p',{'class':'contact-info'}):
要处理此问题,应避免在NoneType上进行迭代。 您有两种选择。
使用try.... except
块。
try:
for item in body.find('p',{'class':'contact-info'}):
i+=1
if(i==2):
phoneNo=''
try:
for element in item.find_all(class_=True):
classes = []
classes.extend(element["class"])
phoneNo+=str((which_digit(classes[1])))
except:
pass
return phoneNo
except:
pass
使用条件分支
items = body.find('p',{'class':'contact-info'})
if items is not None:
for item in items:
i+=1
if(i==2):
phoneNo=''
try:
for element in item.find_all(class_=True):
classes = []
classes.extend(element["class"])
phoneNo+=str((which_digit(classes[1])))
except:
pass
return phoneNo
答案 1 :(得分:0)
find方法不返回可迭代或类似列表的对象。您曾经使用过像这样的find_all方法
for item in body.find_all('p'):