StevenPZChan
StevenPZChan
2 min read

Categories

Tags

继续挑战!


第2题地址ocr.html

  • ocr.jpg
  • 图片是一本打开的书
  • 题目说明是要识别字符(ocr就是字符识别嘛),提示maybe they are in the book, but MAYBE they are in the page source.
  • 页面最底下提示可以把URL里面的pc改成pcc看上一题的答案(其他信息是重复的tips)

我暂时也没这么蠢想要对图片做OCR,毕竟清晰度不够。
题目提示说要识别的字符在页面源码里嘛,我们用浏览器的view-source:看看。
结果发现网页最下面有一小段文字和一超大段乱码:

<!– find rare characters in the mess below: –>
<!– %%$@$^__#)^)&!+]!@&^}@@%%+$&[(_@%+%$^@$^!+]!&#)}{}}!}_]$[%}@[{_@#_^{ … –>

看来这个才是真正的题目😅
为了不显得那么笨拙,我就没有copy-paste了,使用python爬虫常用的requestsre模块进行数据获取:

import re
import requests
response = requests.get('http://www.pythonchallenge.com/pc/def/ocr.html').text
messy_str = re.findall(r'<!--(.*?)-->', response, re.DOTALL)[1]

根据题目意思,要找出稀有的字符。我们来做个统计:

from collections import Counter
c = Counter(messy_str)
print(c)
Counter({')': 6186, '@': 6157, '(': 6154, ']': 6152, '#': 6115, '_': 6112, '[': 6108, '}': 6105, '%': 6104, '!': 6079, '+': 6066, '$': 6046, '{': 6046, '&': 6043, '*': 6034, '^': 6030, '\n': 1221, 'e': 1, 'q': 1, 'u': 1, 'a': 1, 'l': 1, 'i': 1, 't': 1, 'y': 1})

从结果看到,在乱码中居然还有几个字母,完善一下将字母取出:

print(''.join(k for k, v in c.items() if v < 3))
equality

用结果输入到URL上equality.html,确实是下一题,成功!

总结:这题也很基础,会网页抓取和正则的话难度会小很多。

本题代码地址2_ocr.ipynb