Python 爬虫闯关(第一关)
在学习爬虫时,遇到了一个有意思的网站,这个网站设置了几个关卡,需要经过爬虫进行闯关,随着关卡的网后,难度不断增加,在闯关的过程中需要学习不同的知识,你的爬虫水平也自然随之提高。
今天我们先来第一关,访问http://www.heibanke.com/lesson/crawler_ex00/:

按照提示,我们把数字放到地址栏的后面,再次进行访问:

发现,还要再用新的数字放在地址栏进行访问,我们可以猜测了,第一关是将页面出现的数字填写到当前 url 的尾部进行访问,然后会得到一个新的数字,再用它替换 url 中的尾部数字,这样不断循环往复,直到页面出现成功标识:

那么思路也有了:
- 解析页面中的数字;
 - 将数字拼接成新的 URL;
 - 访问新的 URL,重复第 1 步;
 - 直至页面没有数字可以解析到!
 
逻辑比较简单,这里我们直接上代码了:
BeautifulSoup 实现
# coding=utf-8
import requests, bs4, re
url = 'http://www.heibanke.com/lesson/crawler_ex00/'
while True:
    # download the page
    print("forward to page %s ..." % url)
    response = requests.get(url)
    print("the return code : " + str(response.status_code))
    soup = bs4.BeautifulSoup(response.text, "html.parser")
    # 获取页面数字
    comic = soup.select('h3')
    print(comic[0].getText())
    number = re.findall("\d+", comic[0].getText())
    if number == []:
        print('The end.')
        break;
    else:
        url = 'http://www.heibanke.com/lesson/crawler_ex00/' + number[0] # 拼接新地址

selenium 实现
# coding=utf-8
import requests, re
from selenium import webdriver
url = 'http://www.heibanke.com/lesson/crawler_ex00/'
browser = webdriver.Firefox()
while True:
    # download the page
    print("Forward to page %s ..." % url)
    browser.get(url)
    elem = browser.find_element_by_tag_name('h3')
    # get the url of the for the next page
    print(elem.text)
    number = re.findall("\d+", elem.text)
    if number == []:
        print('The end.')
        browser.quit()
        break;
    else:
        url = 'http://www.heibanke.com/lesson/crawler_ex00/' + number[0] # 拼接新地址
到这里我们才能看到最终成功的页面长这样:

好了,第一关相对来说比较容易,下次我们来搞一下第二关,又兴趣的可以自己先上手攻取下了~
如果觉得有用,欢迎关注我的微信,一起学习,共同进步,不定期推出赠书活动~

最近搜集到慕课网视频,视频内容涵盖 Python、Java、PHP、前端、小程序、算法、架构、数据库等等!关注本公众号,后台回复「慕课网」即可获取下载地址。
Python 爬虫闯关(第一关)的更多相关文章
- Python:黑板课爬虫闯关第一关
		
近日发现了[黑板课爬虫闯关]这个神奇的网页,练手爬虫非常的合适 地址:http://www.heibanke.com/lesson/crawler_ex00/ 第一关非常的简单 get 请求网址,在响 ...
 - python爬虫1:第一个爬虫
		
1.python2.3的库名不同,如果版本不同记得改. Python2.x 有这些库名可用: urllib,urllib2,urllib3,httplib,httplib2,requests Pyth ...
 - python爬虫心得(第一天)
		
爬虫是什么? 我个人觉得用简单通俗的话来说就是在浏览网页的过程中将有价值的信息下载到本地硬盘或者是储存到数据库中的行为. 爬虫的基础认知 可以参考此链接:https://www.imooc.com/a ...
 - python3 黑板客爬虫闯关游戏(一)
		
这是学习python爬虫练习很好的网站,强烈推荐! 地址http://www.heibanke.com/lesson/crawler_ex00/ 第一关猜数字 很简单,直接给出代码 import ur ...
 - Python Challenge 第一关
		
偶然在网上看到这个,PYTHON CHALLENGE,利用Python语言闯关,觉得挺有意思,就记录一下. 第0关应该算个入口吧,试了好几次才试出来,没什么代码就不写了.计算一个结果出来就行. 第一关 ...
 - the python challenge闯关记录(0-8)
		
0 第零关 2**38 = 274877906944 下一关的url:http://www.pythonchallenge.com/pc/def/274877906944.html 1 第一关 移位计 ...
 - <爬虫>黑板爬虫闯关02
		
import requests from lxml import etree ''' 黑板爬虫闯关02 网址:http://www.heibanke.com/lesson/crawler_ex01/ ...
 - <爬虫>黑板爬虫闯关01
		
import requests from lxml import etree import time ''' 黑板爬虫闯关 网址:http://www.heibanke.com/lesson/craw ...
 - sql-lib闯关11-20关
		
从第11关开始,我们就进入到了POST注入的世界了. POSTpost是一种数据提交方式,它主要是指数据从客户端提交到服务器端,例如,我们常常使用的用户登录模块.网站的留言板模块等,在这些功能模块中我 ...
 
随机推荐
- (总结)RHEL/CentOS 7.x的几点新改变
			
一.CentOS的Services使用了systemd来代替sysvinit管理 1.systemd的服务管理程序: systemctl是主要的工具,它融合之前service和chkconfig的功能 ...
 - spring 构造方法注入和setter方法注入的XML表达
			
1.构造方法注入 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC ...
 - lucas定理证明
			
Lucas 定理(证明) A.B是非负整数,p是质数.AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]. 则组合数C(A,B)与C(a[n],b[n])* ...
 - hdu 5969 最大的位或
			
最大的位或 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
 - 九度OJ 1260:珍珠项链 (字符串处理、DP)
			
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:101 解决:27 题目描述: 假设有一条珍珠项链,有很多珍珠,r代表红色, b代表蓝色, w代表白色. 假设你在某一处剪开之后,你会沿着顺时 ...
 - nginx中使用waf防火墙
			
1.安装依赖 yum install -y readline-devel ncurses-devel 2.安装Lua # .tar.gz # cd lua- # make linux # make i ...
 - linux 7- - watch,free,mpstat,vmstat,iostat,pidstat,df,du
			
十八. 和系统运行状况相关的Shell命令: 1. Linux的实时监测命令(watch): watch 是一个非常实用的命令,可以帮你实时监测一个命令的运行结果,省得一遍又一遍的 ...
 - Kindeditor 编辑区样式结构
			
ke-container ke-toolbar ke-edit ke-edit-iframe ke-edit-area ke-statusbar
 - RTMP & HLS
			
一,直播云架构 2. RTMP 协议 RTMP(Real Time Messaging Protocol)是Adobe Systems公司为Flash播放器和服务器之间音频.视频和数据传输开发的开放协 ...
 - 第二十四篇、socketserver源码剖析
			
这里选择的是python2.7(python3和2.7的源码基本类似) #!/usr/bin/env python # -*- coding:utf-8 -*- import SocketServer ...