關卡地址:http://www.pythonchallenge.com/pc/def/ocr.html(點擊前往)
這一關卡信息一樣很是精簡,只有短短的一句話,而後其餘信息都沒有什麼用,真心用心良苦(能說這個做者操蛋嗎)。很少說了,話語中提到了
頁面源碼,那咱們就看看源碼有什麼。
整個源碼都是html的一些標籤沒什麼特別,知道有一段註釋,應該答案就在這段信息裏面了,可是觀察了好久,沒有什麼頭緒,來看看聽雨軒點擊前往的講解,原來是在這段註釋中尋找英文字母,好吧做者你贏了。
思路是:用 urllib.request.open 獲取連接,用其read()函數讀取 html 源碼,再用正則提取註釋的內容,在提取以後的內容尋找內容當中的字母就是咱們的結果。
代碼以下:html
# -*- coding: UTF-8 -*- import urllib.request import re import string url = urllib.request.urlopen('http://www.pythonchallenge.com/pc/def/ocr.html') page = url.read().decode('utf8') # 在Python中urlopen返回的response是byte類,須要轉成string類 pattern = re.compile(r'<!--[^>]*?-->') # 註釋是在<!-- 和-->,這裏使用?是想最短匹配,不過好像不加也沒有影響 m = re.findall(pattern, page) comment = m[1] # m[0]只是提示語,略去 out = list(filter(lambda x: x in string.ascii_letters, comment)) print(''.join(out))
在Python3中filter函數再也不直接返回列表,而是返回一個生成函數,須要再次list函數來處理。python