python脚本之正则表达式

Impossible n’est pas français

webchall的一道题,题目要求分解一个很大的数的质因数。需要6s 内提交 但是,只要我们尝试提交一次之后,就可以发现它会返回一个正确的解。

既然如此,我们只要先提交一次,然后程序读取它返回的正确数字串,再提交就可以了。

在匹配网页信息的时候,python可以使用库beautifulsoup也可以使用正则表达式re模块,这里我两个都用了,便于自己学习。

python脚本如下:

#!/usr/bin/env python
# coding=utf-8
import requests
import urllib2
import lxml
import lxml.html as H
from bs4 import BeautifulSoup

cookie = {
    'WC': '9038838-0-DGwGp7VNYefa6o7o'
}
def get_number():
    number_url = 'http://www.wechall.net/challenge/impossible/index.php?request=new_number'
    #opener = urllib2.build_opener()
    #opener.addheaders.append(('Cookie','WC=9038838-0-DGwGp7VNYefa6o7o'))
    #f = opener.open(number_url)
    #html = f.read()
    #html = urllib2.urlopen(number_url).read()
    #soup = BeautifulSoup(html)
    resp = requests.get(number_url, cookies=cookie)
    res =resp.content
    soup = BeautifulSoup(res)
    div_new = soup.find('div',{"id":"page"})
    movie_new = div_new.get_text()
    print movie_new
get_number()

def get_answer():
    post_data = {
        'solution': '',
        'cmd': 'Send',
        'gwf3_csrf': 'bNZbC2XL'
    }
    url = 'http://www.wechall.net/challenge/impossible/index.php' 
    resp = requests.post(url, cookies=cookie, data=post_data)
    # print resp.text
    d = H.document_fromstring(resp.text)
    import re
    ar = re.compile(r'"(\d+)"')
    text = d.xpath('//div[@class=\'gwf_errors\']/ul/li')[0].text_content()
    ans = ar.findall(text)[0]

    print ans 

    post_data = {
        'solution': ans,
        'cmd': 'Send',
        'gwf3_csrf': 'bNZbC2XL'
    }
    resp = requests.post(url, cookies=cookie, data=post_data)
    print resp.text
get_answer()

运行结果为:

大爷,赏个铜板呗!