因为嘉伟思杯里的一个脚本题目,16进制计算,python3正则还没学,所以没写出来。大佬跟我说也可以用BS4,从DOM上下手,直接爬下来直接一个eval就搞定了,eval可以像这样计算16进制,eval('0x2b+0x37')。BUGKU已经写了很多了,还几题没写,慢慢的续上。写过的就不发WP了,百度都有,就是像记录自己的学习历程。从原来的不懂,到现在的会。
呢么进入正题:),进入题目链接后,
import re
import requests
url='http://123.206.87.240:8002/qiumingshan/'
r=requests.session()
numbers=r.get(url)
last=re.search(r'(\d+[/+*-])+(\d+)',numbers.text).group() 或者用re.findall也可以实现想BS一样的功能#last=re.findall(r'<div>(\d.*)</div>',numbers.text)[0]
#data=eval(last.strip('=?;'))
data=eval(last)
post={'value':data}
accept=r.post(url,data=post)
print(accept.text)
至于为什么知道参数是VALUE,我也很疑惑写完脚本后,不知道POST参数是什么,随便找了下WP看了下,刷新多次后,就会出现。。。。(我醉了)
来了,老弟,女朋友GANK完,就开始撸代码了。其实就是用BS4在DOM上操作,爬取页面上需要的东西,然后转化成String,再eval下,因为菜的真实,各种百度转化格式。
import requests
from bs4 import BeautifulSoup
url='http://123.206.87.240:8002/qiumingshan/'
r=requests.session()
title=r.get(url)
html=title.text
beau=BeautifulSoup(html,'html.parser')
texts=beau.find_all('div')
a=texts[0].string
print(type(a),type(str(a)))
c=str(a).strip('=?;')
data=eval(c)
post={'value':data}
abc=r.post(url,data=post)
print(abc.text)
把bs4.element.Tag通过string方法转化为bs4.element.NavigableString,然后可以通过str()或者join方法来转化为string格式,再一个eval搞定。具体NavigableString是什么,留给大家百度了(其实自己也就是一知半解QAQ)
然后代码的最后,a,b,c这种命名格式不推荐,虽然写起来方便,但不容易记忆,如果是很大一串的代码,呢么你就GG了。所以养成一个代码命名的好习惯是很总要的噢(我只是偷懒了一下下)
BS4学习可以通过文档查阅