网址导航网首页

嗨,欢迎来到25Qi网址导航

站长QQ:2598903095

SEO学习

一份网站蜘蛛抓取日志数据分析秘诀,你值得拥有!

时间:2021-08-19 丨 作者:SEO 丨 关键词:蜘蛛抓取日志

今天为什么会投这篇稿,也是自己刚刚入曾老师SEO交流群的初衷之一吧,记得当初我入群时说的第一句话就是,seo这个行业现在大家很难像一些技术行业java、php等能够互相分享自己的研究成果或者说叫经验吧。可能是因为大家觉得别人会了,会影响到自己,但其实我个人觉得并不是这样,也希望这个圈子能够有一些改变(虽然我并不是只做seo,但这块确实一直是兴趣之一)。

好了废话不多说,接下来就给大家分享下,针对网站,在搜索引擎抓取这个环节,我们通过蜘蛛日志的分析,能够得到怎样的优化思路!

搜索引擎蜘蛛

首先,需要拿到一份搜索引擎的抓取日志,怎么拿就不说了,大家应该都会。拿到抓取日志后,我们主要从两个方面来进行分析:一、搜索引擎在各个时间段的抓取频次;二、搜索引擎对于网站各级目录的抓取频次。当然还有其他的维度也是需要注意分析观察的,比如抓取一次所需时间长短,只是这个在站长平台上也有比较好的显示出来了,故这里不做进一步分析了。

一、搜索引擎在各个时间段的抓取频次

针对搜索引擎抓取日志,首先我们需要把不同的搜索引擎分别单独提取出来,来进行逐个分析,以下以百度为例。

根据log文件中的‘Baiduspider’这个字段,我们利用python写一段简单的脚本即可把百度抓取日志部分抽离出来,代码如下:

with open('1.log',mode='r',encoding='utf-8')as f:f_list=f.readlines()baidurizhitiqu=open('baidu.log',mode='w',encoding='utf-8')for baidurizhi in f_list:baiduzhuaqu=baidurizhi.strip()if'Baiduspider'in baiduzhuaqu:baidurizhitiqu.write(baiduzhuaqu+'\n')else:passbaidurizhitiqu.close()

这样我们就能拿到单独的百度蜘蛛抓取日志“baidu.log”了,接下来,还有一个重要的操作需要做,一般的日志文件中,抓取时间都是以这种形式来显示:[27/Apr/2021:14:08:34+0800],

但我们需要的时间只是14:08:34这一块,所以我们需要把其他的地方去除掉,这个使用txt文档的替换操作即可(替换为空,实在不会操作也可以联系我),然后我们就可以得到单纯的蜘蛛抓取时间了。

这种时间形式,人是很好理解,一看就懂,但是程序或者代码很难比较啊,所以笔者想了下还是得转化成小数来比较,这里就是把‘:’全部替换成“.”,并且去掉最后的秒数只保留到分(足够分析用了,没必要分析到秒),最终得到这样的小数形式来代表抓取时间:14.08,即下午2点08分。蜘蛛日志也就变成下面的截图的形式:

经过上一步处理的网站日志

接下来,我们只需要用python对日志文件进行一顿操作,即可得到我们想要的数据,代码如下:

