精华内容
下载资源
问答
  • 2021-12-13 22:33:04

    输入:ababababab(在一行输入,用逗号隔开)

    输出:ab出现了5次

    a,b=input().split(',')
    dict={}
    for i in a:
        dict[i]=dict.get(i,0)+1
    print('{}在{}中出现了{}次'.format(b,a,dict[i]))
    
    

    更多相关内容
  • 微信聊天记录数据分析

    千次阅读 2022-02-20 21:29:36
    2021年2月20日我和我女朋友第次见面,之后开启了我们两个人的故事,时隔一年我想将我们的聊天记录提取出来进行简单的数据分析一下。微信里面有2021年4月20日至2022年2月20日的聊天记录,一共十个月的数据。 ...

    2021年2月20日我和我女朋友第一次见面,之后开启了我们两个人的故事,时隔一年我想将我们的聊天记录提取出来进行简单的数据分析一下。微信里面有2021年4月20日至2022年2月19日的聊天记录,一共十个月的数据。

    二、数据准备

    在网上有许多文章关于可以找到关于如何将微信里面的聊天记录导出成CSV或者txt格式,大家可以去参考。以下就简单的写一下如何将微信的聊天记录提取出来的步骤:
    1.用电脑版微信将手机微信聊天记录备份到电脑上
    2.安装模拟器,将手机微信登录到模拟器的微信上(模拟器本身有root权限)
    3.然后电脑版微信重新登录,恢复聊天记录到模拟器的微信里
    4.模拟器安装RE文件管理器,在文件管理器找到指定文件夹 /data/data/com.tencent.mm/MicroMsg
    5.在MicroMsg文件中找到EnMicroMsg.db复制到/mnt/shell/emulated/0/others中,现在访问windows的 C:\Users\你的用户名\Nox_share\OtherShare 获取该数据库文件EnMicroMsg.db
    6.找微信的uid,/data/data/com.tencent.mm/shared_prefs/ 找到文件auth_info_key_prefs.xml,找到default_uin后面的数字就是微信UID,模拟器里面可以直接看到IMEI
    7.计算数据库查询密码,模拟器IMEI+微信UID在免费MD5在线计算得到的32位小写MD5的前七位就是密码
    8.下载 sqlcipher 的软件,输入密码就可以打开 EnMicroMsg.db 数据库了
    9.之后再软件上直接导出CSV或者txt格式就行啦

    注意:数据库查询密码和微信的版本有关系,不同的坂本解码方法不一样,现在的最新版本 IMEI (手机序列号)为固定值为1234567890ABCDEF,大家可以都去试一下。

    三、数据预处理及描述性统计

    原始数据一共有22列,74019行,说明我们两在10个月的时间里面发了74018条消息,一共306天,平均每天发了241.89条消息,还处于热恋期,嘿嘿。本文用的python进行的数据分析,并附上代码。

    1.要将时间戳转换为北京时间
    2.处理图片和链接等非文字聊天记录
     

    import pandas as pd
    chat = pd.read_csv('D:/chat.csv', sep=',', usecols=[4,6,7,8],encoding="gbk")
    chat.head()
    Out[1]:
    isSendcreateTimetalkercontent
    011.629640e+12wxid_mbw5g1awfkvj22我看看
    101.629640e+12wxid_mbw5g1awfkvj22好可怜,有这样的爹
    201.629640e+12wxid_mbw5g1awfkvj22这五个娃命途多舛
    311.629640e+12wxid_mbw5g1awfkvj22又是白宇和毛晓彤合作
    411.629640e+12wxid_mbw5g1awfkvj22之前有一部,他们俩合作的挺火的剧叫什么来着
    chat.shape

    (74018, 4)

    print(chat.isSend.value_counts())
    0    38269
    1    35749
    Name: isSend, dtype: int64
    

    isSend中为1的是我发的消息,为0的是女朋友发的消息,结果统计一共74018条消息,我发了35749,女朋友发了38269条消息,我比女朋友少发了2520条消息,果真还是我输了。(手动哭哭表情包)

    四、数据分析

    1.聊天小时、日、月分别汇总分布图

    import pandas as pd
    import time
    import seaborn as sns
    import matplotlib.pyplot as plt
    import numpy as np
    from matplotlib.font_manager import *#如果想在图上显示中文,需导入这个包
    chat = pd.read_csv('D:/chat.csv', sep=',', usecols=[6,7,8],encoding="gbk")
    myGirl = 'wxid_mbw5g1awfkvj22'
    chat_time = []
    chat_content = []
    for i in range(len(chat)-1):
        content = chat[i:i+1]
        if content['talker'].values[0] == myGirl:
            t = content['createTime'].values[0]//1000#除以1000用以剔除后三位0
            c = content['content'].values[0]
            chat_time.append(t)
            chat_content.append(c)
    
    def to_hour(t):
        struct_time = time.localtime(t)  # 将时间戳转换为struct_time元组
        hour = round((struct_time[3] + struct_time[4] / 60), 2)
        return hour
    hour_set = [to_hour(i) for i in chat_time]
    myfont = FontProperties(fname=r'C:\Windows\Fonts\MSYH.TTC',size=22)#标题字体样式
    myfont2 = FontProperties(fname=r'C:\Windows\Fonts\MSYH.TTC',size=18)#横纵坐标字体样式
    sns.set_style('darkgrid')#设置图片为深色背景且有网格线
    sns.distplot(hour_set, 24, color='lightcoral')
    plt.xticks(np.arange(0, 25, 1.0), fontsize=15)
    plt.yticks(fontsize=15)
    plt.title('聊天时间分布', fontproperties=myfont)
    plt.xlabel('时间段', fontproperties=myfont2)
    plt.ylabel('聊天时间分布', fontproperties=myfont2)
    fig = plt.gcf()
    fig.set_size_inches(15,8)
    fig.savefig('chat_time.png',dpi=100)
    plt.show()

    从图中我们可以看到聊天最多的时间段为22点到23点,达到了11%以上,一般晚上聊的比较多,其次就是早饭前后和午饭前后聊的也比较多。发现在0点以后还有些聊天记录,下次再分析的时候希望这部分的百分比降低,早睡才能变美哦。

    类似的思想可以绘制出每月的聊天记录,因为图中4月只有10天,2月有19天聊天记录所以比例会小一点,8月和9月聊天记录最多,往后的聊天记录就有略有下降 。

     类似的思想可以绘制每日汇总的柱线图,可以看到1号和16号的聊天记录较多,5号和19号的聊天记录较少,总体分布较均匀。

    图中横坐标为星期几,可以看出分布较均匀,在周末略比工作日的聊天记录多一点。 

    2.聊天时间序列分布图

    def to_date(t):
        timeArray = time.localtime(t)
        otherStyleTime = time.strftime("%Y-%m-%d", timeArray)
        return otherStyleTime
    date_set = [to_date(i) for i in chat_time]
    a=pd.Series(date_set)
    b=a.value_counts()
    data=pd.Series(b)
    data=data.sort_index()
    
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import numpy as np
    import datetime#这个包很关键
    #设定开始和结束时间
    start=datetime.datetime(2021,4,20)
    stop=datetime.datetime(2022,2,20)
    delta=datetime.timedelta(1)#设定日期的间隔
    dates=mpl.dates.drange(start,stop,delta)# 返回浮点型的日期序列,这个是生成时间序列,同理如果是将序列转成日期呢?
    #存在两个问题,一个是坐标轴没有按照日期的形式去标注,另一个是刻度的数量和位置也不合适
    fig=plt.figure(figsize=(24,12))#调整画图空间的大小
    plt.plot(dates,data,linestyle='-',marker='*',c='r',alpha=0.5)#作图
    ax=plt.gca()
    date_format=mpl.dates.DateFormatter('%Y-%m-%d')#设定显示的格式形式
    ax.xaxis.set_major_formatter(date_format)#设定x轴主要格式
    ax.xaxis.set_major_locator(mpl.ticker.MultipleLocator(30))#设定坐标轴的显示的刻度间隔
    fig.autofmt_xdate()#防止x轴上的数据重叠,自动调整。

    图中可以明显的看出聊天的数据量随时间的变化而变化,消息数量呈显波动的趋势。12月份左右数据量明显较少。表格中列出了数据量最多的5天和最少的5天,最多的一天是2021年8月28日,这一天刚好我我去武汉上学在火车上所以发的消息较多,发了804条。最少的是2021年7月22日这一天只发了4条聊天记录,查看了一下改天4条聊天记录都是我发的,那天确实是特殊情况,具体什么情况宝宝应该知道,一共306天每天都有聊天记录。

    3.高频词汇统计

    import pandas as pd
    import time
    import seaborn as sns
    import matplotlib.pyplot as plt
    import numpy as np
    import datetime
    import re
    from matplotlib.font_manager import *#如果想在图上显示中文,需导入这个包
    chat = pd.read_csv('D:/chat.csv', sep=',', usecols=[6,7,8],encoding="gbk")
    myGirl = 'wxid_mbw5g1awfkvj22'
    chat_time = []
    chat_content = []
    for i in range(len(chat)-1):
        content = chat[i:i+1]
        if content['talker'].values[0] == myGirl:
            t = content['createTime'].values[0]//1000#除以1000用以剔除后三位0
            c = content['content'].values[0]
            chat_time.append(t)
            chat_content.append(c)
            
    def to_hour(t):
        struct_time = time.localtime(t)  # 将时间戳转换为struct_time元组
        hour = round((struct_time[3] + struct_time[4] / 60), 2)
        return hour
    pattern_1 = '.*?(宝宝).*?'
    pattern_2= '.*?(晚安).*?'
    pattern_3 = '.*?(吃饭).*?'
    pattern_4 = '.*?(干嘛).*?'
    pattern_5= '.*?(嗯嗯).*?'
    pattern_6='.*?(喜欢).*?'
    pattern_7='.*?(哈哈).*?'
    pattern_8='.*?(早安).*?'
    pattern_9='.*?(爱).*?'
    pattern_set = [pattern_1, pattern_2, pattern_3, pattern_4,pattern_5, pattern_6, pattern_7, 
                   pattern_8,pattern_9]
    
    start = datetime.datetime.now()
    statistic = [0,0,0,0,0,0,0,0,0]
    for i in range(len(chat_content)):
        for j in range(len(pattern_set)):
            length = len(re.findall(pattern_set[j], str(chat_content[i])))
            statistic[j] += length
    result = {
            '宝宝': statistic[0],
            '晚安': statistic[1],
            '吃饭': statistic[2],
            '干嘛': statistic[3],
            '嗯嗯': statistic[4],
            '喜欢': statistic[5],
            '哈哈': statistic[6],
            '早安': statistic[7],
            '爱': statistic[8]
            }
    print(result)
    end = datetime.datetime.now()
    print('\n..........\n字符统计结束,用时: {}\n............\n'.format(end-start))

    {'宝宝': 627, '晚安': 645, '吃饭': 907, '干嘛': 472, '嗯嗯': 2280, '喜欢': 730, '哈哈': 1674, '早安': 9, '爱': 821}

    .......... 字符统计结束,用时: 0:27:56.019124 ............

    可以将自己想要了解的词汇输入上去,然后就能得出一共发了多少条这样的词汇,本文中可以看到晚安一共有645条,一共大概300天的时间,可以看出几乎每天每个人都发了晚安。宝宝也有627次,聊吃饭的话题也挺多的哈,哈哈发了1674次,说明聊天的氛围还是蛮开心的,嘿嘿!

    4.词云图展示

    #因为代码太长,这里只放部分代码,具体的可以自己研究
    def main(input_filename):
        content = '\n'.join([line.strip()
                             for line in codecs.open(input_filename, 'r', 'utf-8')
                             if len(line.strip()) > 0])
        stopwords = set([line.strip()
                         for line in codecs.open(stopwords_filename, 'r', 'utf-8')])
    
        segs = jieba.cut(content)
        words = []
        for seg in segs:
            word = seg.strip().lower()
            if len(word) > 1 and word not in stopwords:
                words.append(word)

    因为是和女朋友的聊天记录所以我采用了粉粉的心形作为词云的底层图案,似乎更加好看而且怀念呢。我们可以看到上面两幅图词云图都可以看出晚安、回来、吃饭、亲亲等词比较明显的出现在图上,看的越清晰说明改词出现的频率越高,在边上也有些关于工作,家庭,生活的话题,几乎覆盖了所有的聊天话题。

    五、其它探索性分析

    因为时间比较有限,除了本文的一些分析外还可以对数据进行预测建模,就是对女朋友的聊天记录的词汇进行预测,预测未来女朋友的一些聊天词汇或者说心情的变化。也可以借助机器学习或者人工智能的手段对数据进行挖掘,通过判断心情词汇,可以更好的知道如何回女朋友的消息才能让女朋友更开心。本文就到此结束了,欢迎大家继续往后面进行研究。

    展开全文
  • 粘贴板历史记录

    千次阅读 2021-07-25 04:32:07
    如何查看剪贴板记录在Windows XP系统中抄查看剪贴板的内容方法:袭右键单击桌面, 选择“新建”命令下的“快捷方式”,弹出对话框,位置域中输入C:/Windows/system32/clipbrd.exe。单击“下一步”直至“完成”。...

    A. 如何查看剪贴板记录

    在Windows XP系统中抄查看剪贴板的内容方法:袭

    右键单击桌面, 选择“新建”命令下的“快捷方式”,弹出对话框,在位置域中输入C:/Windows/system32/clipbrd.exe。单击“下一步”直至“完成”。双击桌面上的快捷方式clipbrd.exe,就能查看剪贴板内容了。

    还可以:在“开始”——“运行”里输入"clipbrd",点确定也能查看。

    但是这些方法的查找剪贴内容有一个缺点就是只能查看最后一次剪贴的内容。

    B. 如何查看系统粘贴板历史记录

    1.按下windows+R键,打开运行程序。

    ea1cff44e9467af75984cdedba7397d5.png

    C. oppo手机粘贴板历史记录怎么找

    需要用到的工具:OPPO R9手机

    以OPPO r9为例,步骤如下:

    1、打开OPPO R9,找到设置并点击,如下图:

    ea1cff44e9467af75984cdedba7397d5.png

    D. 我要怎么才能查看粘贴板历史记录

    你说的剪贴板吧?

    输入面板中点击左上角的图标;

    ea1cff44e9467af75984cdedba7397d5.png

    E. 电脑怎么查看复制粘贴历史记录查找复制粘贴内容

    首先,打开一个word文档。复制文字内容完成,怎么找到刚才复制的文字呢回?点击菜单栏中的【编辑】——答【office剪切板】。右侧就会显示出剪切板复制粘贴记录内容。可以看到刚才复制的内容了。这个word剪切板内容是能够保存很多历史记录的。复制一段话,再看看右侧word剪切板历史记录,可以看到我复制的内容实时显示在这里

    F. 如何查看剪切板里的有历史记录吗

    1、打开电脑里面的抄WORD文件,选中一段文字,点击右键,选择复制按钮。

    ea1cff44e9467af75984cdedba7397d5.png

    G. word怎样查看粘贴板记录

    示例操作步骤如下:

    1、首先打开word文档,进入到主界面。

    ea1cff44e9467af75984cdedba7397d5.png

    H. 怎样可以找回手机粘贴板历史记录

    ①、打来开短信功能输入任意文字(源若不输入,找不到剪贴板);

    ②、在空白处长按,点击全选,剪贴板就出来了;

    ③、点击剪贴板,选择复制文字的区域;

    ④、再点击对话框复制,在输入界面长按后,选择粘贴即可。

    I. win10剪切板历史怎么查看

    可以在设来置中将“剪贴板历史记录”自功能打开,然后同时按住“Ctrl”键和“V”键查看剪贴板历史。

    1、打开win10设置中心,点击“系统”按钮进入系统设置界面:

    ea1cff44e9467af75984cdedba7397d5.png

    展开全文
  • 作为个软件开发者,你一定会对网络应用如何工作有个完整的... 首先嘛,你得浏览器输入要网址:2. 浏览器查找域名的IP地址导航的第步是通过访问的域名找出其IP地址。DNS查找过程如下:* 浏览器缓存 – 浏览器会
    作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等。
    本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样的事~
    1. 首先嘛,你得在浏览器里输入要网址:



    2. 浏览器查找域名的IP地址


    导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下:
    * 浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。
    * 系统缓存 – 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。
    * 路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。
    * ISP DNS 缓存 – 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。
    * 递归搜索 – 你的ISP的DNS服务器从跟域名服务器开始进行递归搜索,从.com顶级域名服务器到Facebook的域名服务器。一般DNS服务器的缓存中会 有.com域名服务器中的域名,所以到顶级服务器的匹配过程不是那么必要了。

    DNS递归查找如下图所示:
    500pxAn_example_of_theoretical_DNS_recursion_svg.png


    DNS有一点令人担忧,这就是像wikipedia.org 或者 facebook.com这样的整个域名看上去只是对应一个单独的IP地址。还好,有几种方法可以消除这个瓶颈:
    * 循环 DNS 是DNS查找时返回多个IP时的解决方案。举例来说,Facebook.com实际上就对应了四个IP地址。
    * 负载平衡器 是以一个特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。 一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。
    * 地理 DNS 根据用户所处的地理位置,通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的服务器不能够更新同步状态,但映射静态内容的话非常好。
    * Anycast 是一个IP地址映射多个物理主机的路由技术。 美中不足,Anycast与TCP协议适应的不是很好,所以很少应用在那些方案中。

    大多数DNS服务器使用Anycast来获得高效低延迟的DNS查找。
    3. 浏览器给web服务器发送一个HTTP请求

    因为像Facebook主页这样的动态页面,打开后在浏览器缓存中很快甚至马上就会过期,毫无疑问他们不能从中读取。
    所以,浏览器将把一下请求发送到Facebook所在的服务器
    GET HTTP://facebook.com/ HTTP/1.1
    Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
    User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; [...]
    Accept-Encoding: gzip, deflate
    Connection: Keep-Alive
    Host: facebook.com
    Cookie: datr=1265876274-[...]; locale=en_US; lsd=WW[...]; c_user=2101[...]

    GET 这个请求定义了要读取的URL: “HTTP://facebook.com/”。 浏览器自身定义 (User-Agent 头), 和它希望接受什么类型的相应 (Accept and Accept-Encoding 头). Connection头要求服务器为了后边的请求不要关闭TCP连接。
    请求中也包含浏览器存储的该域名的cookies。可能你已经知道,在不同页面请求当中,cookies是与跟踪一个网站状态相匹配的键值。这样cookies会存储登录用户名,服务器分配的密码和一些用户设置等。Cookies会以文本文档形式存储在客户机里,每次请求时发送给服务器
    用来看原始HTTP请求及其相应的工具很多。作者比较喜欢使用fiddler,当然也有像FireBug这样其他的工具。这些软件在网站优 化时会帮上很大忙。
    除了获取请求,还有一种是发送请求,它常在提交表单用到。发送请求通过URL传递其参数(e.g.:HTTP://robozzle.com/puzzle.aspx?id=85)。发送请求在请求正文头之后发送其参数。

    像“HTTP://facebook.com/”中的斜杠是至关重要的。这种情况下,浏览器能安全的添加斜杠。而像“HTTP: //example.com/folderOrFile”这样的地址,因为浏览器不清楚folderOrFile到底是文件夹还是文件,所以不能自动添加 斜杠。这时,浏览器就不加斜杠直接访问地址,服务器会响应一个重定向,结果造成一次不必要的握手。
    4. facebook服务的永久重定向响应

    图中所示为Facebook服务器发回给浏览器的响应:
    HTTP/1.1 301 Moved Permanently
    Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0,
    pre-check=0
    Expires: Sat, 01 Jan 2000 00:00:00 GMT
    Location: HTTP://www.facebook.com/
    P3P: CP=”DSP LAW”
    Pragma: no-cache
    Set-Cookie: made_write_conn=deleted; expires=Thu, 12-Feb-2009 05:09:50 GMT;
    path=/; domain=.facebook.com; httponly
    Content-Type: text/html; charset=utf-8
    X-Cnection: close
    Date: Fri, 12 Feb 2010 05:09:51 GMT
    Content-Length: 0

    服务器给浏览器响应一个301永久重定向响应,这样浏览器就会访问“HTTP://www.facebook.com/” 而非“HTTP://facebook.com/”。
    为什么服务器一定要重定向而不是直接发会用户想看的网页内容呢?这个问题有好多有意思的答案。
    其中一个原因跟搜索引擎排名有 关。你看,如果一个页面有两个地址,就像HTTP://www.igoro.com/ 和HTTP://igoro.com/,搜索引擎会认为它们是两个网站,结果造成每一个的搜索链接都减少从而降低排名。而搜索引擎知道301永久重定向是 什么意思,这样就会把访问带www的和不带www的地址归到同一个网站排名下。
    还有一个是用不同的地址会造成缓存友好性变差。当一个页面有好几个名字时,它可能会在缓存里出现好几次。
    5. 浏览器跟踪重定向地址


    现在,浏览器知道了 “HTTP://www.facebook.com/”才是要访问的正确地址,所以它会发送另一个获取请求:
    GET HTTP://www.facebook.com/ HTTP/1.1
    Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
    Accept-Language: en-US
    User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; [...]
    Accept-Encoding: gzip, deflate
    Connection: Keep-Alive
    Cookie: lsd=XW[...]; c_user=21[...]; x-referer=[...]
    Host: www.facebook.com

    头信息以之前请求中的意义相同。
    6. 服务器“处理”请求


    服务器接收到获取请求,然后处理并返回一个响应。
    这表面上看起来是一个顺向的任务,但其实这中间发生了很多有意思的东西- 就像作者博客这样简单的网站,何况像facebook那样访问量大的网站呢!
    * Web 服务器软件web服务器软件(像IIS和阿帕奇)接收到HTTP请求,然后确定执行什么请求处理来处理它。请求处理就 是一个能够读懂请求并且能生成HTML来进行响应的程序(像ASP.NET,PHP,RUBY…)。
    举 个最简单的例子,需求处理可以以映射网站地址结构的文件层次存储。像HTTP://example.com/folder1/page1.aspx这个地 址会映射/httpdocs/folder1/page1.aspx这个文件。web服务器软件可以设置成为地址人工的对应请求处理,这样 page1.aspx的发布地址就可以是HTTP://example.com/folder1/page1* 请求处理请求处理阅读 请求及它的参数和cookies。它会读取也可能更新一些数据,并讲数据存储在服务器上。然后,需求处理会生成一个HTML响应。
    所 有动态网站都面临一个有意思的难点 -如何存储数据。小网站一半都会有一个SQL数据库来存储数据,存储大量数据和/或访问量大的网站不得不找一些办法把数据库分配到多台机器上。解决方案有:sharding (基于主键值讲数据表分散到多个数据库中),复制,利用弱语义一致性的简化数据库。
    委托工作给批处理是一个廉价保持数据更新的技术。举例来讲,Fackbook得及时更新新闻feed,但数据支持下的“你可能认识的人”功能只需要每晚更新(作者猜测是这样的,改功能如何完善不得而知)。批处理作业更新会导致一些不太重要的数据陈旧,但能使数据更新耕作更快更简洁。7. 服务器发回一个HTML响应


    图中为服务器生成并返回的响应:
    HTTP/1.1 200 OKCache-Control: private, no-store, no-cache, must-revalidate, post-check=0,pre-check=0Expires: Sat, 01 Jan 2000 00:00:00 GMTP3P: CP=”DSP LAW”Pragma: no-cacheContent-Encoding: gzipContent-Type: text/html; charset=utf-8X-Cnection: closeTransfer-Encoding: chunkedDate: Fri, 12 Feb 2010 09:05:55 GMT
    2b3Tn@[...]
    整个响应大小为35kB,其中大部分在整理后以blob类型传输。
    内容编码头告诉浏览器整个响应体用 gzip算法进行压缩。解压blob块后,你可以看到如下期望的HTML:
    HTTP://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>lang=”en” id=”facebook”>

    关于压缩,头信息说明了是否缓存这个页面,如果缓存的话如何去做,有什么cookies要去设置(前面这个响应里没有这点)和隐私信息等 等。
    请注意报头中把Content-type设置为“text/html”。报头让浏览器将该响应内容以HTML形式呈现,而不是以文件形式下 载它。浏览器会根据报头信息决定如何解释该响应,不过同时也会考虑像URL扩展内容等其他因素。8. 浏览器开始显示HTML
    在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了:


    9. 浏览器发送获取嵌入在HTML中的对象


    在浏览器显示HTML时,它会注意到需要获取其他地址内容的标签。这时,浏览器会发送一个获取请求来重新获得这些文件。
    下面是几个我们访问facebook.com时需要重获取的几个URL:
    * 图片
    HTTP://static.ak.fbcdn.net/rsrc.php/z12E0/hash/8q2anwu7.gif
    HTTP://static.ak.fbcdn.net/rsrc.php/zBS5C/hash/7hwy7at6.gif
    * CSS 式样表
    HTTP://static.ak.fbcdn.net/rsrc.php/z448Z/hash/2plh8s4n.css
    HTTP://static.ak.fbcdn.net/rsrc.php/zANE1/hash/cvtutcee.css
    * JavaScript 文件
    HTTP://static.ak.fbcdn.net/rsrc.php/zEMOA/hash/c8yzb6ub.js
    HTTP://static.ak.fbcdn.net/rsrc.php/z6R9L/hash/cq2lgbs8.js

    这些地址都要经历一个和HTML读取类似的过程。所以浏览器会在DNS中查找这些域名,发送请求,重定向等等…
    但不像动态页面那样,静态文件会允许浏览器对其进行缓存。有的文件可能会不需要与服务器通讯,而从缓存中直接读取。服务器的响应中包含了静态文件保存的期限信息,所以浏览器知道要把它们缓存多长时间。还有,每个响应都可能包含像版本号一样工作的ETag头(被请求变量的实体值),如果浏览器观察到文件的版本 ETag信息已经存在,就马上停止这个文件的传输。
    试着猜猜看“fbcdn.net”在地址中代表什么?聪明的答案是”Facebook内容分发网络”。Facebook利用内容分发网络 (CDN)分发像图片,CSS表和 JavaScript文件这些静态文件。所以,这些文件会在全球很多CDN的数据中心中留下备份。
    静态内容往往代表站点的带宽大小,也能通过CDN轻松的复制。通常网站会使用第三方的CDN。例如,Facebook的静态文件由最大的 CDN提供商Akamai来托管。
    举例来讲,当你试着ping static.ak.fbcdn.net的时候,可能会从某个akamai.net服务器上获得响应。有意思的是,当你同样再ping一次的时候,响应的 服务器可能就不一样,这说明幕后的负载平衡开始起作用了。10. 浏览器发送异步(AJAX)请求


    在Web 2.0伟大精神的指引下,页面显示完成后客户端仍与服务器端保持着联系。
    以 Facebook聊天功能为例,它会持续与服务器保持联系来及时更新你那些亮亮灰灰的好友状态。为了更新这些头像亮着的好友状态,在浏览器中执行的 JavaScript代码会给服务器发送异步请求。这个异步请求发送给特定的地址,它是一个按照程式构造的获取或发送请求。还是在Facebook这个例子中,客户端发送给HTTP://www.facebook.com/ajax/chat/buddy_list.php一个发布请求来获取你好友里哪个 在线的状态信息。
    提起这个模式,就必须要讲讲”AJAX”– “异步JavaScript 和 XML”,虽然服务器为什么用XML格式来进行响应也没有个一清二白的原因。再举个例子吧,对于异步请求,Facebook会返回一些 JavaScript的代码片段。
    除了其他,fiddler这个工具能够让你看到浏览器发送的异步请求。事实上,你不仅可以被动的做为这些请求的看客,还能主动出击修改和重 新发送它们。AJAX请求这么容易被蒙,可着实让那些计分的在线游戏开发者们郁闷的了。(当然,可别那样骗人家~)
    Facebook聊天功能提供了关于AJAX一个有意思的问题案例:把数据从服务器端推送到客户端。因为HTTP是一个请求-响应协议,所 以聊天服务器不能把新消息发给客户。取而代之的是客户端不得不隔几秒就轮询下服务器端看自己有没有新消息。
    这些情况发生时长轮询是个减轻服务器负载挺有趣的技术。如果当被轮询时服务器没有新消息,它就不理这个客户端。而当尚未超时的情况下收到了 该客户的新消息,服务器就会找到未完成的请求,把新消息做为响应返回给客户端。总结一下
    希望看了本文,你能明白不同的网络模块是如何协同工作的
    本篇文章来源于 站长资讯网 原文链接:http://www.chinahtml.com/1007/127890385919293_2.html

     

     

     

     

    我们似乎每天都要做这样一件事情,打开一个浏览器,输入网址,回车,一个空白的页面顿时有了东西,它可能是百度之类的搜索页面,或是一个挤满了文字和图片的门户网站。从我们打开浏览器,到我们看到我们想看的内容,这过程究竟发生了什么?
    下面我们就从三个方面理解这个过程,一个是浏览器,二个是服务器,第三个是浏览器和服务器之间通信的协议。在理解这三方面之前我们必须先搞明白将这三方面联系起来的一个词:web。 

    1,world wide web 
    我们通常所说的web就是指world wide web。一般来讲,这一种通过浏览器来访问资源的技术。我们经常说的上网,应该大部都是指的是上万维网(web),但是我们经常将万维网和因特网(Internet)搞混。因特网是一种网络互连的技术,它更指的是物理层面上的互连,而万维网应该算是跑在因特网上的一种服务。
    我们通常通过浏览器还访问web,我们常见到的网页中包含超文本,图片,视频音频等各项内容。向我们提供这些资源的是一个一个的站点,通过互联网,这些站点相互连接起来。我们通过超链接从一个网页访问到另外一个网页,从一个站点到另外一个站点,所有的这一切组成一个庞大的网,这就是web。
    支持web的技术,首先是底层的网络,因为web就是建立在Internet之上,web的基本协议是HTTP协议,它跑在TCP上的协议之上,而TCP协议又需要IP协议的支持,IP协议又要由底层链路来支撑,所以我们可以从高到第看到这样一个协议栈 http->tcp->ip->连路层协议。要理解web到ip就已经足够了。
    我们可以想一想web上的资源有哪些? 首先是文本,后来添加了图片,到现在的各种音频视频资源,所有互联网上的资源都要通过一个叫做URI的东西还标记,当然了我们更常见是URL。现在也不必纠结于两者有何不同,URL就是URI的一个子集,URL给了我们资源的地址,所以我们能够找到它。
    现在看一个URL:这是一个图片的url。它是按照这样的语法来定义:scheme://domain:port/path?query_string#fragment_id.scheme就是协议,在浏览器里通常是http,例子中的是https是一种由HTTP和SSL/TLS组合起来的应用,用以提供加密通信和对网络服务器的身份验证(http://zh.wikipedia.org/zh/HTTPS )。然后就是域名,每个站点都至少有一个域名,上面例子上的域名部分是www.google.com.hk,这个域名也是分为三部分的,www是主机名,com.hk算是顶级域名,除了com还有cn,net等。域名后面是端口号默认为80,通常被省略,这是服务器端服务器软件侦听的端口,也是TCP里面一个端口号的值。然后就是path,资源在服务器上的路径。最后问号部分的客户端利用url传给服务器的一些参数值,通常值比较少,不太重要时这么做。
    2,协议
    (1)HTTP协议
    web里最重要的协议就是HTTP协议,对于经典的ISO七层网络模型来说, HTTP处于最高层--应用层。HTTP应用的模型是client/server模型。因此对应着两种HTTP消息类型,request和response。客户端向服务器发出请求,服务器向客户端发回请求。下面看一下两种类型消息的格式:



     
    下面分别进行解释。
    首先是HTTP Request Message
    请求行:请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本。请求方法常见的有:GET POST HEAD PUT等。
    消息报头:在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。 请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。 请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(eg:有无实体正文)和请求所标识的资源的元信息。 POST请求的内容放在实体正文中。 
    HTTP Response Message
    状态行:最主要的一个字段是服务器响应代码。比如,200 OK ,400 Bad Request ,401 Unauthorized ,403 Forbidden ,404 Not Found ,500 Internal Server Error ,503 Server Unavailable
    消息报头:普通报头和实体报头与 请求报头的类似。有区别的在于响应包头,响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
    (这部分说的比较粗略,网上的资源比较多,可以参考这一篇:http://blog.csdn.net/gueter/article/details/1524447 和http://book.51cto.com/art/200902/109036.htm )
    下面是ethereal抓到的一个get报文,post报文和响应报文,可以大概看一下。
     
     
     
    (2)TCP协议
    HTTP协议基于TCP协议,也就是HTTP的所有内容将作为TCP的实体被封装到TCP报文里面。TCP协议是面向连接,可靠的传输机制。也就是说客户端在与服务器交互数据的过程中会有一个连接建立和释放的过程,看上面的Http头部字段可以看到相关的字段。TCP有强大的窗口机制能够适应发送方和接收方的发送接收能力,也能根据整个网络状况进行调整。
    (3)IP协议
    IP协议处于整个TCP/IP协议族的承上启下地位。我们知道因特网上主机是靠一个32位的ip地址来定位的,HTTP用的URL也算是地址,但是比较高级,IP协议是理解不了的,所以需要一个从URL到IP的转换,这个过程通过DNS(域名查询系统)协议完成。我们用的每一台电脑上都配置了DNS服务器的地址,如果没有配置那么你的网关默认充当了,当我们有一个URL想知道对应的IP时就需要向DNS服务器发送查询请求了,它会把查询的结果发回。
    2,浏览器
    在web的世界里最不能少的角色就是浏览器。前面我们说到HTTP协议,HTTP消息有两种,request和response。浏览器的主要工作就是发送http request报文和接收处理http response报文。没有看过浏览器的开源文档,但是我觉得一个软件只要完成下面几件事,基本上就可以称的上一个浏览器了。
    (1)能够根据用户的请求生成合适的HTTP REQUEST报文。比如用户在浏览器地址栏上输入地址进行访问,浏览器要能够生成HTTP GET报文,表单的发送生成POST报文等等。
    (2) 能够对各种的RESPONSE进行处理。
    (3)渲染Html文档,生成文档树,能够解释css,还要有个javascript引擎。
    (4)能够发起dns查询得到ip地址。
    浏览器是个非常复杂的软件,当然现在的浏览器对http协议的支持应该不是问题,它们主要纠结于html文档渲染部分,对于用户层出不穷的新需求,w3c层出不穷的新标准,浏览器的路应该才刚刚开始。 
    3, 服务器
    服务器有两个层级的概念,它可以是机器,它上面存着一个站点的所有东西,也可以是软件,安装在一个也叫做服务器的机器上,帮助这个机器分发用户想要的东西。 我对服务器研究不多,只是用过几次apache。所以只是简单的谈谈我的认识。
    服务器最基本的功能就是响应客户端的资源请求。服务器首先会侦听80端口,来了http请求,就根据请求进行处理,请求一个图片那就根据路径找到资源发回,请求静态html页面也是如此,如果请求的是像php这样的动态页面应该先调用php编译器(或是解释器吧)生成html代码,然后返回给客户端。当然还要解决的一个问题就是并行问题以应对大访问量。
    因为对这方面不太了解,只想到了这么多。

    先说到这里, 有了新的认识再写。


    来源:http://www.cnblogs.com/orchid/archive/2012/04/21/2461442.html

     

     

    来源:从输入网址到显示网页的全过程分析
    http://www.itmian4.com/forum.php?mod=viewthread&tid=1655&fromuid=1931

    展开全文
  • 其实一直想把我和她的微信聊天记录...、工具准备(苹果手机也可,文末) 1、root的安卓手机,装有微信。 2、安装RE浏览器或者ES浏览器。 3、加密数据库DB文件打开工具:sqlcipher.exe(下载链接:微云分享) ...
  • 微信聊天记录提取及分析(wordcloud+pyecharts)

    万次阅读 多人点赞 2020-11-21 22:14:49
    0. 前言 ​ 之所以想要提取微信的聊天记录并分析是因为也开始再学习python,但是...安卓\电脑微信聊天记录导出表格 微信聊天记录数据提取并分析 利用python做微信聊天记录词云分析 提取微信数据库的主体流程都差不多,
  • 分析微信聊天记录(1)——获取微信聊天记录 文章目录分析微信聊天记录(1\)——获取微信聊天记录获取 `EnMicroMsg.db `文件已root手机小米手机获取数据库密码导出数据库windowslinuxmac总结 获取微信聊天记录的主要...
  • 时间我打算做B站林超的视频笔记,突然想到我是否可以用工具将视频的音频转换成文字,或者将视频中的字幕用OCR转化为文字。这样我就不要干巴巴敲内容了。不过因为林超的视频有BGM,我就没去尝试,但是我这两天写...
  • 微信是我们最最常用的手机APP和电脑应用了,而且用户量还蹭蹭的上涨。关于微信的优缺点,很多小伙伴都比较了解。优点就是相对于QQ没有那么多“花里胡哨”的功能,是专注于通讯和私人社交的。(小声BB句:其实最大...
  • 场景一、图书馆、书店、机场、火车上、公交地铁上、旅行的路上、听音乐……发现一段不错的文字或歌词想要做书摘笔记,或者编辑成短文发到微博、微头条、朋友圈装B,但是手机上打字很慢或没太多时间打字,等闲...
  • 如何做好科研实验记录

    千次阅读 2019-03-20 21:07:27
    ... “实践是检验真理的唯一标准”,科研实验是实践中的环。 科学研究是以诚实守信为基础的事业,自诞生之始就把追求真理、...科研实验记录是科技档案的部分,是指科学研究过程中,关于实验计划、过程、结果、分...
  • 来源 :Tools指南知乎号之前微博上看到篇文章,其中有一点让我很诧异:个新入职的员工,不知道用什么软件打开rar压缩包。但想到我刚入职场时,也是这个样子,马上就释然了。但有个新的问题出现了:刚入职场...
  • 朋友给我发了句话 很奇怪,前几个月的时候看到这些理都不理的我,这次想都没想就复制下来了 正以为要被嘲笑的时候,好玩的事情发了 真的可以! 当然热爱学习的我对于这神奇的事一定会搞清楚这咋整的 史诗级...
  • 学习视频B站:黑马程序员-前端学习(第阶段) CSS基础 基础认知 CSS知识 CSS: 层叠样式表(Cascading style sheets) CSS作用是什么?? 给页面中的HTML标签设置样式 写哪里? css写style标签
  • 10大炫酷的HTML5文字动画特效欣赏

    千次阅读 2020-12-19 05:02:08
    7款让人惊叹的HTML5粒子动画特效HTML5的很大个优势就是可以更加便捷高效地制作网页粒子动画特效,特别是Canvas特性,可以实现网页上绘制任何图形和动画。本文要分享7款让人惊叹的HTML5粒子动画特效,这些粒子...
  • 如何用Python记录微信撤回的消息

    万次阅读 多人点赞 2021-11-03 21:15:55
    首先声明,本文主要就是试图复现这篇文档中所说的: 想查看微信好友撤回的消息?Python帮你搞定 因此要是下文中有什么讲的不清楚的地方,大家也可以参考上面这篇文档。(总感觉腾讯云里面抓来篇教自动化爬微信的...
  • 转眼,这已是我CSDN写下的第九篇年终总结,真是岁月如梭。《缘起性空,归来不少年》。是啊,归来不再少年,我已经是而立之年了。当我写下这几个字的时候,心里还沉甸甸的。曾经的我总以为,博士毕业继续回到贵州...
  • 篇文带你从0到1了解建站及完成CMS系统编写

    万次阅读 多人点赞 2020-10-24 00:48:06
    学习目标 了解搭建一般网站的简便方式 了解最原始一般站点搭建 了解内容管理站点搭建 了解权限设计及完成 ...文章为从0到1了解内容管理系统搭建与编写,由于篇文章内容篇幅过长,文章内容经过压缩,该项目中相
  • 官网 下载对应操作系统的tesseract-ocr ,比如我现在windows系统下,就下载exe文件安装,可点击这里下载,下载后运行exe后选择个目录安装,这个目录需要记住,后面中需要用到,比如我的目录为D:\ruanjian\...
  • 华硕电脑无法启动,自动也修复不了怎么办可以尝试修复操作系统工具:win7系统步骤:方法1、开机不断点击F8键,进入系统操作选单(如果是Win8,Win8.1,Win10系统,看见开机画面后长按电源键关机,短时间内重复三次...
  • 最近公司要求做个项目,实现备份和导出虚拟代表和医生的微信聊天记录的功能,于是想了一下可从以下两个方面入手,并分析了一下他们的优劣势 解密微信数据库,直接用 Sql 语句查询导表上传 直接操作数据库,联系人和...
  • 对于客户端同学开发来说,写一段代码想真机上看看,是非常容易的。  那么这么一个大前端的环境下,客户端开发想写点html和js代码,又想手机上看看效果,怎么办呢?  需要以下几个步骤: 大体流程:1. ...
  • 建立个二维码标签及下载(可通过模板变量批量新建成千上万的标签)。 录入被授权人员的姓名和手机(建立名片码及授权管理组)。 被授权人员通过手机(必须和第2步手机号码一致)注册本平台后,即可进行扫码...
  • 本软件无需安装 双击打开就能用,适用于Windows 7以上平台; 具有截图文字识别,拖拽文字识别,打开文字识别,翻译文字等功能 可用于图片和PDF中文字的识别提取...上一段日语文字识别吧,具体效果自己下软件去验...
  • 7号的晚上,我坐在电脑前,关上所有的页面,打开Eclipse,花分钟或者几十秒撸了一发快排,测试用例直接写main把过,我关上了电脑回家。 这是我自己的习惯,每逢大战,我都会最后以个快排收尾,因为...
  • 牛逼!Java 从入门到精通,超全汇总版

    万次阅读 多人点赞 2021-05-06 19:40:33
    所以综上所述,入门 Java 你需要掌握的基础知识有 Java 基本介绍 Java 有哪些特点 什么是 Java 开发环境 Java 开发环境配置(初学者建议 Eclipse) 这里就需要区分不同的电脑类型了,种是 Mac ,种是 Windows,...
  • 深度学习文字识别

    千次阅读 2019-09-29 17:16:18
    文字识别是AI的个重要应用场景,文字识别过程一般由图像输入、预处理、文本检测、文本识别、结果输出等环节组成。 分类:文字识别可根据待识别的文字特点采用不同的识别方法,一般分为定长文字、不定长文字两大...
  • 最近小编查看百度指数的时候发现“录屏软件”这个词的指数一直下降,这就说明了个原因,那就是现在用电脑录屏软件的人越来越少,原因是现在很多用户都开始使用手机录屏软件,随着移动市场的快速崛起,PC市场的...
  • linux第阶段学习笔记基础

    千次阅读 多人点赞 2019-06-12 19:57:06
    这里,需要注意的是,读只能在一块磁盘上进行,并不会进行并行读取,性能取决于硬盘中较快的块。写的话通常比单块磁盘要慢,虽然是并行写,即对两块磁盘的写入是同时进行的,但因为要比较两块硬盘中的数据,所以...
  • 近来拼多多爆出的羊毛党事件使得计算机信息安全再次被提到人们的面前,原本属于计算机安全学科...这消息瞬间薅羊毛行业内流传开来。凌晨5点左右,羊毛党内部已经彻底发酵的“抢券行动”,被发布到了一些公开论...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,900
精华内容 13,560
关键字:

在电脑里记录一段文字