第二题的题目就是 首先我们先查看网页的源代码 可以看见在最下面中<!-- -->这里面有一大堆字符! 我们的目的就是在这一大堆字符里面找到字符 首先我们现需要把这个源代码里面的这一部分进行爬取 所以在python中我们需要用到urllib.request 这个库 因为我用的是python3 所以这里urllib和urllib2 合成了一个urllib库 通过这个urllib.request模块的导入我们可以较快的进行一些网页的爬取 在这里我用的是 urllib.request.urlopen 这个模块
html=urllib.request.urlopen("http://www.pythonchallenge.com/pc/def/ocr.html").read().decode()
我用到了这个语句 这时候有可能就会注意到后面的read() 和 decode() 有什么作用 现在我在解释一下 我当时的时候也是一头雾水完全不知道这个read 有什么作用 但是我当时试着把read进行了删除 发现出了一个错误
AttributeError: 'HTTPResponse' object has no attribute 'decode'
就是这个错误 去网上进行了一下搜索urllib.request.urlopen
返回一个HTTPResponse
不能直接json解码的对象(因为它是一个字节流) 所以我们需要read()来获得实际的字符串 我不知道我这样理解的对不对 可以说是一个容器 暂时接收? 还有一个就是decode可以说就是以指定的编码方式来进行一些解码然后默认的格式就是UTF-8 然后剩下的我们只要再使用re的一个模块来进行正则表达式的匹配就可以了 好了话不多说直接上代码
import re
import urllib.request
html = urllib.request.urlopen("http://www.pythonchallenge.com/pc/def/ocr.html").read().decode()
print(html)
data = re.findall("<!--(.*?)-->",html,re.DOTALL)[-1]
print("".join(re.findall(r'[a-zA-Z]',data)))
# read 就是读取 decode 就是把原来的字节码 转换成字符串码
# 第五行就是 通过非贪婪模式 把<!-- --> 然后选取最后一块
# 最后一行 通过 正则表达式 来进行匹配
然后最后的结果就是equality