PC-python

 · 2019-12-15 · 次阅读


Requests

the website is the API... Requests的get()方法
最简单的获得网页的方法
r = requests.get(url)

requests.get(url,params=None,*kwargs)
url:拟获取页面的url链接
params代表url中的额外参数,字典或字节流格式,可选
*
kwargs:12个控制访问的参数
requests最重要的两个对象是request和response
response的使用:

robots.txt

Re

python的爬虫使用的是requests模块 使用import可以引入模块,根JAVA的导入包有异曲同工之妙

然后使用url=’’
再使用r=requests.get(url,header=header)
这个后面的header是伪装浏览器用
再使用print r.text打印文本

网络爬虫的限制
来源审查:审查User-Agent字段,是否来自已知浏览器,只响应友好爬虫的访问。
发布公告: Robots协议

python爬虫
1.去网页上面抓数据的程序
2.通用爬虫:百度,谷歌等搜索引擎
3.聚焦爬虫:针对性的去某个网站抓数据的程序
打开网页,右键审查,然后打开network的XHR,然后找到里面的m4a后缀文件,复制里面的url即可直接下载。

XHR:XMLHttpRequest

下面是两道CTF的python爬虫类题目,在这里做一下实践一下
1.速度要快
  进入页面后,发现有个提示我觉得你要快点。ctrl+u查看源代码提示:

    </br>我感觉你得快点!!!<!-- OK ,now you have to post the margin what you find -->

也就是说我们必须很快的post一个margin给服务器才能拿到flag.我们看一下网站的http头。
发现有个可以的flag头部:

    flag: 6LeR55qE6L+Y5LiN6ZSZ77yM57uZ5L2gZmxhZ+WQpzogT1RRNU56TTE=

这种写法感觉是base64加密,我们放入base64解密中发现可以解密两次,分别是:

è·‘çš„è¿˜ä¸é”™ï¼Œç»™ä½ flag吧: OTQ5NzM1=
è·‘çš„è¿˜ä¸é”™ï¼Œç»™ä½ ~V 吧: 949735=

再解密就都是乱码了,因而极有可能就是提交这个949735=这个值。但我们刷新页面后就会更换值,并且页面提示了要GKD!!!
因而我们的python就闪亮登场了!!。
以下为我写的小脚本(跟着网上大佬一行一行写哈哈)

    import requests
    import base64
    url = "http://123.206.87.240:8002/web6/"
    \#创建session会话
    s=requests.session()
    \#取得数据包的headers
    headers=s.get().headers
    \#str1为获得第一次base64解码header中flag的值
    str1 = base64.b64decode(headers['flag'])
    \#str2为再次解码str1并且按照:分隔后取后半部分的值,repr是将str1转化为可以被解析的字符串
    str2 = base64.b64decode(repr(str1).split(':')[1])
    \#split取得之后是按列表即数组方式存储
    data={'margin',str2}
    flag=s.post(url,data=data)
    print(flag.text)

这样就可以拿下key了

2.秋名山老司机
  这道题。。说实话我怀疑是炸了,网上都说刷新后会有提示post提交value的值为答案就可以了。但是我刷新了没有效果,算了这道题就当练习python。最后也跑不出flag.不知道是不是flag被删了。
以下为python脚本:

    import requests
    import re
    url = "http://123.206.87.240:8002/qiumingshan/" 
    s = requests.getsession()
    data = s.get(url)
    str = re.findall(r'<div>.*</div>',data.text)
    str_calculate = mystr[0].strip('=?;</div>')
    result = {
        "value":eval(str_calculate)
    }
    str2 = s.post(url,data=result)
    print(str2.text)