前叙
系列文章:
该系列文章介绍了什么?
1.爬虫分析和处理方法
2.Python中的数据库操作方法
3.Selenium浏览器自动化以及无头浏览器使用方法
4.对数据进行词云分析的方法
5.对数据进行可视化的方法
6.LDA隐含狄利克雷分布模型的建模和使用方法
前言
最近做课设,是一个有关个人隐私安全的课题,在网上找了很多论文,最后上海交通大学的一篇硕士论文《面向社会工程学的SNS分析和挖掘》[1] 给了我很多灵感,因为是对个人隐私安全进行评估,所以我们基于微博社交网络获取的数据进行分析。以下是该系列第一篇文章,记录爬取微博用户信息的过程。
先决条件
我们这次的目标是爬取微博个人用户的资料信息和动态信息并保存在 mysql 数据库中。
因为爬取微博主页 weibo.com/ 或者 m.weibo.cn/ 较为困难,所以我们爬取 weibo.cn,这是一个落后的塞班年代的网页,没有混淆等等一系列新技术,用户动态等从html里面就可以获取,爬取相对来说比较简单。
首先要对网页进行大致分析,获取爬虫的先决条件。
cookies
因为微博对访客进行了限制,所以请求里面没有 cookies 的话动态无法抓取完全。
故我们也需要获取 cookie:
- 用Chrome打开passport.weibo.cn/signin/logi…;
- 按F12键打开Chrome开发者工具;
- 点开“Network”,将“Preserve log”选中,输入微博的用户名、密码,登录
- 点击Chrome开发者工具“Name"列表中的"m.weibo.cn",点击"Headers",其中"Request Headers"下,"Cookie"后的值即为我们要找的cookie值,复制即可
UID
因为我们是抓取用户数据,所以首先应该知道如何获取唯一标识符——uid,每个用户的 uid 是不一样的,有了 uid 我们才可以通过它来标识用户。登录自己的账户以后,我们可以访问用户的资料页(以张亚勤为例),可以看到页面地址为 https://weibo.cn/1645171780/info,其中 "1645171780" 即为张亚勤的 uid,如图所示:
网页分析
获取了 uid 和 cookie ,我们来对网页进行详细分析。
用户资料页源码分析
因为资料页数据量很少,分析和处理都比较容易,所以首先从这里下手。
由上一张图片可以看出,资料页分成 **基本信息 ,学习经历,工作经历,其他信息 ** 四个模块,我们只需要前三个模块就可以了。分析源码的 html ,我们发现 class="tip">
刚好可以标识四个信息模块,而对于每个模块内部的资料条目,class="c"
可以进行一一标识,如图所示:
使用正则表达式进行匹配,关于正则表达式的使用方法,请看我的另一篇文章。代码如下:
tip = re.compile(r'class="tip">(.*?)></div>', re.S) #匹配四个模块所有内容
title = re.compile(r'(.*?)</div><div', re.S) # 匹配基本信息/学习经历/工作经历/其他信息
node = re.compile(r'.*?class="c"(.*?)$', re.S) # 匹配一个模块中的所有内容
info = re.compile(r'>(.*?)<br/', re.S) # 匹配资料条
复制代码
用户动态页源码分析
对于一页的动态来说很好分析,每一条动态内容前面都有 <span class="ctt">
,并且一一对应。而动态发布时间一一对