景点门票数据的整合
至此为止,共爬取了八个平台上门票信息,但信息参差不齐,如果直接这样返回给用户肯定是不可以的,所以现在需要做的就是把八个平台上想要爬取的数据规定一个固定的格式,我这里采用的依然是字典格式,依次按照景点、来源、票的类型来进行分类,把爬到的所有门票进行一个数据的整合。
首先整合前四个平台上的数据(大河票务、飞猪、klook、驴妈妈),格式主要为:
tickets[type].append({'name':ttitle,'type':type,'price':price,'url':href,'buy':'','from':'大河票务网','isReturnable':'',
'bookTime':booktime,'outTime':'','useTime':'','discription':discription})
#景点名称,门票(名称name,类别type,价格price,url,已售buy,旅行社from,可退isReturnable,预定时间bookTime,出票时间outTime,
# 可用时间useTime,说明discription)
但是这些数据并不是所有平台都会有的,所以都有一个默认值,字符为空字符串,数字则为0。
因为当初爬取的时候并没有把全部所有想要的数据爬下来,所以这次需要做的就是对网站再做进一步分析,尽可能的把想要的数据爬下来。
以下是驴妈妈网站爬取的改动:
price = item.find('dd',{'class':'pdlvprice'}).find('i').string.replace(' ','').replace('\n','').replace('\t','')
'''预定描述'''
try:
booktime = item.find('dd',{'class':'pdAdvbookingTime'}).string.replace(' ','').replace('\n','').replace('\t','')
except:
booktime = ''
title = item.find('dt',{'class':'pdname'}).text.replace(' ','').replace('\n','').replace('\t','')
# isreturn = item.find('dt',{'class':'pdname'}).find('span',{'class':'tagsback'})#是否可退
# isget = item.find('dt',{'class':'pdname'}).find('span',{'class':'tagsback'})#是否需要取票
try:
type = item.find('dt',{'class':'pdname'}).find('a')['key'].replace(' ','').replace('\n','').replace('\t','')
data = item.find('dt',{'class':'pdname'}).find('a')['data'].replace(' ','').replace('\n','').replace('\t','')
except Exception as ex:
type = ''
data = ''
detail_url = 'http://ticket.lvmama.com/scenic_front/scenic/asyncLoadingTicketDetail.do?suppGoodsId='+data+'&branchType=&productId='+productid+'&bizCategoryId=11&key='
moreInfo = self.getHtml(detail_url)
# print(moreInfo)
moresoup = BeautifulSoup(moreInfo,'html.parser')
h4 = moresoup.find_all('li')
dis = ''
isreturn = ''
for h in h4:
# lis = h.find_all('li')
# for li in lis:
if h.text.find('退票规则')>=0:
isreturn = h.find('i').text
if h.text.find('有效期限')>=0:
usetime = h.text.replace('有效期限','')
dis = moresoup.text.replace('收起','')
# print(detail_url)
# print(title)
'''合并'''
slist.setdefault(type,[])
slist[type].append({'name':title,'type':type,'price':price,'url':a['href'],'buy':'','from':'驴妈妈','isReturnable':isreturn,
'bookTime':booktime,'outTime':'','useTime':usetime,'discription':dis})
像这样对其它三个也进行分析和修改。
剩下的任务就是后四个数据的整合,以及对这八个平台的方法合并,使外部调用时,用一个方法就可以返回所有的数据。