爬虫闯关

这两天刚学了一点python爬虫, 然后在知乎上面看到了这个小游戏 爬虫闯关。


第一关

就是读取给的网页的字里面的数字, 然后把这个数字加到url里面, 变成一个新的网址, 不断循环。 读取数字用正则搞一下就好, 然后写一个递归函数就可以了, 很简单。
``` import requests from bs4 import BeautifulSoup import re baseurl = 'http://www.heibanke.com/lesson/crawler_ex00/' def cal(url): wb_data = requests.get(url) soup = BeautifulSoup(wb_data.text, 'lxml') title = soup.select('body > div.container-fluid > div > div.col-xs-12.col-sm-10.col-md-8.col-lg-6 > h3') str = re.compile(r'[0-9]+') l = re.findall(str, title[0].text) if l: num = l[0] url = baseurl + num print(url) cal(url)

cal(baseurl)

<br><br>
<h2><a href = "http://www.heibanke.com/lesson/crawler_ex01/" target = "_blank">第二关 </a></h2>
<br>
给你一个用户名和密码, 用户名随便写, 密码是1-30的数字, 让你猜出来是几。

这个也没有什么难度, post的时候加一个data, 然后循环随便搞一下就可以了..

from bs4 import BeautifulSoup
import requests

url = 'http://www.heibanke.com/lesson/crawler_ex01/'
for i in range(1, 31):
data = {
'username': 1,
'password': i,
}
wb_data = requests.post(url, data = data)
soup = BeautifulSoup(wb_data.text, 'lxml')
title = soup.select('body > div > div > div.col-xs-12.col-sm-10.col-md-8.col-lg-6 > h3')[0]
print(title.get_text(), i)


<br><br>
<h2><a href = "http://www.heibanke.com/lesson/crawler_ex02/" target = "_blank">第三关 </a></h2>
<br>

这个比上一个难, 用上一个的方法的话得到403, 根本进不去..
这个题多一个csrf, 但是这个东西是什么我到现在也是不知道的..
用一个header保存一下cookie和user-agent, 然后用一个data保存username, password, 以及csrf的值。
csrf的值可以通过chrome很容易的找出来。
f12打开监控, 然后到network那一栏, 然后输入用户名和随便一个密码, 然后点登陆, 就可以看到crawer_ex02/这样一个东西, 点开在最下面就有csrf的值。
然后和上一题就一样了, post的时候多加一个header就可以

from bs4 import BeautifulSoup
import requests

url = 'http://www.heibanke.com/lesson/crawler_ex02/'
for i in range(1, 31):
data = {
'username': 1,
'password': i,
'csrfmiddlewaretoken': '7N0jcVSUQRd5ezEfF95fhYbI1rADeO7m'
}
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36',
'Cookie': 'sessionid=o6ydafn1f151urac1d7lbdiw6bjg566q; csrftoken=7N0jcVSUQRd5ezEfF95fhYbI1rADeO7m; Hm_lvt_74e694103cf02b31b28db0a346da0b6b=1461495011; Hm_lpvt_74e694103cf02b31b28db0a346da0b6b=1461495140'
}
wb_data = requests.post(url, data = data, headers = header)
soup = BeautifulSoup(wb_data.text, 'lxml')
title = soup.select('body > div > div > div.col-xs-12.col-sm-10.col-md-8.col-lg-6 > h3')[0]
print(title.get_text(), i)


剩下的我还不会=.=
原文地址:https://www.cnblogs.com/yohaha/p/5428161.html