科赛平台--2017中国网络安全技术对抗赛(初赛第14名分享)-第一题

这次比赛要谢谢在“西安电子科技”大学的研究生师兄,跟着他们学到了很多

这次网络对抗赛一共有两个赛题,

一、面对第一题的完整解法讲下。

      题目要求:题目提供3种网页的源代码,一共有钓鱼网页(多为仿冒页面)、被黑网页(仅指植入黑链网页)、正常网页这3种,训练集规模是49121个网页,和其余的对抗学习的比赛一样,这个竞赛提供的黑样本也是极少,不过时间长了也记不太清了,好像是400左右。预测集规模是近25万。题目评分方式是:通过对识别仿冒页面、被黑页面(植入黑链)的准确率以及算法情况进行评分。

     具体做法

     1:特征方面   

        代码:

     soup = BeautifulSoup(file_data, "html.parser")
     xx = u'([\u4e00-\u9fa5]+)'
     p = r"(?<=<title>).+?(?=</title>)"
     Part1:先使用 BeautifulSoup 提取出来网页title,然后用正则提出里面的中文
     temp = str(soup.title)
     result = re.findall(p,temp)#得到网页title
     p = r"<a[^>]+?href=.*>([^<]+)<\/a>"
     Part2:然后直接用正则,提取出来网页正文里面,超链接后面的文本
     result.extend(re.findall(p,file_data))#找到超链接后面的文本
     temp = soup.get_text()
     Part3: 先使用 BeautifulSoup get_text函数,将网页的文本内容(也就是代码)转换成 字符串,然后用正则提取出来所有中文
     temp = re.findall(xx,temp)#找到整个网页文本中的中文
     result.extend(temp)
     return result
     
     第三步明明可以提取出来所有的中文,为什么还要做前两步:因为在钓鱼网页、黑网页中,那两部分是最能辨认出来为黑网页的内容      ,而我们使用的是 tfidf 这个概念来进行提取最重要的关键词,这种理念中,	
    
 
 
 
 
 
 
 
 
 
 
所以如果在一个样本中,那些具有很明显区分 正负样本的词能多几次,这种词能更好的被筛选出来当做“特征词”
 
 
然后使用这个函数:
# max_features=3000,通过在语料库中的词频,挑出来最重要的3000个词来进行判断
tv = TfidfVectorizer(sublinear_tf = True, max_df = 0.5, encoding='gbk',max_features=3000)
直接选取出来3000个最重要的单词!

   2:模型方面使用 

	XGBClassifier  
	svm.SVC
	ExtraTreesClassifier
	MLPClassifier
      进行投票选择,对每个网页的标签进行打标
   3:提分点,这也是对抗学习的常用方法,因为训练集给出的负样本很少,所以我们一半会把测试集中预测概率接近0 1的当做已知样本加到训练集中再进行训练,如此反复






猜你喜欢

转载自blog.csdn.net/a1066196847/article/details/73927737