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的Django框架加载模版的方式
Jul 20 Python
Python将多个excel表格合并为一个表格
Feb 22 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
python实现NB-IoT模块远程控制
Jun 20 Python
python中的常量和变量代码详解
Jul 25 Python
20行python代码实现人脸识别
May 05 Python
python同时替换多个字符串方法示例
Sep 17 Python
Centos7 下安装最新的python3.8
Oct 28 Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Apr 04 Python
Python列表的索引与切片
Apr 07 Python
Python用any()函数检查字符串中的字母以及如何使用all()函数
Apr 14 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简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
cloudgamer出品ImageZoom 图片放大效果
2010/04/01 Javascript
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
JS替换字符串中字符即替换全部而不是第一个
2014/06/04 Javascript
JS实现一个列表中包含上移下移删除等功能
2014/09/24 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
JS实现动态生成表格并提交表格数据向后端
2020/11/25 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
2017/03/22 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
Python Django Cookie 简单用法解析
2019/08/13 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
python合并多个excel文件的示例
2020/09/23 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
向国旗敬礼活动总结范文2014
2014/09/27 职场文书
《家》读后感:万惜拯救,冷暖自知
2019/09/25 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
python 如何获取页面所有a标签下href的值
2021/05/06 Python
pandas取dataframe特定行列的实现方法
2021/05/24 Python
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android
postgresql中如何执行sql文件
2023/05/08 PostgreSQL