首先,我们需要获取搜索引擎的爬网日志,所以我们不会说如何获取。每个人都应该知道。抓取日志后,我们主要从两个方面进行分析:一是搜索引擎在各个时间段的抓取频率;二是搜索引擎对于网站目录的各级抓取频率。当然还有其他的维度需要分析观察,比如抓取一次需要的时间长度,但是这个在站长平台上也展示的很好,这里就不做进一步的分析了。
第一,搜索引擎在每个时间段的抓取频率
为了让搜索引擎捕获日志,首先需要分别提取不同的搜索引擎,并逐一进行分析。以百度为例。
根据日志文件中的‘百度蜘蛛’字段,我们可以用python写一个简单的脚本,把百度爬行日志部分拉出来。代码如下:
使用open ('1.log ',模式='r ',编码='utf-8 ')作为f:
f _ list=f.readlines()
baidurizhitiqu=open('baidu.log ',mode='w ',编码='utf-8 ')
对于f_list:中的baidurizhi
baiduzhuaqu=baidurizhi.strip()
如果‘Baiduspider’在baiduzhuaqu:
baidurizhitqu . write(baiduzhuaq ' \ n ')
else:
及格
baidurizhitiqu.close()
这样,我们就可以得到一个单独的百度蜘蛛爬行日志“baidu.log”。接下来,还有一个重要的操作要做。在一般日志文件中,爬行时间以此形式显示:[27/apr/2021:14336008336034 0800],
但是我们需要的时间只有14:083: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’]) + 1
elif time >1 and time <=2:
dict_zhuaqutime[‘1-2’] =int(dict_zhuaqutime[‘1-2’]) + 1
elif time >2 and time <=3:
dict_zhuaqutime[‘2-3’] =int(dict_zhuaqutime[‘2-3’]) + 1
elif time >3 and time <=4:
dict_zhuaqutime[‘3-4’] =int(dict_zhuaqutime[‘3-4’]) + 1
elif time >4 and time <=5:
dict_zhuaqutime[‘4-5’] =int(dict_zhuaqutime[‘4-5’]) + 1
elif time >5 and time <=6:
dict_zhuaqutime[‘5-6’] =int(dict_zhuaqutime[‘5-6’]) + 1
elif time >6 and time <=7:
dict_zhuaqutime[‘6-7’] =int(dict_zhuaqutime[‘6-7’]) + 1
elif time >7 and time <=8:
dict_zhuaqutime[‘7-8’] =int(dict_zhuaqutime[‘7-8’]) + 1
elif time >8 and time <=9:
dict_zhuaqutime[‘8-9’] =int(dict_zhuaqutime[‘8-9’]) + 1
elif time >9 and time <=10:
dict_zhuaqutime[‘9-10’] =int(dict_zhuaqutime[‘9-10’]) + 1
elif time >10 and time <=11:
dict_zhuaqutime[’10-11′] =int(dict_zhuaqutime[’10-11′]) + 1
elif time >11 and time <=12:
dict_zhuaqutime[’11-12′] =int(dict_zhuaqutime[’11-12′]) + 1
elif time >12 and time <=13:
dict_zhuaqutime[’12-13′] =int(dict_zhuaqutime[’12-13′]) + 1
elif time >13 and time <=14:
dict_zhuaqutime[’13-14′] =int(dict_zhuaqutime[’13-14′]) + 1
elif time >14 and time <=15:
dict_zhuaqutime[’14-15′] =int(dict_zhuaqutime[’14-15′]) + 1
elif time >15 and time <=16:
dict_zhuaqutime[’15-16′] =int(dict_zhuaqutime[’15-16′]) + 1
elif time >16 and time <=17:
dict_zhuaqutime[’16-17′] =int(dict_zhuaqutime[’16-17′]) + 1
elif time >17 and time <=18:
dict_zhuaqutime[’17-18′] =int(dict_zhuaqutime[’17-18′]) + 1
elif time >18 and time <=19:
dict_zhuaqutime[’18-19′] =int(dict_zhuaqutime[’18-19′]) + 1
elif time >19 and time <=20:
dict_zhuaqutime[’19-20′] =int(dict_zhuaqutime[’19-20′]) + 1
elif time >20 and time <=21:
dict_zhuaqutime[’20-21′] =int(dict_zhuaqutime[’20-21′]) + 1
elif time >21 and time <=22:
dict_zhuaqutime[’21-22′] =int(dict_zhuaqutime[’21-22′]) + 1
elif time >22 and time <=23:
dict_zhuaqutime[’22-23′] =int(dict_zhuaqutime[’22-23′]) + 1
elif time >23 and time <=24:
dict_zhuaqutime[’23-24′] =int(dict_zhuaqutime[’23-24′]) + 1
for 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’] = 0
spider_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 # 百度蜘蛛访问次数+1
item = line.split() # split方法默认用空格来做切分
# 获取蜘蛛IP及其访问次数
spider = item[0] # 将蜘蛛IP提取出来
if spider_dict[‘visit_spiders’].get(spider):
spider_dict[‘visit_spiders’][spider] += 1 # 如果此IP在字典内,则对此蜘蛛访问次数值加1
else:
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] += 1
else:
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 = ” # 空字符串为False
if dirname and spider_dict[‘visit_dirs’].get(dirname): # 同时满足目录存在和字典中有此目录
spider_dict[‘visit_dirs’][dirname] += 1
elif 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] += 1
else:
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) #变成数组了-list
sort_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来进行处理了,合理分配有限的抓取频次,让你高质量页面更多抓取、收录、排名。
当然,以上的应用并不是全部,感觉写的内容有点多了,总之有相关的不清楚的地方都可以与我进行交流,代码的一些问题也可以,这次就分享到这里了。有机会公众号再见!这篇投稿人vx号:863025502(欢迎咨询)更多干货内容关注公众号:平哥SEO优化
看过本文的也喜欢:
如何让网站内容快速被百度蜘蛛抓取收录呢?
网站内容SEO如何做才能让百度蜘蛛快速抓取收录呢?
搜索引擎爬行抓取的规律是什么?
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/160541.html