黑板课爬虫闯关第一关

来源:互联网 发布:兼职在家做数据录入 编辑:程序博客网 时间:2024/04/30 13:30

之前也没有系统的学习过python,看其他源码的时候也是似懂非懂的看着理解意思。最近比较有空,就想更系统的学习一下,在知乎上看到大神推荐了一个Python爬虫闯关网站,便想试试。

下面是第一关的介绍,黑板课爬虫第一关。

点击进入网站以后,如下图所示:


做了一下尝试,先手动在网址后面输入数字14901,得到下面结果。


这个时候提示,要将数字改成63668,


可以理解到,就是不断在网页页面读取数字信息,然后添加到网址http://www.heibanke.com/lesson/crawler_ex00后面,直到闯关成功为止。

分析一下大概思路:用python获取网页,然后从网页的内容中提取这个数字,再把这个数字加在网址后面继续进行以上操作。那如何知道是否到了最后一个网页呢?先手动进行几次操作,观察网页内容,找出他们的相同点,用正则表达式判断即可。

1.获取网页内容

python有很多强大的工具,在这里可以利用requesets来获取网页内容。如

import requestshtml = requests.get('http://www.baidu.com').contentprint html
这样即可获取网页中的内容。

2.提取网页中的数字

通过前面的手动尝试观察,发现第一步的提示是“你需要在网址后输入数字*****”,后来的都是“下一步你需要输入的数字是*****”。在这里需要涉及到的一个概念是正则表达式正则表通常被用来检索、替换那些符合某个模式(规则)的文本。

可以归纳到,除了第一次,其余的数字均在“下一个你需要输入的数字是”和“.”之间。

正则表达式可以写为:'下一个你需要输入的数字是(\d+)\.'
但是这个表达式不能满足第一次网页的内容,因为对于第一次的显示,没有“.”作为结尾。通过requests读取的网页是html文件,可以看到数字后面第一个符号是<,所以需要修改一下正则表达式

'数字[^\d]*(\d+)[\.<]'
其中[^\d]*表示零次或多次非数字,(\d+)记录出现的数字。

可以注意到每次的数字都是五次,所以也可以写成如下形式:

'数字[^\d]*(\d{5})'
接下来运行获得最后网址即可

# coding=utf-8import requestsimport rewebsite = 'http://www.heibanke.com/lesson/crawler_ex00/'ruler = re.compile(r'数字[^\d]*(\d+)[\.<]')html = requests.get(website).contentnumber = ruler.findall(html)index = 1while number:    website2 = website + number[0]    html = requests.get(website2).content    number = ruler.findall(html)    print "访问网页%d: %s" %(index, website2)    index += 1else:    print "\n下一关的入口: %s" % website2





0 0
原创粉丝点击