IDF实验室:初探乾坤--简单编程-字符统计

地址:

ctf.idf.cn/index.php?g=game&m=article&a=index&id=37

题目:

这里这里 → http://ctf.idf.cn/game/pro/37


Writeup:

(第二份代码引用他人新浪博客:blog.sina.com.cn/s/blog_e53f38130102vjlz.html )

很明显,编写代码分别统计woldy五个字母的数量,并提交。但是注意需要在2秒内提交,所以需要写爬虫,With Python !!!


第一次:自己用Python3.4写的:( 源代码如下 )

我连Cookies ,和 Headers 都全部伪装了。。。

但是他总是返回给我说,“你数学是小学体育老师教的吗?”

我就无语了!!!!

import urllib.request
import urllib.parse
import re

url = "http://ctf.idf.cn/game/pro/37/index.php"
req = urllib.request.Request(url)
response = urllib.request.urlopen(url)
html = response.read().decode('utf-8')

A = html.find('<hr />') + 6
B = html.find('<hr />', A)
f = html[A:B]

w = f.count('w')
o = f.count('o')
l = f.count('l')
d = f.count('d')
y = f.count('y')
ans1 = '%d'%w+'%d'%o+'%d'%l+'%d'%d+'%d'%y

length = str(len(ans1))

head = {}
head['Host'] = "ctf.idf.cn"
head['User-Agent'] = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0"
head['Accept-Language'] = "zh-CN,en-US;q=0.7,en;q=0.3"
head['Accept-Encoding'] = "gzip, deflate"
head['Referer'] =  "http://ctf.idf.cn/game/pro/37/"
head['Cookie'] = "Hm_lvt_184d7dcce9f76d1f5ab23d66e447d9a8=1432209840,1432307014,1433080747,1433157423; PHPSESSID=23ro01bddb6a7604ovumie8nr7; Hm_lpvt_184d7dcce9f76d1f5ab23d66e447d9a8=1433157799"
head['Connection'] = "keep-alive"
head['Cache-Control'] ="max-age=0"

xdata['Content-Type'] = "application/x-www-form-urlencoded"
xdata['Content-Length'] = length
xdata = {'anwser':ans1}
xdata  = urllib.parse.urlencode(xdata).encode('utf-8')

req = urllib.request.Request(url, data = xdata)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')

A = html.find('<body>') + 6
B = html.find('<hr />', A )
f = html[A:B]

print(f)


第二次:用 Python2.7 编写:(原代码如下)

首先安装BeautifulSoup

代码参考一个新浪博客:blog.sina.com.cn/s/blog_e53f38130102vjlz.html

#! /usr/python
#coding:utf-8
import sys, urllib,urllib2
import requests
#from BeautifulSoup import BeautifulSoup
from bs4 import BeautifulSoup
url = "http://ctf.idf.cn/game/pro/37/" #网页地址
s = requests.session()
content = s.get("http://ctf.idf.cn/game/pro/37/").text #获取页面内容
test=content.split('<hr />') #把字符串用分成3部分
print test[1]
w=0
o=0
l=0
d=0
y=0
for i, ch in enumerate(test[1]): #遍历分割后的第二部分字符串
    if ch=="w":
        w=w+1
    elif ch=="o":
        o=o+1
    elif ch=="l":
        l=l+1
    elif ch=="d":
        d=d+1
    elif ch=="y":
        y=y+1
tem='%d' %w +'%d' %o +'%d' %l +'%d' %d +'%d' %y #把数字拼成字符串
print tem
values = {'anwser':tem} #填写表单
result = s.post('http://ctf.idf.cn/game/pro/37/', data=values) #提交表单
print(result.text)


第二次可以跑出结果。


在这里,我想请教一下,我自己写的东西哪里出了问题呢???

本人python 新手一只,求高手解答,十分感激。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
tf-idf是自然语言处理中一种常用的文本特征表示方法。tf代表词频(term frequency),idf代表逆文档频率(inverse document frequency)。 tf表示在一篇文档中一个词出现的频率。一般来说,一个词在一个文档中出现得越频繁,它对文档的特征表示的重要性越大。但是tf并没有考虑到词在整个语料库中出现的频率。 idf则通过一种统计方式,计算一个词在所有文档中出现的概率。公式为idf = log(总文档数/包含该词的文档数)。由于取对数,所以当一个词在所有文档中都出现时,它的idf值会很小,对于文档特征表示的重要性也会很小。而当一个词在少数文档中出现时,它的idf值会很大,对于特征表示的重要性也会很大。 tf-idf的计算方法为tf * idf,通过将tf和idf相乘可以得到每个词在文档中的tf-idf值。这个值越大则说明这个词对文档的特征表示的重要性越高。 tf-idf可以用于文本分类、信息检索、文本聚类等任务。在文本分类中,通过计算每个词的tf-idf值可以得到文档的特征表示,然后可以使用机器学习算法对文档进行分类。在信息检索中,可以通过计算查询词的tf-idf值来评估文档和查询之间的相关性。在文本聚类中,可以根据词的tf-idf值来度量文档之间的相似度,从而将相似的文档聚类在一起。 总之,tf-idf是一种常用的文本特征表示方法,可以用于自然语言处理中的各种任务。通过考虑词频和词在整个语料库中出现的频率,tf-idf可以帮助我们更好地理解和分析文本数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值