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中用于检查英文字母大写的isupper()方法
May 19 Python
Python实现动态添加属性和方法操作示例
Jul 25 Python
Python基础知识点 初识Python.md
May 14 Python
分析运行中的 Python 进程详细解析
Jun 22 Python
python读csv文件时指定行为表头或无表头的方法
Jun 26 Python
Python中的 ansible 动态Inventory 脚本
Jan 19 Python
python读取yaml文件后修改写入本地实例
Apr 27 Python
python 负数取模运算实例
Jun 03 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
Jul 28 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
Aug 07 Python
Python批量将csv文件转化成xml文件的实例
May 10 Python
Python中第三方库Faker的使用详解
Apr 02 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
一个目录遍历函数
2006/10/09 PHP
Thinkphp的volist标签嵌套循环使用教程
2014/07/08 PHP
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
2015/11/17 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
繁简字转换功能
2006/07/19 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
2013/04/02 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
3种js实现string的substring方法
2015/11/09 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
2017/04/24 jQuery
基于AngularJS的简单使用详解
2017/09/10 Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
2018/05/18 Python
python中的print()输出
2019/04/12 Python
Django ORM filter() 的运用详解
2020/05/14 Python
Html5新增标签与样式及让元素水平垂直居中
2019/07/11 HTML / CSS
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
事业单位请假制度
2014/01/13 职场文书
会计专业导师推荐信
2014/03/08 职场文书
毕业实习单位意见
2015/06/04 职场文书
英语导游欢迎词
2015/09/30 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
Java Spring读取和存储详细操作
2022/08/05 Java/Android
使用CSS实现百叶窗效果示例代码
2023/05/07 HTML / CSS