Python 爬虫闯关

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

前言

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

第一关

    这里直接给出代码,个人直接抓取<h3>标签中的数值,再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('<h3>.*?(\d{5}).*',r.text)
	while  number:
		r = requests.get(url_start+'/'+number[0])
		number = re.findall('<h3>.*?(\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值,个人觉得爬虫闯关还是用正则来‘爬’吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值