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列表(list)、字典(dict)、字符串(string)基本操作小结
Nov 28 Python
解决PyCharm中光标变粗的问题
Aug 05 Python
python logging日志模块以及多进程日志详解
Apr 18 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
Jun 17 Python
Django基础三之视图函数的使用方法
Jul 18 Python
Python使用tkinter模块实现推箱子游戏
Oct 08 Python
pytorch torchvision.ImageFolder的用法介绍
Feb 20 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
Apr 12 Python
使用keras实现densenet和Xception的模型融合
May 23 Python
python中有函数重载吗
May 28 Python
如何解决pycharm调试报错的问题
Aug 06 Python
python pyg2plot的原理知识点总结
Feb 28 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
BBS(php &amp; mysql)完整版(三)
2006/10/09 PHP
PHP面向对象法则
2012/02/23 PHP
apache配置虚拟主机的方法详解
2013/06/17 PHP
php字符串按照单词进行反转的方法
2015/03/14 PHP
PHP7扩展开发教程之Hello World实现方法示例
2017/08/03 PHP
Yii2语言国际化的配置教程
2018/08/19 PHP
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
使用PyCharm创建Django项目及基本配置详解
2018/10/24 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
CSS3实现跳动的动画效果
2016/09/12 HTML / CSS
不同浏览器创建XMLHttpRequest方法有什么不同
2014/11/17 面试题
幼师专业毕业生自荐信
2013/09/29 职场文书
学生就业推荐信
2013/11/13 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
员工教育培训协议书
2014/09/27 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
羊脂球读书笔记
2015/06/30 职场文书
财务人员入职担保书
2015/09/22 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP
Pygame Time时间控制的具体使用详解
2021/11/17 Python
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python