黑板课爬虫闯关第一关
2015-10-14 18:04
120 查看
刚开始学习python,看了些语法后就想找些小例子来写写。因为语言这东西光看不写是不行的。知乎上看到大家各种说python写的网络爬虫非常nb的样子,便也想来搞搞。正好又看到黑板课老师在知乎的回答,一不小心点进了黑板课爬虫闯关,于是踏上了闯关的征程。
第一题比较简单,就是根据网页给的数字不断更新网址后的数字,直到提示进入下一关为止。分析一下大概思路:用python获取网页,然后从网页的内容中提取这个数字,再把这个数字加在网址后面继续进行以上操作。
那如何知道是否到了最后一个网页呢?先手动进行几次操作,观察网页内容,找出他们的相同点,用正则表达式判断即可。
思路是清楚,但上面这些我都不会啊,特别是正则表达式这么基础的东西,以前从来没用过。说出来也不怕笑话,本科接触的东西实在太少了,只能现学现卖了。
首先,python获取网页,百度一下,大家差不多都推荐,urllib2和requests,后来用之后对比以下,requests更强大,也更简洁,简单一行代码就能获取网页内容,也发现了python的简洁和强大。
网页内容已经可以获得了,该分析下里面的内容了。手动输入几次数字后,发现除了第一次的内容是
以后都是
现在已经很清楚了,除了第一次之外,剩下的数字都是在“下一个你输入的数字是”和“.”之间。再通过简单了解下正则表达式就能很快写出提取这个数字的正则表达式:
但是,这还不够,作为一个有强迫症和洁癖的程序员,代码的臃肿是无法忍受的。因为第一次的网页内容和这个并不一样,因此,需要写一个表达式匹配两种情况。再看第一次打开的网页,虽然网页的内容显示数字后面没有任何字符和字母,但通过requests读取的网页是html文件,我们需要查看html代码:
原来后面还跟着个“<”,而且数字前面也少了个”是”字。因此,稍加修改正则表达式,则可匹配两种情况:
现在核心问题已经解决了,接下来的代码自然就可以写出了:
python路漫漫,继续加油吧!
第一题比较简单,就是根据网页给的数字不断更新网址后的数字,直到提示进入下一关为止。分析一下大概思路:用python获取网页,然后从网页的内容中提取这个数字,再把这个数字加在网址后面继续进行以上操作。
那如何知道是否到了最后一个网页呢?先手动进行几次操作,观察网页内容,找出他们的相同点,用正则表达式判断即可。
思路是清楚,但上面这些我都不会啊,特别是正则表达式这么基础的东西,以前从来没用过。说出来也不怕笑话,本科接触的东西实在太少了,只能现学现卖了。
首先,python获取网页,百度一下,大家差不多都推荐,urllib2和requests,后来用之后对比以下,requests更强大,也更简洁,简单一行代码就能获取网页内容,也发现了python的简洁和强大。
import requests html = requests.get('http://www.baidu.com').content print html
网页内容已经可以获得了,该分析下里面的内容了。手动输入几次数字后,发现除了第一次的内容是
你需要在网址后输入数字69634
以后都是
下一个你需要输入的数字是*****.
现在已经很清楚了,除了第一次之外,剩下的数字都是在“下一个你输入的数字是”和“.”之间。再通过简单了解下正则表达式就能很快写出提取这个数字的正则表达式:
'下一个你需要输入的数字是(\d+)\.'
但是,这还不够,作为一个有强迫症和洁癖的程序员,代码的臃肿是无法忍受的。因为第一次的网页内容和这个并不一样,因此,需要写一个表达式匹配两种情况。再看第一次打开的网页,虽然网页的内容显示数字后面没有任何字符和字母,但通过requests读取的网页是html文件,我们需要查看html代码:
原来后面还跟着个“<”,而且数字前面也少了个”是”字。因此,稍加修改正则表达式,则可匹配两种情况:
'下一个你需要输入的数字[^\d]*(\d+)[\.<]'
现在核心问题已经解决了,接下来的代码自然就可以写出了:
# coding=utf-8 import requests import re website = 'http://www.heibanke.com/lesson/crawler_ex00/' ruler = re.compile(r'数字[^\d]*(\d+)[\.<]') html = requests.get(website).content number = ruler.findall(html) index = 1 while number: website2 = website + number[0] html = requests.get(website2).content number = ruler.findall(html) print "访问网页%d: %s" %(index, website2) index += 1 else: print "\n下一关的入口: %s" % website2
python路漫漫,继续加油吧!
相关文章推荐
- windows server 2008解决无法PING通问题
- 第一招
- Chrome Developer Tools之Timeline面板
- 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第二十五节: 3D项目优化方案
- WGS84 GCJ02和BD09坐标系相互转换代码
- 庖丁解牛-----Live555源码彻底解密(根据MediaServer讲解Rtsp的建立过程)
- 继承
- 关于三星A7屏幕锁已由管理员、加密政策,或证书存储禁用
- HTTP 学习
- 关于三星A7屏幕锁已由管理员、加密政策,或证书存储禁用
- 深入浅出Android Gradle构建系统(一:简介)
- cpu利用率的计算
- IE7下总提示" 缺少标识符、字符串或数字"
- awk知识点总结
- 微信-JSSDK .NET版
- 微信公众平台OAuth2.0网页授权php示例
- IOS 开发学习(1): 学习纲领以及Objective-C 基本语法学习
- 多线程——达到Runnable介面
- Java NIO学习-详细内容(一)
- HTML-获取/修改html页面标题