OJ升级,代码可能会丢失. 所以要事先备份. 一开始傻傻的复制粘贴, 后来实在不能忍, 得益于大潇的启发和聪神的原始代码, 网页爬虫走起!
已经有段时间没看Python, 这次网页爬虫的原始代码是 python2.7版本, 试了一下修改到3.0版本, 要做很多包的更替,感觉比较烦,所以索性就在这个2.7版本上完善了.
首先观赏一下原始代码,我给加了一些注释:
现在这个代码有两个问题:
首先,在标签匹配的时候没有支持多行,也就是爬下来的代码中仍然包含跨度多行的标签, 纯代码仍然需要人工提取.
第二,因为代码页面并没有问题的题目信息,所以仅以题号作为文件名. 这样若果升级后的OJ题目顺序发生改变, 将无法将题目与代码进行对应.
针对第一个问题, 修正的方法比较简单:
在正则表达式匹配的时候, 将第二个参数位置加上re.DOTALL即可.
例如:
J = re.compile(r‘语言.*?face=‘,re.DOTALL)
对于第二个问题, 可以根据题号寻找题目的页面(而非此前代码的页面), 然后从题目页面中提取标题信息.
在题目页面中,我发现只有标题是用<strong><\strong> 标签修饰的,所以可以这样匹配
sName2=re.findall(r‘<strong>([^<]+)</strong>‘,myPage2,re.S)
另外文件命名的时候不可以有空格,所以还要滤除空格
sname2=sname2.replace(" ","")
即使这样,有时在创建文件时仍然会抛出异常, 但是重新执行一次可能就会不再出现问题.
下面是晚上后的代码, 修改的地方加粗了.
关于Python的网页爬取问题,这只是一个很简单的demo, 下面还需要深入学习.(如果有时间的话)