黑板课爬虫闯关第一关

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

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

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


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


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


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

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

1.获取网页内容

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

import requests

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

2.提取网页中的数字

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

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

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

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

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

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

# 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





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值