Python 爬虫闯关

(个人经验,仅供参考,错误之处,敬请谅解)

前言

    学到python的爬虫,有个链接是黑板课闯爬虫关的,于是去试了下
    第一关
    第二关
    第三关:链接以此类推,不过有个防护,登陆之后才显示。

第一关

    这里直接给出代码,个人直接抓取

标签中的数值,再get该链接,程序代替手工。

#Encoding=utf-8
import requests
import re

url_start = "http://www.heibanke.com/lesson/crawler_ex00";
	r = requests.get(url_start);
	number = re.findall('

.*?(\d{5}).*',r.text) while number: r = requests.get(url_start+'/'+number[0]) number = re.findall('

.*?(\d{5}).*',r.text) print(number)

第二关

    第二关的话,需要查看源代码,里面有一个hidden文本框,需要同用户名和密码一起提交给服务器进行校验(也存在cookie中)
    方法就是先抓取token值,再构造数据进行post请求,三十次终归会破解。这里不给出代码,第三关包含了

第三关

    注册登陆之后,再进入ex02,才是第三关,否则无法进入,所以这里比第二关多了一个登陆验证。
    代码如下:

#Encoding=utf-8
import requests
import re
url_login = "http://www.heibanke.com/accounts/login"
url = "http://www.heibanke.com/lesson/crawler_ex02"
user = {
	'csrfmiddlewaretoken':'',
	'username':'wiahu',
	'password':'123456'
}

data = {
	'csrfmiddlewaretoken':'',
	'username':'a',
	'password':0
}
s = requests.Session()
r = s.get(url_login)
token = re.findall('value=\'(.*?)\'',r.text)
user['csrfmiddlewaretoken'] = token[0]
print(user)
s.post(url=url_login,data=user)
for i in range(0,30):
	m = s.post(url)
	token = re.findall('value=\'(.*?)\'',m.text)
	data['csrfmiddlewaretoken'] = token[0]
	data['password'] = i
	p = s.post(url=m.url,data=data)
	error = re.findall('密码错误',p.text)
	if not error:
		print('password is ',i)

    个人给出的方法与前两关类似,都是使用正则抓取token值,再进行post。

注意点:
    个人闯第三关诶研究了两天,一直卡在token校验上,找了网上不同的答案,最终比较发现,不止是要post上一个get到的url,而且还存在headers、session机制的验证,所以只好用request.Session 再传递数据给所请求到的页面。
    很多答案使用cookie获取token值,个人觉得爬虫闯关还是用正则来‘爬’吧

你可能感兴趣的:(Python)