Python 爬虫备份人人状态(及评论)

一点碎碎念

话说周围还在用人人网的人真是越来越少了,有一天闲来无事打开人人,发现最新的状态还是2013年12月的,好多好友也已经不怎么联系了,真是物是人非啊。翻了翻自己的状态,都是大学本科时发的,感觉挺有纪念意义的,就想着有空写个爬虫把自己的状态抓下来做个备份,万一哪天人人挂了,还能给自己的大学生活留个念想……

成果

断断续续花费了几晚上的时间(真的是太慢了,orz……),写出了代码,并成功抓取了自己的所有人人状态,代码放在 GitHub https://github.com/renzongxian/backup-renren-status 上,欢迎大家提建议。运行该代码后,状态信息会保存到文件中,样式如下

过程

前期学习

由于抓取人人状态需要登录,我参考了 http://xlzd.me/2016/01/12/python-crawler-08http://www.jianshu.com/p/5c9855ca6474 这两篇文章。又由于状态信息不是直接写在 html 文件中,而是使用 XMLHttpRequest 请求服务器得到 json 数据后再对网页进行局部更新,我阅读了 http://xlzd.me/2015/12/19/python-crawler-04 这篇文章对该种情况下的抓取方式进行学习,在此感谢两位作者。

模拟登录

使用 Chrome 的开发者工具抓取登录过程中的 XHR 类型的数据包,如下图,可以看到 Request URL: http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=201604193796 ,以及请求的方式:POST。URL 最后是uniqueTimestamp,从字面意思理解是时间戳。根据参考的第二篇文章,知道它的组成为“年(2016),月(0,范围为0~11),星期(4,范围为0~6),时(19,范围为0~23),秒(37,范围为0~59),毫秒(96,范围为0~999)”,接下来就只需用 Python 中对应的时间函数表示出来,详见代码 login 函数部分。根据自己的测试,感觉人人的服务器没有对时间戳进行校验,也就是说,自己任意生成的时间戳(不一定是当前时间)也能登录成功。

请求的方式为 POST ,那么发送请求的时候需要携带登录相关的信息,如下图所示。emal 就是你的邮箱/手机/用户名,password 是经过处理的密码,但是我也没有找到进行该处理的 js 代码,后来发现直接使用密码原文即可登录成功,r_key的值貌似跟 token 有关,但不使用也能登录,最后发现,只需要 email 和 password 两个字段就好了。然后可以根据 Response 的 Headers 是狗含有 id 信息判断是否登录成功(可能还有其他方法判断)。

抓取状态信息

