当前位置:   article > 正文

爬去哪儿网5A景点评论

去哪儿景点id

目的

获得去哪儿网评论信息(包括评论和打分),保存到本地csv文件。

前期准备工作(踩点)

1、打开网站,在门票搜索框直接输入“5A”,发现可以获得5A景区列表。

图片描述

2、按下F12,让我们看一看,他们是如何组织这些景点信息的

图片描述

哈哈,可以看到他们把所有的景点信息都放在了一个json文件里面,也就说我们直接获取这个json文件就能直接得到5A景点的列表了。
下面是获取json的url,参数一目了然有没有?!

http://piao.qunar.com/ticket/list.json?keyword=5A&region=&from=mps_search_suggest&page=2
3、接下来我们再研究一下每个景点的详情页

图片描述

一样的配方,一样的味道!每个景点所有的评论依然在一个json文件里面
看到下面url里面的sightId了吗,经过验证这个就是景点的编号.

http://piao.qunar.com/ticket/detailLight/sightCommentList.json?sightId=3076&index=2&page=2&pageSize=10&tagType=0

现在我们大致已经有了思路.第一步,获得所有5A景点的信息用列表保存[景点名字,景点id],第二部,由景点id可以获得景点评论.一切看起来都是那么顺利.

4、等等似乎有什么不对我们再仔细看看

图片描述

注意到左边json里面的sightid了吗?是"1582294258"明显不是我们刚才获取评论时用到的那个呀!倒是和地址栏里面的那个是一样的.好吧,看来看来他们对每个景点设置两个id,一个用于获取html文件(记为id)另一个是评论id(记为rid).看来需要研究一下怎么把id变为rid

图片描述

好吧,发现这个id隐藏在head标签下喽.

上代码

采完点,我们就可以写代码了
  1. import pandas as pd
  2. import requests as req
  3. import time,json
  4. #获得景点id
  5. def GetId():
  6. sightlist = []#储存包含景点列表的json
  7. for i in range(1,23):#先把所有景点列表的json都下载下来
  8. url = 'http://piao.qunar.com/ticket/list.json?from=mpl_search_suggest_h&keyword=5a&page=' + str(i) + '&sort='
  9. response = req.get(url)
  10. r = json.loads(response.text)
  11. sightlist.append(r)
  12. response.close
  13. #time.sleep(3)
  14. sight = {}#景点仓库所有的景点及其对应的id都放在这里
  15. for jsons in sightlist:#处理每个json,获得景点信息
  16. lists = jsons['data']['sightList']
  17. for each in lists:
  18. #print(each['sightName'])
  19. key = each['sightName']
  20. sight[key] = each['sightId']
  21. return sight
  22. #垃圾查找函数,不会正则表达式,真是无奈
  23. def search(s,e,r):
  24. start = r.find(s)
  25. l = len(s)
  26. end = r.find(e,start+l,start+100)
  27. rr = r[start+l:end]
  28. return rr
  29. #获得评论id
  30. def Getrid(id):
  31. url = 'http://piao.qunar.com/ticket/detail_' + str(id) + '.html'
  32. response = req.get(url)
  33. text = response.text
  34. rid = search('piao.qunar.com/ticket/detail_','.html',text)#这个方法是我百度的,有些时候用起来还真是方便
  35. num = search('<li class="mp-commentstab-item mp-actived" mp-role="tagItem" data-type="0">全部(',')</li>',text)
  36. dd = []
  37. dd.append(rid)
  38. dd.append(num)
  39. return dd
  40. #获得一个景点的评论
  41. def Getcom(rid,num,name):
  42. comments = [['*********************************以下是' + name + '的评论*********************************','']]#初始化并给每个景点的评论加上表头
  43. page = 1200 if int(num) > 1200 else int(num)#按照上级要求,每个景点1200条左右评论就行
  44. for i in range(1,(page//10)+1):#逐页获取评论并保存
  45. url = 'http://piao.qunar.com/ticket/detailLight/sightCommentList.json?sightId=' + str(rid) + '&index='+ str(i) + '&page=' + str(i) + '&pageSize=10&tagType=0'
  46. response = req.get(url)
  47. r = json.loads(response.text)
  48. if 'commentList' in r['data'].keys():
  49. for each in r['data']['commentList']:
  50. data = []#【评论,评分】
  51. data.append(each['content'])
  52. data.append(each['score'])
  53. if data[0] == "用户未点评,系统默认好评。":#去除无用的评论
  54. continue
  55. comments.append(data)
  56. print(data[0])
  57. print(data[1])
  58. return comments
  59. #保存到本地文件
  60. def save(l):
  61. head = ["哪网5A景区的的评论" , "评分" ]
  62. df = pd.DataFrame (l , columns = head)
  63. df.to_csv ('去哪网.csv', encoding = "utf-8")
  64. if __name__ =="__main__":
  65. sightid = GetId()#获得景点 id
  66. comment = []
  67. for each in sightid:
  68. print(each)
  69. print(Getrid(sightid[each])[0])
  70. print(Getrid(sightid[each])[1])
  71. co = Getcom(Getrid(sightid[each])[0],Getrid(sightid[each])[1],each)
  72. comment.extend(co)
  73. print("本次共爬取信息%d条数据"%(len(comment)))
  74. save(comment)

成果展示外加反省
图片描述

大概30万条吧,美滋滋.等我开心完就回来,就回来整理出现的问题.欢迎各位大佬批评指正.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/194842
推荐阅读
相关标签
  

闽ICP备14008679号