dict_zhuaqutime={'0-1':'0','1-2':'0','2-3':'0','3-4':'0','4-5':'0','5-6':'0','6-7':'0','7-8':'0','8-9':'0','9-10':'0','10-11':'0','11-12':'0','12-13':'0','13-14':'0','14-15':'0','15-16':'0','16-17':'0','17-18':'0','18-19':'0','19-20':'0','20-21':'0','21-22':'0','22-23':'0','23-24':'0',}with open('baidu1.log',mode='r',encoding='utf-8')as f:for baidulog in f:baidulog_list=baidulog.split()time=float(baidulog_list[1])if time>=0 and time<=1:dict_zhuaqutime['0-1']=int(dict_zhuaqutime['0-1'])+1elif time>1 and time<=2:dict_zhuaqutime['1-2']=int(dict_zhuaqutime['1-2'])+1elif time>2 and time<=3:dict_zhuaqutime['2-3']=int(dict_zhuaqutime['2-3'])+1elif time>3 and time<=4:dict_zhuaqutime['3-4']=int(dict_zhuaqutime['3-4'])+1elif time>4 and time<=5:dict_zhuaqutime['4-5']=int(dict_zhuaqutime['4-5'])+1elif time>5 and time<=6:dict_zhuaqutime['5-6']=int(dict_zhuaqutime['5-6'])+1elif time>6 and time<=7:dict_zhuaqutime['6-7']=int(dict_zhuaqutime['6-7'])+1elif time>7 and time<=8:dict_zhuaqutime['7-8']=int(dict_zhuaqutime['7-8'])+1elif time>8 and time<=9:dict_zhuaqutime['8-9']=int(dict_zhuaqutime['8-9'])+1elif time>9 and time<=10:dict_zhuaqutime['9-10']=int(dict_zhuaqutime['9-10'])+1elif time>10 and time<=11:dict_zhuaqutime['10-11']=int(dict_zhuaqutime['10-11'])+1elif time>11 and time<=12:dict_zhuaqutime['11-12']=int(dict_zhuaqutime['11-12'])+1elif time>12 and time<=13:dict_zhuaqutime['12-13']=int(dict_zhuaqutime['12-13'])+1elif time>13 and time<=14:dict_zhuaqutime['13-14']=int(dict_zhuaqutime['13-14'])+1elif time>14 and time<=15:dict_zhuaqutime['14-15']=int(dict_zhuaqutime['14-15'])+1elif time>15 and time<=16:dict_zhuaqutime['15-16']=int(dict_zhuaqutime['15-16'])+1elif time>16 and time<=17:dict_zhuaqutime['16-17']=int(dict_zhuaqutime['16-17'])+1elif time>17 and time<=18:dict_zhuaqutime['17-18']=int(dict_zhuaqutime['17-18'])+1elif time>18 and time<=19:dict_zhuaqutime['18-19']=int(dict_zhuaqutime['18-19'])+1elif time>19 and time<=20:dict_zhuaqutime['19-20']=int(dict_zhuaqutime['19-20'])+1elif time>20 and time<=21:dict_zhuaqutime['20-21']=int(dict_zhuaqutime['20-21'])+1elif time>21 and time<=22:dict_zhuaqutime['21-22']=int(dict_zhuaqutime['21-22'])+1elif time>22 and time<=23:dict_zhuaqutime['22-23']=int(dict_zhuaqutime['22-23'])+1elif time>23 and time<=24:dict_zhuaqutime['23-24']=int(dict_zhuaqutime['23-24'])+1for key in dict_zhuaqutime:print(str(key)+':'+str(dict_zhuaqutime[key]))

最终分析结果如下:

经过处理后分析出每个时段的蜘蛛抓取情况

是不是还不够直观?WPS直接生成了柱形图就可以了,如下:

做成柱状图的蜘蛛抓取日志

二、百度蜘蛛抓取网站各级目录情况

这个处理起来就不用像之前的时间段抓取频次那样了,写好python一顿撸,即可。代码如下:

