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 相关文章推荐
Python2.x版本中maketrans()方法的使用介绍
May 19 Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
Jun 21 Python
学习python 之编写简单乘法运算题
Feb 27 Python
遍历python字典几种方法总结(推荐)
Sep 11 Python
使用PIL(Python-Imaging)反转图像的颜色方法
Jan 24 Python
详解Python连接MySQL数据库的多种方式
Apr 16 Python
Python安装与基本数据类型教程详解
May 29 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
Aug 04 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
Sep 04 Python
python3实现用turtle模块画一棵随机樱花树
Nov 21 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
Python基于Socket实现简易多人聊天室的示例代码
Nov 29 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
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
JavaScript的兼容性与调试技巧
2016/11/22 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
vue项目中导入swiper插件的方法
2018/01/30 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
微信小程序如何连接Java后台
2019/08/08 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
JavaScript 常见的继承方式汇总
2020/09/17 Javascript
在漏洞利用Python代码真的很爽
2007/08/26 Python
Python的动态重新封装的教程
2015/04/11 Python
python实现马耳可夫链算法实例分析
2015/05/20 Python
python比较两个列表大小的方法
2015/07/11 Python
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
python与C、C++混编的四种方式(小结)
2019/07/15 Python
Django框架反向解析操作详解
2019/11/28 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码
2016/12/20 HTML / CSS
销售员自我评价怎么写
2013/09/19 职场文书
工作疏忽检讨书
2014/01/25 职场文书
六查六看自查报告
2014/10/14 职场文书
关于倡议书的范文
2015/04/29 职场文书
安全教育第一课观后感
2015/06/17 职场文书
八年级作文之友情
2019/11/25 职场文书
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android