前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >对自己的上网搜索记录进行爬虫是怎样一种体验

对自己的上网搜索记录进行爬虫是怎样一种体验

作者头像
CDA数据分析师
发布2018-02-26 15:11:32
1.2K0
发布2018-02-26 15:11:32
举报

原作者 Walker Harrison

编译 CDA 编译团队

本文为  CDA 数据分析师原创翻译作品,转载需授权

前言

国外习惯用 Google 进行搜索,可以毫不夸张的说 Google 已经彻底地融入了日常生活。如今人们一有什么问题都习惯谷歌一下,敲敲键盘,你就能找到想要的答案。

与此同时,你的 Google 搜索记录也反映了某段时间你的心态,好奇心,追求甚至是担忧。如果你已注册了 Google 帐户(通常是 Gmail ),根据你对隐私项的设置, Google 能够记录并提供你的搜索历史。下面我将告诉大家如何获取和分析你的 Google 搜索记录,以及进行数据可视化。

1. 下载数据

首先进入:https://takeout.google.com/settings/takeout,在这里你可以找到各种个人数据集,包括你的 GChat 对话和电子邮件。 取消全选(“全不选”),然后选择“搜索”并点击“下一步”。在下一页,选择文件类型(.tgz )和传递方式。 (我选择通过邮件发送的下载链接)。打开该电子邮件后,点击,下载存档并解压缩,你将得到文件夹“ Takeout ”和“ Searches ”中的一些文件。

2. 准备数据

数据是 JSON 格式,这种格式比较规整,可以通过通过 Python 变成向量:

import json
import os
import datetime
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from collections import Counter

files= os.listdir('Searches')
del files[0]

searches = []
dates = []
for file in files:
    with open('Searches/%s'%(file)) as json_data:
        d = json.load(json_data)
    for i in range(len(d['event'])):
        for j in range(len((d['event'][i][u'query'][u'id']))):
            searches.append(d['event'][i][u'query'][u'query_text']) 
            dates.append(d['event'][i][u'query'][u'id'][j][u'timestamp_usec'])

dates = [datetime.datetime.fromtimestamp(int(i)/1000000).strftime('%Y-%m-%d %H:%M:%S') 
         for i in dates]
searches = [i.encode('utf-8') for i in searches]

3. 分析数据

我们可以看到截止到 2014 年秋季的 886 天内,我总共进行了近 64,000 次 Google 搜索,每天超过 70 次。 我每天在工作时都使用个人笔记本电脑,这能够解释这一巨大的搜索数量,同时也说明我并没有夸大 Google 搜索的普遍性!

数据中有很多值得挖掘的模式。比如每小时搜索数据:

hours = [datetime.datetime.strptime(i, '%Y-%m-%d %H:%M:%S').hour for i in dates]
n, bins, patches = plt.hist(hours, 24, facecolor='blue', alpha=0.75)
plt.xticks([0,6,12,18], ['12 AM','6 AM', '12 PM', '6 PM'], fontsize=18)
plt.xlabel('Hour', fontsize=24)
plt.ylabel('Frequency', fontsize=24)
plt.gcf().set_size_inches(18.5, 10.5, forward=True)
plt.show()

每小时图反映了我的作息规律:当我没有使用 Google 时,很可能我在睡觉。在到达工作地点之后,我开始各种搜索,在下午 3 点左右达到高峰值。晚餐后经过简短的休息,我再次开始搜索,在 10 点左右达到又一个高峰,一直持续到过了凌晨才结束。(我是一只夜猫子)。

我都在 Google 搜索些什么呢?可以对词频进行分析排序:

combo = ' '.join(searches)
freqs = Counter(combo.split())
top = freqs.most_common(40)

words = []
counts = []
for i in range(40):
    words.append(top[i][0])
    counts.append(top[i][1])

words.reverse()
counts.reverse()

plt.barh(range(40), counts, align='center', color='b', alpha=0.75)
plt.yticks(range(40), words, fontsize=16)
plt.gcf().set_size_inches(18.5, 10.5, forward=True)
plt.show()

英文中常常使用的 “the”“of” 可以忽略不计,在列表中仍然可以看到过去几年中我的心路历程。我经常写博客,而且会避免过度使用同一个词,因此会常常搜索同义词。 我住在纽约(“nyc”),常常去健身房(“nysc”)。 我是一个有追求的数据科学家(“data”,“python”,“r”)。 我是典型的美国人(“baseball”,“States”),同时也很关心时事(“trump”)。

当然,时间段对搜索词有很大的影响。人们不会因为相同的原因每天都搜索同一件事,同时也不会每天想同样的事。因此,分析随着时间推移一些特定的词的变化很有意义。这能够让我们了解兴趣和关注点是如何随着时间的推移而变化的:

d = {"search": searches,
    "time": dates}
googled = pd.DataFrame(d)

dt = datetime.datetime(2014, 10, 1)
end = datetime.datetime(2017, 3, 5)
step = datetime.timedelta(days=7)

weekly = []

while dt < end:
    weekly.append(dt.strftime('%Y-%m-%d %H:%M:%S'))
    dt += step

# finding/smoothing/normalizing weekly data only shown for 'trump' but same process applies to the other terms
trump_weeks = []
for i in range(len(weekly)-1):
    trump_weeks.append(sum((googled['time'] > weekly[i]) & 
              (googled['time'] < weekly[i+1]) &
              (googled['search'].str.contains('trump'))))

term = len(trump_weeks)-1
trump_weeks_smooth = [(trump_weeks[i] + trump_weeks[i-1] +trump_weeks[i+1])/3 for i in range(1, term)]
trump_weeks_smooth_norm = [i/float(max(trump_weeks_smooth)) for i in trump_weeks_smooth]

plt.plot(range(term-1), trump_weeks_smooth_norm, label='trump', linewidth=5.0)
plt.plot(range(term-1), warriors_weeks_smooth_norm, label='warriors', linewidth=5.0)
plt.plot(range(term-1), ibm_weeks_smooth_norm, label='ibm', linewidth=5.0)
plt.plot(range(term-1), python_weeks_smooth_norm, label='python', linewidth=5.0)
plt.xticks([30,60,90,120], ['May 2015','November 2015', 'June 2016', 'January 2017'], fontsize=15)
plt.legend()

plt.gcf().set_size_inches(18.5, 10.5, forward=True)
plt.show()

虽然你我素未谋面,但是你完全可以通过这个图来了解我是谁,以及在某段时间内我在想些什么。 毕业后,直到 2015 年夏天我都在 IBM (红色)工作。有好几个月,我一直特别关注金州勇士队创纪录的赛季(绿色)。 在 2016 年春天,我决定学习 Python (浅蓝色)。接近总统选举时,我非常关注特朗普(深蓝色),其中中断了一段时间,直到他的就职典礼又开设重新关注。

结语

读完从这篇文章,会让你感受到 Google 无所不知的强大性。这些反映在从地图到 GChat 对话以及个人日历等数据。个人的电子足迹涵盖了多少讯息,以及谁有权获得这些数据,这都值得我们深思。

但可以肯定的是,你有权查看你的搜索记录,并且了解当中的意义。我们都渐渐失去了在睡前回顾一天做了些什么的习惯,在某种程度上 Google 充当了类似日记的功能,而且反映的内容更真实。

在这里鼓励你试着下载自己的数据,尝试分析。完整的代码链接如下。如果你习惯用的是某度搜索的话,那怪我咯~ https://github.com/WalkerHarrison/Google_searches

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CDA数据分析师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1. 下载数据
  • 2. 准备数据
  • 3. 分析数据
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档