import csv#新建蜘蛛字典def make_spider(spider_name):save_file=open('%s.csv'%spider_name,'w',encoding='utf-8')#w模式会将\n写入进去,结果文件中会自动多一行csvwriter=csv.writer(save_file)#将save_file写入到csvwriter中spider_name={}spider_name['visits']=0spider_name['visit_spiders']={}spider_name['visit_pages']={}spider_name['visit_dirs']={}spider_name['visit_error']={}return spider_name,csvwriter,save_file#日志处理函数。蜘蛛字典spider_dict,方便传入蜘蛛参数def log_process(spider_dict):spider_dict['visits']+=1#百度蜘蛛访问次数+1item=line.split()#split方法默认用空格来做切分#获取蜘蛛IP及其访问次数spider=item[0]#将蜘蛛IP提取出来if spider_dict['visit_spiders'].get(spider):spider_dict['visit_spiders'][spider]+=1#如果此IP在字典内,则对此蜘蛛访问次数值加1else:spider_dict['visit_spiders'][spider]=1#如果IP不存在,则将此新IP创建到字典里#获取蜘蛛访问url及其次数url=item[4]if spider_dict['visit_pages'].get(url):#判断url是否在字典内spider_dict['visit_pages'][url]+=1else:spider_dict['visit_pages'][url]=1#获取蜘蛛访问目录及其次数if url=='/':#判断url是否为根目录dirname='/'elif url.count('/')>=2:#判断url是否有二级目录#获取所有目录dirname='/%s/'%'/'.join(url.split('/')[1:-1])#获取一级目录使用:'/%s/'%url.split('/')[1]else:dirname=''#空字符串为Falseif dirname and spider_dict['visit_dirs'].get(dirname):#同时满足目录存在和字典中有此目录spider_dict['visit_dirs'][dirname]+=1elif dirname:spider_dict['visit_dirs'][dirname]=1#获取蜘蛛访问状态及其次数error_code=item[5]if error_code=='404':if spider_dict['visit_error'].get(url):spider_dict['visit_error'][url]+=1else:spider_dict['visit_error'][url]=1#排序和保存文件函数def count_and_save(spider_dict,writer):#对统计结果的字典进行排序sort_spider=sorted(spider_dict['visit_spiders'].items(),key=lambda x:x[1],reverse=True)#变成数组了-listsort_pages=sorted(spider_dict['visit_pages'].items(),key=lambda x:x[1],reverse=True)sort_dirs=sorted(spider_dict['visit_dirs'].items(),key=lambda x:x[1],reverse=True)sort_error=sorted(spider_dict['visit_error'].items(),key=lambda x:x[1],reverse=True)#将结果写入文件fields=('总访问量','蜘蛛IP','IP访问次数','受访目录','目录受访次数','受访页面','页面访问次数','404页面','出错次数')writer.writerow(fields)#将fields的每个元素作为每一列row_list=[''for _ in range(9)]#单独的下划线表示一个占位变量,不需要用到它for page_item in sort_pages:row_list[0]=spider_dict['visits']if sort_pages.index(page_item)==0 else''#如果下标为0则返回baidu['visits'],否则返回空ss=sort_spider.pop(0)if sort_spider else''row_list[1]=ss[0]if ss else''row_list[2]=ss[1]if ss else''dd=sort_dirs.pop(0)if sort_dirs else''row_list[3]=dd[0]if dd else''row_list[4]=dd[1]if dd else''row_list[5]=page_item[0]row_list[6]=page_item[1]ee=sort_error.pop(0)if sort_error else''row_list[7]=ee[0]if ee else''row_list[8]=ee[1]if ee else''writer.writerow(row_list)#百度蜘蛛baidu,baiducsv,baidufile=make_spider('baidu')#搜狗蜘蛛sogou,sogoucsv,sogoufile=make_spider('sogou')with open('1.log')as logfile:#用with方法打开文件可以不用手动关闭文件print('开始分析日志')for line in logfile:if'Baiduspider'in line:log_process(baidu)elif'Sogou Web spider'in line:log_process(sogou)count_and_save(baidu,baiducsv)count_and_save(sogou,sogoucsv)baidufile.close()#最后记得关闭文件sogoufile.close()print('日志分析结束')

好的,分析出来百度蜘蛛抓取的目录层级情况如下:

分析出来百度蜘蛛抓取的目录层级情况

饼状图统计如下:

 

分析出来百度蜘蛛抓取的目录层级情况饼状图

最后来说说这些数据对于搜索引擎优化到底有什么指导性的作用:

1.根据各时间段的抓取频次,分析出你的网站什么时间段,蜘蛛是来的最频繁的(当然这个也是可以培养的),你的网站在更新内容时就在这二个时间段内更新,被抓取到机会也就意味着更大,收录的机会也更大;

2.针对各级网站目录抓取频次,首先我们应该对自己的网站目录了如指掌,比如你需要参与排名和质量度最高的页面肯定是蜘蛛抓取的最频繁的,而你还没有完善页面质量较低或者不需要参与排名的页面,肯定是希望他来抓取的越少越少,这里就要配合robots.txt以及nofollow来进行处理了,合理分配有限的抓取频次,让你高质量页面更多抓取、收录、排名。

当然,以上的应用并不是全部,感觉写的内容有点多了,总之有相关的不清楚的地方都可以与我进行交流,代码的一些问题也可以,这次就分享到这里了。

在线随机小姐姐图片换一批
最新收录
  • 体育赛事分析报道

    让足球滚一会提供足球、篮球、NBA赛事前瞻分析推荐,与各联赛时实新闻报道、球员转会消息、赛事录像回放等资讯,用心认真把每件事做到最好的网站。

  • 足球比分直播

    体育即时比分网提供实时足球比分与篮球比分数据,包括即时比分、赛程、球队、竞猜等数据,让您无时无刻都能掌握时实足球比分与篮球比分动态消息。即时更新各项比赛数据与完赛结果。让足球滚一会带您体验精彩的竞猜足球比赛!

  • 金魔网

    金魔网

  • 外籍模特

    外籍模特

  • imtoken钱包

    :imtoken钱包为您提供最新的imtoken钱包信息,imtoken是全球最大的数字货币钱包,支持包括BTC, ETH, BSC, TRON, Aptos, Polygon, Solana, OKExChain, Polkadot, Kusama, EOS等在内的所有主流公链及Layer 2,已为全球近千万用户提供可信赖的数字货币资产管理服务,也是当前DeFi用户必备的工具钱包。

  • 明星经纪公司

    我们专注提供明星代言、商演、翻包视频、祝福视频录制等业务,十多年行业服务经验