当前位置:   article > 正文

获取携程网站上指定景点的用户评论数据

获取携程网站上指定景点的用户评论数据

古人说:成功的关键在于坚持不懈,所以小编晚上跟着B站一起学习了,并写出了这篇文章,学习在于努力

本文获取的是携程旅游网站中不同景点的评论数据,

1.导入相应的模块

  1. import requests
  2. import json
  3. import csv

2.定义postUrl变量为携程网站评论数据请求的URL。接着定义urls列表,包含不同景点的poiId和名称

  1. postUrl = "https://m.ctrip.com/restapi/soa2/13444/json/getCommentCollapseList"
  2. # 将景点poiId和名称添加到此处
  3. urls = [
  4. ['76865', '星海广场'],
  5. ['75628', '棒棰岛'],
  6. ['75633', '大连森林动物园'],
  7. ['60514877', '三寰牧场'],
  8. ['75635', '劳动公园'],
  9. ['23035466', '东港音乐喷泉广场'],
  10. ['79494', '海之韵广场'],
  11. ['87618', '金石滩度假区'],
  12. ['87748', '滨海路'],
  13. ['87647', '滨海国家地质公园'],
  14. ['24845945', '莲花山观景台'],
  15. ['92196', '白玉山景区'],
  16. ['13301914', '大连天门山国家森林公园'],
  17. ]

3.遍历urls列表,对于每个景点,首先定义data_pre变量,包含评论数据请求的参数,其中poiId为当前景点的poiId

  1. for id in urls:
  2. print("正在爬取景点:", id[1])
  3. # 通过返回值判断总评论数,每页9条,计算出总页数,对大于2000条的数据只爬取两千条
  4. data_pre = {
  5. "arg": {
  6. "channelType": 2,
  7. "collapseType": 0,
  8. "commentTagId": 0,
  9. "pageIndex": 1,
  10. "pageSize": 10,
  11. "poiId": id[0],
  12. "sourceType": 1,
  13. "sortType": 3,
  14. "starType": 0
  15. },
  16. "head": {
  17. "cid": "09031069112760102754",
  18. "ctok": "",
  19. "cver": "1.0",
  20. "lang": "01",
  21. "sid": "8888",
  22. "syscode": "09",
  23. "auth": "",
  24. "xsid": "",
  25. "extension": []
  26. }
  27. }

4.发送post请求获取该景点评论的总页数,将返回的数据解析为json格式,从中获取评论总数,计算出总页数total_page。如果总页数大于300,则将total_page设置为300。接着遍历1到total_page,对于每一页,定义data变量,包含评论数据请求的参数,其中pageIndex为当前页数。

  1. html = requests.post(postUrl, data=json.dumps(data_pre)).text
  2. html = json.loads(html)
  3. # 确定总页数总页数
  4. total_page = int(html['result']['totalCount'] / 10)
  5. if total_page > 300:
  6. total_page = 300
  7. # 遍历查询评论
  8. print("总页数:", total_page, "爬取中")

5.发送post请求获取评论数据,将返回的数据解析为json格式,从中获取每条评论的内容result,并将其保存到csv文件中。最后输出该景点的名称和爬取完成的提示信息。

  1. # 创建写入csv文件
  2. path = '景点数据.csv'
  3. xuhao = 0
  4. with open(path, 'w', newline='', encoding='utf-8') as f:
  5. file = csv.writer(f)
  6. file.writerow(['序号', '景区ID', '景区名称', '评论'])
  7. for page in range(1, int(total_page) + 1):
  8. data = {
  9. "arg": {
  10. "channelType": 2,
  11. "collapseType": 0,
  12. "commentTagId": 0,
  13. "pageIndex": page,
  14. "pageSize": 10,
  15. "poiId": id[0],
  16. "sourceType": 1,
  17. "sortType": 3,
  18. "starType": 0
  19. },
  20. "head": {
  21. "cid": "09031069112760102754",
  22. "ctok": "",
  23. "cver": "1.0",
  24. "lang": "01",
  25. "sid": "8888",
  26. "syscode": "09",
  27. "auth": "",
  28. "xsid": "",
  29. "extension": []
  30. }
  31. }
  32. html = requests.post(postUrl, data=json.dumps(data)).text
  33. html = json.loads(html)
  34. # 获取评论
  35. for j in range(10):
  36. result = html['result']['items'][j]['content']
  37. file.writerow([xuhao, id[0], id[1], result])
  38. print([xuhao, id[0], id[1], result])
  39. xuhao += 1
  40. print(id[1], "爬取完成")

常用的获取数据工具包括Scrapy、BeautifulSoup、Selenium等。Scrapy是一个Python编写的开源网络爬虫框架,可以快速高效地进行数据爬取,支持多线程、分布式爬取等功能。BeautifulSoup是一个Python库,可以快速解析HTML和XML文档,提取需要的信息。Selenium是一个自动化测试工具,可以模拟人类操作浏览器,对于一些需要登录或滑动验证码的网站爬取非常有用。

除了工具,还有一些常用的技巧可以提高数据爬取的效率。例如,设置合适的请求头可以避免被网站反爬虫机制拦截;使用代理IP可以避免频繁访问同一网站被封禁IP;使用多线程或异步IO可以提高爬取速度等等。同时,还需要注意遵守网站的robots协议和法律法规,不进行恶意爬取和侵犯隐私等行为。

 

 

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

闽ICP备14008679号