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常见文件操作的函数示例代码
Nov 15 Python
跟老齐学Python之从格式化表达式到方法
Sep 28 Python
Python连接mysql数据库的正确姿势
Feb 03 Python
python实现感知器算法详解
Dec 19 Python
对python .txt文件读取及数据处理方法总结
Apr 23 Python
Tensorflow中使用tfrecord方式读取数据的方法
Jun 19 Python
Python发送邮件功能示例【使用QQ邮箱】
Dec 04 Python
python带参数打包exe及调用方式
Dec 21 Python
python代码如何注释
Jun 01 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
Jul 03 Python
基于python判断字符串括号是否闭合{}[]()
Sep 21 Python
python数据分析之用sklearn预测糖尿病
Apr 22 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&amp;&amp;mysql)二
2006/10/09 PHP
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
js中的caller和callee属性介绍和例子
2014/06/07 Javascript
jQuery中mouseover事件用法实例
2014/12/26 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
解析AngularJS中get请求URL出现的跨域问题
2016/12/01 Javascript
ie下js不执行的几种可能
2017/02/28 Javascript
基于iScroll实现内容滚动效果
2018/03/21 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
2019/01/24 Javascript
Vue路由前后端设计总结
2019/08/06 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
python机器学习实战之K均值聚类
2017/12/20 Python
python实现屏保计时器的示例代码
2018/08/08 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
Python用input输入列表的实例代码
2020/02/07 Python
简单的Python人脸识别系统
2020/07/14 Python
纯CSS3实现的阴影效果
2014/12/24 HTML / CSS
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
自我鉴定的范文
2013/10/03 职场文书
八年级数学教学反思
2014/01/31 职场文书
《乡愁》教学反思
2014/02/18 职场文书
晚会主持词开场白
2014/03/17 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
建国大业观后感
2015/06/01 职场文书
高一化学教学反思
2016/02/22 职场文书
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android
海弦WR-800F
2022/04/05 无线电