还是Python

今天用Python把数据都抓好了,整理了下代码,通过实验,发现我电脑抓取数据的速度是2.8Kb/s。在网上看到之前说的那个UliPad Debug不了,可能是因为版本的问题,说2.7有这个问题。搞了搞正则表达式,在有说明的,对正则表达式又增进了一些了解,这东西比想象中要灵活的多,字符串匹配的利器啊。

后来了解到有Python Challenge这个东西,蛮有意思的,晚上就玩了几关,跟信息学编程有关系得。

第一关,刚开始不大懂,出来一张图片,上面有个238,下面提示说改下Url,然后就把Url改成238.html,结果提示了No... the 38 is a little bit above the 2...这个,还真是照顾初学者,刚开始理解成38比2大一点,呵呵,其实是说38比2高一点,然后就想去求2^38次方了,算出结果改下Url就可以了,代码如下:

#!/usr/bin/env python 
#coding=utf-8
 
print 2 ** 38

第二关,比较简单,图片提示了映射关系,将西面的文字翻译一下就可以了,然后将Url中的map也映射下就可以了,有专门的一对一映射函数,但是觉得没这个灵活,用chr和org函数来操作字符,代码如下:

#!/usr/bin/env python 
#coding=utf-8
 
s = 'g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr\'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.'
s = 'map'
s = s.lower()
 
ans = ''
 
for i in s:
    if i >= 'a' and i <= 'z':
        t = chr((ord(i) - ord('a') + 2) % 26 + ord('a'))
        ans += t
    else:
        ans += i
 
print ans

第三关,有点恶心,没反应出Page Source,这一关得看网页源码,然后里面有一堆乱字符,把它保存下来,然后用文件读取,根据提示,找出其中的英文字符,然后就可以过关了,代码如下:

#!/usr/bin/env python 
#coding=utf-8
 
f = open(r'd:\desktop\dic.txt', 'r')
text = f.read()
 
for i in text:    
    if i >= 'a' and i <= 'z':
        print i,

第四关,也蛮蛋疼的,看来把提示放在源代码里面是种常用伎俩呀,把它们保存到文件,然后提示说在一个小写字母的边上恰好有三个和它相邻。刚开始以为边相邻有三个大写字母,后来以为点相邻有三个大写字母,都不对,后来发现图片还是有含义的,它指的是一维相邻的,然后就判断两边各有三个,还是不对,看了下文件,才意识到,只能有三个,如果第四个也是大写的话,是不可以的。这样就过这关了,代码如下:

#!/usr/bin/env python 
#coding=utf-8
 
f = open(r'd:\desktop\dic.txt', 'r')
t = f.read()
 
for i in range(len(t)):
    if t[i] < 'a' or t[i] > 'z':
        continue
    num0 = 0
    num1 = 0
    for j in range(-3, 4):
        if j == 0:
            continue
        if i + j >= 0 and i + j < len(t):
            if t[i + j] >= 'A' and t[i + j] <= 'Z':
                num0 += 1
 
    for j in range(-4, 5):
        if j == 0:
            continue
        if i + j >= 0 and i + j < len(t):
            if t[i + j] >= 'A' and t[i + j] <= 'Z':
                num1 += 1
                
                
    if num0 == 6 and num1 == 6:
        print t[i],
        
'''
d = []
 
s = ''
 
for i in t:
    if i == '\n':
        d.append(s)
        s = ''
    else:
        s += i
 
print 'line num = ' + str(len(d))
ansNum = 0
 
f = open(r'd:\desktop\cha3.txt', 'w')
 
for i in range(len(d)):
    print len(d[i])
    
    for j in range(len(d[i])):          
        ansNum += 1
        
        if d[i][j] >= 'A' and d[i][j] <= 'Z':
            #f.write(' ')
            continue
        
        num = 0
 
        one = []
        for di in range(-1, 2):
            for dj in range(-1, 2):
                #if di * di + dj * dj == 1:
                if di * di + dj * dj != 0:
                    #print di, dj
                    if i + di >= 0 and i + di < len(d) and j + dj >= 0 and j + dj < len(d[i]):
                        if d[i + di][j + dj] >= 'A' and d[i + di][j + dj] <= 'Z':
                            one.append(d[i + di][j + dj])
                        #if d[i + di][j + dj] == 'B':
                            num += 1
        #print num
        
        if num == 3:
            #print d[i][j] + '#'
            #f.write(d[i][j])
            #print one
            #ansNum += 1
        else:
            #f.write(' ')
    
    f.write('\n')
            
print ansNum
'''
原文地址:https://www.cnblogs.com/litstrong/p/2056185.html