同样使用 Chrome 的开发者工具,抓取跳转到状态页( http://status.renren.com/status/v7/$id号 )的数据包,如下图所示。可以看到 Request URL 以及请求方式,由于 Request URL 中有很多参数,我将它复制下来在新的标签页里打开,然后不断删除参数,最后发现只有“userId”及“curpage”两个参数是必须的,这样就可以将 Request URL 构造出来。

该请求的 Response 是 json 数据,通过 Preview 标签可以清楚的看到其结构,其中状态在 doingArray 中,然后,使用 Python 的 json 库可以很方便的提取自己想要的信息。我主要提取了 dtime(发表时间)、content(状态内容);如果是转发的状态,还会有 rootDoingUserName(发表原状态的用户名)、rootContent(原状态内容);如果有评论(这时 comment_count > 0),则再抓取评论,抓取方式跟状态的抓取方式类似,也是跳转到评论页时抓包得到 Request URL,然后写代码对不同的状态构造相应的评论的 Request URL 提取 Response 的 json 数据中的信息,如 authorName(评论者用户名)、time(评论时间)、content(评论内容)。

?

时间: 2024-10-14 23:23:54

Python 爬虫备份人人状态(及评论)的相关文章

Python爬虫 获得淘宝商品评论

自从写了第一个sina爬虫,便一发不可收拾.进入淘宝评论爬虫正题: 在做这个的时候,也没有深思到底爬取商品评论有什么用,后来,爬下来了数据.觉得这些数据可以用于帮助分析商品的评论,从而为用户选择商品提供一定的可参考数据. 找评论所在真实url:有了前面爬搜狗图片的经验,面对找资料的url这件事,找他的速度是比第一次快了不少.首先进宝贝页面,如图 发现评论与搜狗图片类似,均为动态刷新.因此,F12(开发者选项)>>Notework>>F5(刷新)>>feedRateLis

Python爬虫入门教程 33-100 电影评论数据抓取 scrapy

1. 海王评论数据爬取前分析 海王上映了,然后口碑炸了,对咱来说,多了一个可爬可分析的电影,美哉~ 摘录一个评论 零点场刚看完,温导的电影一直很不错,无论是速7,电锯惊魂还是招魂都很棒.打斗和音效方面没话说非常棒,特别震撼.总之,DC扳回一分( ̄▽ ̄).比正义联盟好的不止一点半点(我个人感觉).还有艾梅伯希尔德是真的漂亮,温导选的人都很棒.真的第一次看到这么牛逼的电影 转场特效都吊炸天 2. 海王案例开始爬取数据 数据爬取的依旧是猫眼的评论,这部分内容咱们用把牛刀,scrapy爬取,一般情况下,

python制作爬虫爬取京东商品评论教程

作者:蓝鲸 类型:转载 本文是继前2篇Python爬虫系列文章的后续篇,给大家介绍的是如何使用Python爬取京东商品评论信息的方法,并根据数据绘制成各种统计图表,非常的细致,有需要的小伙伴可以参考下 本篇文章是python爬虫系列的第三篇,介绍如何抓取京东商城商品评论信息,并对这些评论信息进行分析和可视化.下面是要抓取的商品信息,一款女士文胸.这个商品共有红色,黑色和肤色三种颜色, 70B到90D共18个尺寸,以及超过700条的购买评论. 京东商品评论信息是由JS动态加载的,所以直接抓取商品详

[Python爬虫] Selenium爬取新浪微博移动端热点话题及评论 (下)

这篇文章主要讲述了使用python+selenium爬取新浪微博的热点话题和评论信息.其中使用该爬虫的缺点是效率极低,傻瓜式的爬虫,不能并行执行等,但是它的优点是采用分析DOM树结构分析网页源码并进行信息爬取,同时它可以通过浏览器进行爬取中间过程的演示及验证码的输入.这篇文章对爬虫的详细过程就不再论述了,主要是提供可运行的代码和运行截图即可.希望文章对你有所帮助吧~ 参考文章 [python爬虫] Selenium爬取新浪微博内容及用户信息 [Python爬虫] Selenium爬取新浪微博客户

[Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

一. 文章介绍 前一篇文章"[python爬虫] Selenium爬取新浪微博内容及用户信息"简单讲述了如何爬取新浪微博手机端用户信息和微博信息. 用户信息:包括用户ID.用户名.微博数.粉丝数.关注数等. 微博信息:包括转发或原创.点赞数.转发数.评论数.发布时间.微博内容等. 它主要通过从文本txt中读取用户id,通过"URL+用户ID" 访问个人网站,如柳岩: http://weibo.cn/guangxianliuya 因为手机端数据相对精简简单,所以采用输

Python 爬虫批量下载美剧 from 人人影视 HR-HDTV

本人比較喜欢看美剧.尤其喜欢人人影视上HR-HDTV 的 1024 分辨率的高清双字美剧,这里写了一个脚本来批量获得指定美剧的全部 HR-HDTV 的 ed2k下载链接.并依照先后顺序写入到文本文件,供下载工具进行批量下载.比方用迅雷.先打开迅雷,然后复制全部下载链接到剪切板,迅雷会监视剪切板来新建全部任务.假设迅雷没有自己主动监视,能够自己点击新建然后粘贴链接.Python源码例如以下.用的是Python3 : # python3 实现,以下的实例 3 部美剧爬完大概要 10 s import

Python爬虫系列 - 初探:爬取旅游评论

Python爬虫目前是基于requests包,下面是该包的文档,查一些资料还是比较方便. http://docs.python-requests.org/en/master/ 爬取某旅游网站的产品评论,通过分析,获取json文件需要POST指令.简单来说: GET是将需要发送的信息直接添加在网址后面发送 POST方式是发送一个另外的内容到服务器 那么通过POST发送的内容可以大概有三种,即form.json和multipart,目前先介绍前两种 1.content in form Content

python爬虫爬取微博评论案例详解

这篇文章主要介绍了python爬虫爬取微博评论,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 数据格式:{"name":评论人姓名,"comment_time":评论时间,"comment_info":评论内容,"comment_url":评论人的主页} 以上就是我们需要的信息. 具体操作流程: 我们首相将主页获取完成以后,我们就会发现,其中 的内容带有相

python爬虫:使用urllib.request和BeautifulSoup抓取新浪新闻标题、链接和主要内容

案例一 抓取对象: 新浪国内新闻(http://news.sina.com.cn/china/),该列表中的标题名称.时间.链接. 完整代码: from bs4 import BeautifulSoup import requests url = 'http://news.sina.com.cn/china/' web_data = requests.get(url) web_data.encoding = 'utf-8' soup = BeautifulSoup(web_data.text,'