完成了对飞猪平台门票数据的爬取。
在观察飞猪官网查询时的变化时,我们可以发现它有一个json格式的数据被送到网页中,而那个数据中包含的就是门票的信息,所以我们需要做的就是获得这一部分数据。
首先是根据关键词检索,获得符合条件的景点的列表,依次爬取他们的详细地址。
Ncity = city.replace('市', '').replace('县', '').replace('省', '')
url = 'https://travelsearch.fliggy.com/index.htm?searchType=product&keyword='+Ncity+keyword+'&category=SCENIC&pagenum=1&conditions=dest%3A'+Ncity
p = 1;
try:
html = self.getHtml(url)
soup = BeautifulSoup(html,"html.parser")
'''获得景点列表'''
scenics = soup.find_all('a',{'href':re.compile(r'https://s.fliggy.com/scenic/')})
list = set()
for scenic in scenics:
list.add(scenic['href'])
然后依次访问详细地址,截取出那一部分json格式的数据来,因为是在源码中,所以采用的是re正则表达式的方式进行匹配和截取:
for scenic in list:
detail = self.getHtml(scenic)
detail_soup = BeautifulSoup(detail,"html.parser")
title = detail_soup.find('h3',{'class':'scenic-tit'}).text.replace(' ','').replace('\n','')
ticketList = {}
# print(title)
scripts = detail_soup.find_all('script')
for script in scripts:
text = script.string
if text is None:
continue
text = text.replace(' ', '').replace('\n', '')
if( text.find('window.TICKETS') != -1 ):
'''获取json格式的数据'''
text = text[text.find('window.TICKETS') + 15:]
tickets = json.loads(text)
这样就获得那一部分json数据了,剩下的工作就是找到它的组织结构,通过键值访问到我们想要的数据:
for item in itemList:
#景点名称,门票(名称name,类别type,价格price,url,已售buy,旅行社from,可退isReturnable,预定时间bookTime,出票时间outTime,
# 可用时间useTime,说明discription)
'''名称'''
ttitle = item['title']
'''已售'''
buy = item['soldNum']
'''类型'''
type = item['tcatName']
'''门票ID'''
itemid = item['itemid']
'''退款政策'''
try:
isreturn = item['refund']
except:
isreturn = ''
'''来源'''
fromw = '飞猪 '+item['sellerName']
'''价格'''
price = item['price']
'''描述'''
dis = item['refundDesc']
fea = item['featureShow']
如此,它的门票数据就爬取成功了。
剩下还需爬取的网站有驴妈妈、大河等网站,在爬取完所有的数据之后,剩下的工作就是规定数据该以怎么样一种格式返回给前端,并且对每个平台的代码进行修改。