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通过正则查找微博@(at)用户的方法
Mar 13 Python
Python调用C语言开发的共享库方法实例
Mar 18 Python
使用Python编写一个在Linux下实现截图分享的脚本的教程
Apr 24 Python
Python使用MONGODB入门实例
May 11 Python
浅谈Python单向链表的实现
Dec 24 Python
Python 爬虫图片简单实现
Jun 01 Python
Python实现的文本编辑器功能示例
Jun 30 Python
Python之读取TXT文件的方法小结
Apr 27 Python
Flask框架使用DBUtils模块连接数据库操作示例
Jul 20 Python
Python操作SQLite/MySQL/LMDB数据库的方法
Nov 07 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
Sep 28 Python
Pyside2中嵌入Matplotlib的绘图的实现
Feb 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的开发框架的现状和展望
2007/03/16 PHP
PHP 创建标签云函数代码
2010/05/26 PHP
PHP 第三节 变量介绍
2012/04/28 PHP
PHP设计模式之适配器模式原理与用法分析
2018/04/25 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
jquery UI 1.72 之datepicker
2009/12/29 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
js 触发select onchange事件代码
2014/03/20 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
Vue 使用中的小技巧
2018/04/26 Javascript
vue.js中toast用法及使用toast弹框的实例代码
2018/08/27 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
python实现识别手写数字 python图像识别算法
2020/03/23 Python
Python使用gRPC传输协议教程
2018/10/16 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
基于Python的接口自动化读写excel文件的方法
2021/01/15 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
html5+css3之CSS中的布局与Header的实现
2014/11/21 HTML / CSS
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
AE美国鹰日本官方网站: American Eagle Outfitters
2016/12/10 全球购物
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
大学班级干部的自我评价分享
2014/02/10 职场文书
保险公司晨会主持词
2014/03/22 职场文书
个人评语大全
2014/05/04 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers