电影中的社工高手可以很轻易操控目标对象,使其愿意去做某项事(科幻片拍的像玄幻片…),虽然现实没有那么玄幻,但是真实的社工,或者你想要了解某个人,必然会有一个环节就是通过社交网络之类的对目标对象进行建模,即用一些特征来描述目标对象(也可想象为对人贴标签)。举一个例子我们平时如果加了一个新的QQ好友,可能会去QQ空间、腾讯微博等看下他以往的历史记录来确认他是个怎样的人,因为人的思维通常比较简单,所以当接触到一个陌生的人时急切需要在他身上寻找符合某个标签的某个特征,一旦这家伙显现出来某个特征,好,赶紧把对应的标签给他贴上,这样贴几个标签可以确定以后与其相处的策略,虽然可能比较偏激,但大多数人基本上都是这么干的。虽然你们可能没有说过几句话,但经过这么一番调查之后你已经对这个人有了一些比较深入的了解,至少是自以为有深入了解 :)

所以社工这玩意儿基本人人都会,说白了就是信息收集,如果是经常在网络上活动的人,留下的痕迹比较多,甚至有可能画出一条时间轴,能够大致描述他的人生轨迹,这个可以对自己感兴趣的人试一试,个人推荐使用时间轴作为主线的方式来分析。

对于信息收集,其中一个比较小的点就是如何分析一个人的作息规律,从而推测出特定的时间点他很有可能在做什么,比如统计某个人习惯在什么时间点刷知乎、泡论坛之类的,这个我有一个思路就是对于某类信息比较大,比如论坛上的留言,知乎上的点赞之类,可以通过爬虫技术先采集再分析。我想对自己有个更深刻的了解,所以这里就用一个例子,写一个小小的爬虫来分析我发博客的时间分布情况。

首先确定要抓取的字段,其实只需要发布时间字段就可以了,但是想到为了以后可能还会有其它的分析,就把其它方便抓取的字段比如阅读量、评论数之类一并抓取了。

PostMetaInfo:

package cc11001100.crawler;import java.util.Date;/*** @author CC11001100*/
public class PostMetaInfo {private String id;private String title;private Date postTime;// like uv but notprivate Integer visited;private Integer reviewNum;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public Date getPostTime() {return postTime;}public void setPostTime(Date postTime) {this.postTime = postTime;}public Integer getVisited() {return visited;}public void setVisited(Integer visited) {this.visited = visited;}public Integer getReviewNum() {return reviewNum;}public void setReviewNum(Integer reviewNum) {this.reviewNum = reviewNum;}
}

CnBlogPostMetaInfoCrawler:

