python 爬取马蜂窝景点翻页文字评论的实现


Posted in Python onJanuary 20, 2020

使用Chrome、python3.7、requests库和VSCode进行爬取马蜂窝黄鹤楼的文字评论(http://www.mafengwo.cn/poi/5426285.html)。

首先,我们复制一段评论,查看网页源代码,按Ctrl+F查找,发现没有找到评论,说明评论内容不在http://www.mafengwo.cn/poi/5426285.html页面。

python 爬取马蜂窝景点翻页文字评论的实现

回到页面,划到评论列表,右键检查,选择Network,然后点击后一页翻页,观察Network里的变化,我们要爬的文件就在下面的某个文件里(主要找XHR和JS两个模块)。选择Preview可以更好的让我们寻找我们想要的文件,然后选择Headers找到我们要爬的url。

python 爬取马蜂窝景点翻页文字评论的实现

python 爬取马蜂窝景点翻页文字评论的实现

经过分析我们找到要爬取的url是http://pagelet.mafengwo.cn/poi/pagelet/poiCommentListApi?callback=jQuery18102698237405245767_1579401525334¶ms=%7B%22poi_id%22%3A%225426285%22%2C%22page%22%3A2%2C%22just_comment%22%3A1%7D&_ts=1579402072160&sn=20e98d65a0&=1579402072161
然而点进去是这样的

python 爬取马蜂窝景点翻页文字评论的实现

这个时候对比一下这两个页面的Request Headers,发现原页面多了个Refer参数

原页面

python 爬取马蜂窝景点翻页文字评论的实现

python 爬取马蜂窝景点翻页文字评论的实现

然后看一下请求get请求需要的参数Query String Parameters,其中poi_id是景点id,page是评论页面(翻页只用改变page的值就行)。

python 爬取马蜂窝景点翻页文字评论的实现

import re
import time
import requests
#评论内容所在的url,?后面是get请求需要的参数内容
comment_url='http://pagelet.mafengwo.cn/poi/pagelet/poiCommentListApi?'

requests_headers={
  'Referer': 'http://www.mafengwo.cn/poi/5426285.html',
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
}#请求头

for num in range(1,6):
  requests_data={
    'params': '{"poi_id":"5426285","page":"%d","just_comment":1}' % (num)  #经过测试只需要用params参数就能爬取内容
    }
  response =requests.get(url=comment_url,headers=requests_headers,params=requests_data)
  if 200==response.status_code:
    page = response.content.decode('unicode-escape', 'ignore').encode('utf-8', 'ignore').decode('utf-8')#爬取页面并且解码
    page = page.replace('\\/', '/')#将\/转换成/
    #日期列表
    date_pattern = r'<a class="btn-comment _j_comment" title="添加评论">评论</a>.*?\n.*?<span class="time">(.*?)</span>'
    date_list = re.compile(date_pattern).findall(page)
    #星级列表
    star_pattern = r'<span class="s-star s-star(\d)"></span>'
    star_list = re.compile(star_pattern).findall(page)
    #评论列表
    comment_pattern = r'<p class="rev-txt">([\s\S]*?)</p>'
    comment_list = re.compile(comment_pattern).findall(page)
    for num in range(0, len(date_list)):
      #日期
      date = date_list[num]
      #星级评分
      star = star_list[num]
      #评论内容,处理一些标签和符号
      comment = comment_list[num]
      comment = str(comment).replace(' ', '')
      comment = comment.replace('<br>', '')
      comment = comment.replace('<br />', '')
      print(date+"\t"+star+"\t"+comment)
  else:
    print("爬取失败")

结果

python 爬取马蜂窝景点翻页文字评论的实现

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中pygame针对游戏窗口的显示方法实例分析(附源码)
Nov 11 Python
python实现字符串连接的三种方法及其效率、适用场景详解
Jan 13 Python
Python中查看文件名和文件路径
Mar 31 Python
在centos7中分布式部署pyspider
May 03 Python
解决python读取几千万行的大表内存问题
Jun 26 Python
python版本五子棋的实现代码
Dec 11 Python
python 获取毫秒数,计算调用时长的方法
Feb 20 Python
利用Python+阿里云实现DDNS动态域名解析的方法
Apr 01 Python
python pandas时序处理相关功能详解
Jul 03 Python
kafka监控获取指定topic的消息总量示例
Dec 23 Python
python属于解释型语言么
Jun 15 Python
Python全局变量与global关键字常见错误解决方案
Oct 05 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 #Python
win10安装tensorflow-gpu1.8.0详细完整步骤
Jan 20 #Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
Jan 20 #Python
基于Python获取照片的GPS位置信息
Jan 20 #Python
如何基于pythonnet调用halcon脚本
Jan 20 #Python
使用TensorFlow对图像进行随机旋转的实现示例
Jan 20 #Python
TensorFLow 不同大小图片的TFrecords存取实例
Jan 20 #Python
You might like
php 中文和编码判断代码
2010/05/16 PHP
PHP运行环境配置与开发环境的配置(图文教程)
2013/06/04 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
Laravel 5框架学习之路由、控制器和视图简介
2015/04/07 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
2017/08/10 PHP
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
JavaScript—window对象使用示例
2013/12/09 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
2017/03/23 jQuery
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
2017/06/16 Python
一款纯css3实现的圆形旋转分享按钮旋转角度可自己调整
2014/09/02 HTML / CSS
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
销售类个人求职信范文
2013/09/25 职场文书
高中军训广播稿
2014/01/14 职场文书
物理教育专业求职信
2014/06/25 职场文书
2014年学校卫生工作总结
2014/11/20 职场文书
学习保证书100字
2015/02/26 职场文书
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang