Python 3 黑板客爬虫闯关

Python 版本是3.5

第一关

http://www.heibanke.com/lesson/crawler_ex00/

每页都会出现新数字,这一关考的就是获取网页和解析内容,非常简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import requests
import re

# 第一题网址
Q1_url = r'http://www.heibanke.com/lesson/crawler_ex00/'

url = Q1_url
num_re = re.compile(r'<h3>[^\d<]*?(\d+)[^\d<]*?</h3')
while True:
print('正在读取网址 ', url)
html = requests.get(url).text
num = num_re.findall(html)
if len(num) == 0:
break
else:
url = Q1_url + num[0]
print('结束!')

输出:

正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/19016
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/13579
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/43396
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/39642
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/96911
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/30965
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/67917
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/22213
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/72586
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/48151
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/53639
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/10963
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/65392
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/36133
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/72324
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/57633
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/91251
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/87016
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/77055
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/30366
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/83679
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/31388
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/99446
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/69428
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/34798
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/16780
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/36499
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/21070
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/96749
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/71822
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/48739
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/62816
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/80182
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/68171
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/45458
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/56056
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/87450
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/52695
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/36675
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/25997
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/73222
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/93891
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/29052
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/72996
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/73999
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/23814
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/98084
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/51103
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/39603
正在读取网址  http://www.heibanke.com/lesson/crawler_ex00/34316
结束!

访问最后一个网址,提示:恭喜你,你找到了答案.继续你的爬虫之旅吧!

OK,进入下一关。

第二关

http://www.heibanke.com/lesson/crawler_ex01/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import requests

# 爬虫闯关第二关网址
Q2_url = r'http://www.heibanke.com/lesson/crawler_ex01/'

username = 'king'
for x in range(1, 31):
print('正在猜密码: ', x)
data = {
'username':username,
'password':x
}
html = requests.post(Q2_url, data = data).text
if not '错误' in html:
print('密码是 ', x)
break

输出:

密码是  26

回到登录网址,输入密码过关!

第三关

http://www.heibanke.com/lesson/crawler_ex02/

这一关需要登录,随便注册一个账号,在爬虫中要用。另外要注意Post中不能少了csrfmiddlewaretoken。上一关中虽然有这一项,但是不加也可以。不过这一关里必须加上这个参数。

header必须加上Cookie。

以上信息是把每一步获取的网页源码控制台打印,然后分析出来的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import requests

# 爬虫闯关第三关
Q3_url = r'http://www.heibanke.com/lesson/crawler_ex02/'

# 登录后网址
login_url = r'http://www.heibanke.com/lesson/crawler_ex02/'

username = 自己注册
password = 自己注册

data = {
'username':username,
'password':password,
'csrfmiddlewaretoken':'CAb4NKnA31NhzjgdPpBfbsIbKIJ1lG8V'
}

headers = {
'Cookie':'sessionid=qx5zdoytvpf2qbtsz2i51hs69zakiu3h; csrftoken=CAb4NKnA31NhzjgdPpBfbsIbKIJ1lG8V'
}
s = requests.Session()
s.headers.update(headers)
html = s.post(login_url, data = data).text
# print(html)

for x in range(20, 31):
data = {
'username':username,
'password':x,
'csrfmiddlewaretoken':'CAb4NKnA31NhzjgdPpBfbsIbKIJ1lG8V'
}
print('正在猜密码: ', x)
html = s.post(login_url, data = data).text
# print(html)
if not '错误' in html:
print('密码是 ', x)
break

输出:

正在猜密码:  1
正在猜密码:  2
正在猜密码:  3
正在猜密码:  4
正在猜密码:  5
正在猜密码:  6
正在猜密码:  7
正在猜密码:  8
正在猜密码:  9
正在猜密码:  10
正在猜密码:  11
正在猜密码:  12
正在猜密码:  13
正在猜密码:  14
正在猜密码:  15
正在猜密码:  16
正在猜密码:  17
正在猜密码:  18
正在猜密码:  19
密码是  19

手动输密码过关!

第四关

这一关的逻辑设置得很奇怪,找作者问了也没看明白。不做了。

loveNight wechat
我的微信公众号,放一些有趣的内容,不定期更新。