测试与修改
如今项目已经接近尾声,在前后端合并之后难免会出现一些问题,所以这一次主要任务是进行测试与修改。
1.景点图片无法加载,数据返回总是为空问题。
经过测试发现是前端传入参数的城市字段为空,而只传入了名称,所以程序出现错误。
2.提高程序容错能力。
经过测试发现了很多种可能会出现的意外情况,比如爬取门票时某一字段偶尔没有,爬取网站偶尔会出现爬取失败的问题。
解决方法是用try-except包裹已经发现可能出现错误的地方,如果网址爬取失败,则再重新尝试一次,(但为了提高效率,并不会反复多次重新尝试)。
经过多次测试尽可能考虑到所有可能发生的情况,如此用户在使用程序时,就不会因为一些操作导致程序崩溃等问题。
比如在合并多个字典类型的时候常常会用到
dict(**l,**z)
这一方法,但在其中有重复的键值时就会报错,从而导致该数据中其它的数据也无法合并进去,导致数据丢失,所以修改为:
try:
allList = dict(**allList, **l)
except:
for key, value in l.items():
allList[key] = value
在数据合并时:
try:
spotsInfo.setdefault(info, {})
k = xc.spotsInfo[info]
if len(name) == 0:
spotsInfo[info][xc.name] = xc.spotsInfo[info]
else:
spotsInfo[info][name] = spi[info]
spotsInfo[info][xc.name] = xc.spotsInfo[info]
xc.spotsInfo.pop(info)
except Exception as e:
# print(e)
if len(name) != 0:
spotsInfo[info][name] = spi[info]
3.在搜索景点详细信息、美食数据的时候因为城市名称、景点名称有稍微的出入(比如北京与北京市),而导致无法搜索到,所以要使用模糊搜索功能,才能使程序正确返回。
result = process.extractBests(city, list.keys(), score_cutoff=80, limit=1)
info = list[result[0][0]]
这样类似的模糊搜索用到了很多地方:
因为门票搜索的几个平台,输入关键词往往会返回大量符合条件的(甚至一点也不符合条件的),
所以我们在程序中还要进一步筛选(以飞猪为例):
html = self.getHtml(url + str(p))
soup = BeautifulSoup(html, "html.parser")
div = soup.find_all('a', attrs={'data-click-type': 'l_title','class':'name'})
if len(div) == 0:
break
for s in div:
# 景点名称,门票(名称name,类别type,价格price,url,已售buy,旅行社from,可退isReturnable,预定时间bookTime,出票时间outTime,
# 可用时间useTime,说明discription)
title = s.string
result = fuzz.token_sort_ratio(title, keyword)
if result <= 20:
continue