package cc11001100.crawler;import com.alibaba.fastjson.JSON;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;import static java.util.stream.Collectors.toList;/*** 博客园活跃时间统计** @author CC11001100*/
public class CnBlogPostMetaInfoCrawler {private static final Logger log = LogManager.getLogger(CnBlogPostMetaInfoCrawler.class);private static void grabMetaInfoByUserName(String username) {final String savePath = getSavePathByUserName(username);final String urlPattern = String.format("http://www.cnblogs.com/%s/default.html?page=", username);for (int pageNum = 1; true; pageNum++) {String currentPageListUrl = urlPattern + pageNum;List<PostMetaInfo> parseResultList = parsePostList(currentPageListUrl);if (parseResultList.isEmpty()) {break;}save(parseResultList, savePath);try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {log.info("InterruptedException");}}}private static String getSavePathByUserName(String username) {return "CnBlog_" + username + "_post_meta_info.data";}private static void save(List<PostMetaInfo> postMetaInfoList, String savePath) {List<String> lineList = postMetaInfoList.stream().map(JSON::toJSONString).collect(toList());try {FileUtils.writeLines(new File(savePath), "UTF-8", lineList, "\n", true);} catch (IOException e) {log.info("save list to file={} failed", savePath);}}private static List<PostMetaInfo> parsePostList(String listUrl) {String htmlResponse = getHtml(listUrl);if (StringUtils.isBlank(htmlResponse)) {log.error("url={}, cannot get html content", listUrl);return Collections.emptyList();}Document document = Jsoup.parse(htmlResponse);return document.select(".postDesc").stream().map(elt -> {PostMetaInfo postMetaInfo = new PostMetaInfo();String text = elt.ownText();String id = extractByPattern(elt.select(">a").attr("href"), "postid=(\\d+)");postMetaInfo.setId(id);String title = document.select(String.format("a.postTitle2[href~=/p/%s.html]", postMetaInfo.getId())).text();postMetaInfo.setTitle(title);Date postTime = extractByPatternAndToDate(text, "posted @ (\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2})", "yyyy-MM-dd HH:mm");postMetaInfo.setPostTime(postTime);postMetaInfo.setVisited(extractByPatternAndToInt(text, "阅读\\((\\d+)\\)"));postMetaInfo.setVisited(extractByPatternAndToInt(text, "评论\\((\\d+)\\)"));return postMetaInfo;}).collect(toList());}private static String extractByPattern(String content, String pattern) {Matcher matcher = Pattern.compile(pattern).matcher(content);if (matcher.find()) {return matcher.group(1);}return "";}private static int extractByPatternAndToInt(String content, String extractPattern) {String rawString = extractByPattern(content, extractPattern);try {return Integer.parseInt(rawString);} catch (NumberFormatException e) {log.info("NumberFormatException, string={}", rawString);}return 0;}private static Date extractByPatternAndToDate(String content, String extractPattern, String dateFormatPattern) {String rawString = extractByPattern(content, extractPattern);try {return new SimpleDateFormat(dateFormatPattern).parse(rawString);} catch (ParseException e) {log.info("SimpleDateFormat parse exception, string={}", rawString);}return null;}private static String getHtml(String url) {final int DEFAULT_RETRY_TIMES = 10;for (int i = 1; i <= DEFAULT_RETRY_TIMES; i++) {try {return Jsoup.connect(url).execute().body();} catch (IOException e) {log.info("url={}, retry={}", url, i);}}return "";}private static void show(final String username) {final String savePath = getSavePathByUserName(username);try {List<String> postMetaInfoList = FileUtils.readLines(new File(savePath), "UTF-8");postMetaInfoList.stream().map(postMetaInfo -> JSON.parseObject(postMetaInfo, PostMetaInfo.class).getPostTime().getHours()).collect(Collectors.groupingBy(x -> x)).forEach((k, v) -> {// 柱状图总共使用1000个小条条,根据屏幕大小进行调节选择最舒适的视图int length = (int) (v.size() * 1000.0 / postMetaInfoList.size());System.out.printf("%2s : %s %d\n", k, StringUtils.repeat("=", length), v.size());});} catch (IOException e) {log.info("read file error, path={}", savePath);}}public static void main(String[] args) {final String username = "CC11001100";grabMetaInfoByUserName(username);show(username);}}

上面的代码做的事情就是爬取某个人的所有博客,并将发布时间以小时为单位做一个group by … count,然后使用横向的柱状图画一个简单的图表,我的图表如下:

时间大部分集中在23:00~02:00之间,从上面的图表可以看出这个家伙很经常熬夜,由此恶毒的猜测他应该需要搞点枸杞泡着喝  :(

.

转载于:https://www.cnblogs.com/cc11001100/p/9113925.html

社工入门之如何分析一个人的作息规律相关推荐

  1. 社工要掌握哪些计算机基本操作,【作为一名专业社工哪些方面需要注意】- 环球网校...

    [摘要]环球网校讯 社会工作是一种帮助人和解决社会问题的工作.近年来,新区的发展步伐日益加快,人口不断增加,专业社工人才也日益受人追捧,成为了一种新兴的职业.今年四月,天津滨海新区第二批社工证 [摘要 ...

  2. 互联网黑市分析:社工库的传说

    (本文转自微信公众号:tomsinsight,已获 TOMsInsight 授权.) 任何一个行业都是一个江湖,有江湖就有故事,追名逐利的人喜欢被写入故事,踏实做事的人却希望被隐匿.久而久之,江湖上的 ...

  3. 社会工程学与APT攻击之——社工邮件钓鱼分析

    社工邮件钓鱼分析 在大型企业边界安全做的越来越好的情况下,不管是APT攻击还是红蓝对抗演练,钓鱼和水坑攻击被越来越多的应用.(水坑攻击感觉也很牛掰的样子) 说起钓鱼,突然想起来小薛同学在大一收到一个钓 ...

  4. 【渗透实战】web渗透实战,相对高安全级别下,详细分析整个渗透过程以及介绍社工的巧妙性,拿一站得数十站,(漏洞已交)

    ''' 版权tanee 转发交流请备注 漏洞已经提交管理员 关键过程的截图和脚本代码已经略去.希望大家学习技术和思路就好,切勿进行违法犯罪的活动.本实战案例仅作为技术分享,切勿在未经许可的任何公网站点 ...

  5. 【愚公系列】2023年06月 网络安全(交通银行杯)-文件类型分析和社工

    文章目录 前言 一.文件类型分析 1.文件类型分析1 2.文件类型分析2 3.文件类型分析3 4.文件类型分析4 5.文件类型分析5 6.文件类型分析6 二.社工 1.李四 2.社工帝 3.寓意 4. ...

  6. 警惕“***性社工”现象

    警惕"***性社工"现象<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:offi ...

  7. 开源情报分析(OSINT)CTF社工类2万字题详细教程,请不要利用本文章做不道德的事,后果概不负责

    简介 现在国内外最新的ctf比赛都有这个项目了,列如给你一个照片找地址或者人名,给你一个名字找他的社交账号什么的,考验选手的信息收集与社工能力,这篇文章对这类题型做一个基础的总结,以后遇到这种题型就知 ...

  8. 武大博士后出站后应聘在社区做社工引热议,内卷还是人各有志?

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 本文来源:小时新闻.潇湘晨报.钱江晚报.募格学术此前报道. 博士后去社区做社工,会不会大材小用? 至 ...

  9. 水滴公司启动医务社工高级人才培养计划

    12月26日消息,日前,水滴公司对外宣布,携手中国社会工作教育协会,正式启动"水滴·医务社工高级人才培养计划",就医务社工行业人才培养与科研项目开展多维度合作.医务社工专家代表吴晓 ...

最新文章

  1. JVM调优总结 -Xms -Xmx -Xmn -Xss等
  2. 微服务架构下一致性最佳实践
  3. Securing Spring Cloud Microservices With OAuth2
  4. 使用管控策略,设定多账号组织全局访问边界
  5. vs编译c语言停止工作运行库mt,vc++编译时运行库选择(/MT/MTd/MD/MDd)
  6. PHP涟漪云-蓝奏云挂载直连下载程序源码
  7. 改造二叉树 (长乐一中模拟赛day2T1)
  8. oracle工程师考试题,信息安全工程师考试练习试题及答案(三)
  9. arcgis sample代码之SOE示例代码PageLayout REST Server Object Extension 的源码分析
  10. 如何让大数据分析更有效
  11. [转]phpmyadmin安装使用
  12. 2019.08-2020.06计算机考研指导总结篇
  13. 服务器ftp上传失败的原因有什么
  14. MATLAB读txt
  15. Tomcat使用总结
  16. latex 中文乱码问题
  17. 他人的建议和意见对自已做决定的影响
  18. 5G技术全面融入ROS2新一代机器人操作系统大量成果推出(2020整理翻译版)
  19. 揭秘zData 5.0|如何在海量数据环境下高效运行数据库?
  20. 研究生考试复习有哪些基本的思路或准备?

热门文章

  1. 输入一行字符,将其中的大写字母转换成小写字母,其中的小写字母转换成大写字母C++--tolower、isalpha等函数的使用
  2. 基于 Python 的信用评分模型开发-附数据和代码
  3. Ubuntu18.04安装MySql步骤和坑
  4. 防吃亏必看!民法典中有违常识的法条精选
  5. 游戏模块分析总结(1)之文化内涵篇
  6. Corolado软件峰会关于Geronimo的介绍 1
  7. Python | 阿尔法基本数据类型
  8. 9343拆机 xps13_网友推荐:Dell 戴尔 XPS 13-9343 (i5、128G SSD、板载8G双通道、13寸FHD高清屏)...
  9. 高财商的Maze迷宫勒索病毒组织,才出道一年就赚的盆满钵满
  10. android新消息提醒功能,Android-仿QQ/微信-全局新消息提示