当前位置:   article > 正文

Python爬虫案例:爬取携程评论_之前爬取美团,马蜂窝等网站的数据都挺顺利,大众点评(这个反爬机制有点麻烦)在磕磕

之前爬取美团,马蜂窝等网站的数据都挺顺利,大众点评(这个反爬机制有点麻烦)在磕磕

前言

之前爬取美团,马蜂窝等网站的数据都挺顺利,大众点评(这个反爬机制有点麻烦)在磕磕绊绊中也算成功(重点是网页页数的变化和关键字的隐藏替换)但携程居然遇到了瓶颈。

主要是查看源代码时发现关键商户信息根本就找不到,就很奇怪。对于关键信息评论发现翻页时网页的url不变,网上查了一下说是使用是动态的网址进行建构的,Ajax页面加载,那么通用的request.get()就不能用了,所以采取模拟浏览器进行数据爬取。

为什么选取龟峰呢?因为正好才从龟峰回来,这几乎是去过的人最少的5A级景区,大胆猜测数据可能没有那么多(相比去的其他地方而言)而且去的时候惊喜的给免了门票,所以用这个来测试。

PS:如有需要Python学习资料的小伙伴可以加下方的群去找免费管理员领取

 

 

 

第一步:打开网页

 

可能需要登录后才能查看评价

 

查看网页源代码

 

可以看到无法加载出关键评论信息

F12查看评论的具体代码,如下图找到评论列表,找到url和request payload

 

 

至此已经获取了网址最重要的内容

直接上完整代码

  1. import requests
  2. import json
  3. import time
  4. import csv
  5. import re
  6. c=open(r'D:\guifeng.csv','a+',newline='',encoding='utf-8')
  7. fieldnames=['user','time','score','content']
  8. writer=csv.DictWriter(c,fieldnames=fieldnames)
  9. writer.writeheader()
  10. head = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0'}
  11. postUrl = "https://sec-m.ctrip.com/restapi/soa2/12530/json/viewCommentList"
  12. data_1 = {
  13. "pageid": "290510",
  14. "viewid": "127481",
  15. "tagid": "-11",
  16. "pagenum": "1",
  17. "pagesize": "10",
  18. "contentType": "json",
  19. "SortType": "1",
  20. "head": {
  21. "appid": "100013776",
  22. "cid": "09031010311083118856",
  23. "ctok": "",
  24. "cver": "1.0",
  25. "lang": "01",
  26. "sid": "8888",
  27. "syscode": "09",
  28. "auth": "",
  29. "extension": [
  30. {
  31. "name": "protocal",
  32. "value": "https"
  33. }
  34. ]
  35. },
  36. "ver": "7.10.3.0319180000"
  37. }
  38. html = requests.post(postUrl, data=json.dumps(data_1)).text
  39. html = json.loads(html)
  40. jingqu = '龟峰'
  41. pages = html['data']['totalpage']
  42. datas = []
  43. for j in range(pages):
  44. data1 = {
  45. "pageid": "290510",
  46. "viewid": "127481",
  47. "tagid": "-11",
  48. "pagenum": str(j + 1),
  49. "pagesize": "10",
  50. "contentType": "json",
  51. "SortType": "1",
  52. "head": {
  53. "appid": "100013776",
  54. "cid": "09031010311083118856",
  55. "ctok": "",
  56. "cver": "1.0",
  57. "lang": "01",
  58. "sid": "8888",
  59. "syscode": "09",
  60. "auth": "",
  61. "extension": [
  62. {
  63. "name": "protocal",
  64. "value": "https"
  65. }
  66. ]
  67. },
  68. "ver": "7.10.3.0319180000"
  69. }
  70. datas.append(data1)
  71. for k in datas[:50]:
  72. print('正在抓取第' + k['pagenum'] + "页")
  73. time.sleep(3)
  74. html1 = requests.post(postUrl, data=json.dumps(k)).text
  75. html1 = json.loads(html1)
  76. comments = html1['data']['comments']
  77. for i in comments:
  78. user = i['uid']
  79. time1 = i['date']
  80. score = i['score']
  81. content = i['content']
  82. content = re.sub(" ", "", content)
  83. content = re.sub("
  84. ", "", content)
  85. writer.writerow({'user': user,'time':time1,'score': score,'content':content})
  86. c.close()

 

按F5直接运行得出文件(自动存储在D盘里)

 

右键以记事本打开(如果使用excel需要先另存为否则初次打开会是乱码)

 

关键步骤解读

postUrl = "https://sec-m.ctrip.com/restapi/soa2/12530/json/viewCommentList"

这个网址是评论的通用网址不需要改动

可以改动的地方为:

c=open(r'D:\guifeng.csv','a+',newline='',encoding='utf-8')

存储的路径可以自定义,这里我直接用的是D盘

  1. data_1 = {
  2. "pageid": "290510",
  3. "viewid": "127481",
  4. "tagid": "-11",
  5. "pagenum": "1",
  6. "pagesize": "10",
  7. "contentType": "json",
  8. "SortType": "1",
  9. "head": {
  10. "appid": "100013776",
  11. "cid": "09031010311083118856",
  12. "ctok": "",
  13. "cver": "1.0",
  14. "lang": "01",
  15. "sid": "8888",
  16. "syscode": "09",
  17. "auth": "",
  18. "extension": [
  19. {
  20. "name": "protocal",
  21. "value": "https"
  22. }
  23. ]
  24. },
  25. "ver": "7.10.3.0319180000"
  26. }

具体数据就是如下图需爬取网页评论代码里红圈的部分

 

同样的这个也是

  1. data1 = {
  2. "pageid": "290510",
  3. "viewid": "127481",
  4. "tagid": "-11",
  5. "pagenum": str(j + 1),
  6. "pagesize": "10",
  7. "contentType": "json",
  8. "SortType": "1",
  9. "head": {
  10. "appid": "100013776",
  11. "cid": "09031010311083118856",
  12. "ctok": "",
  13. "cver": "1.0",
  14. "lang": "01",
  15. "sid": "8888",
  16. "syscode": "09",
  17. "auth": "",
  18. "extension": [
  19. {
  20. "name": "protocal",
  21. "value": "https"
  22. }
  23. ]
  24. },
  25. "ver": "7.10.3.0319180000"
  26. }
  27. datas.append(data1)

注意:

 "pagenum": str(j + 1),

这一步不可更改

最后

  1. for k in datas[:50]:
  2. print('正在抓取第' + k['pagenum'] + "页")
  3. time.sleep(3)

这里的爬取的页数50是可以更改的

时间间隔3也是可以更改的

至此可以成功爬取携程上任意一家的评论,yes!!!

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:一千口水牛

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

闽ICP备14008679号