vpnbook.py
vpnbook提供免费的vpn服务,当然了,免费的肯定有限制,vpnbook的限制在于速度,一般只有10kb/s左右,用来看看网页还可以,当主力就不够了。
话说IE存在的意义就是用来下载其它浏览器,我写这个脚本也是这个意思,有时候下载其它代理程序首先得番茄,那么,这个慢悠悠的vpn就是没办法的办法了。
这个脚本我写了三次:
第一次是使用urllib2 + BeautifulSoup
第二次是使用requests + BeautifulSoup
第三次是这个,原因在于第一次和第二次都需要第三方模块,不能满足拿来即用的原则,所以就自己瞎搞再写一遍了。
废话不多说,上代码:
#! /usr/bin/python #coding:utf-8 import re import urllib2 url = "https://www.vpnbook.com/freevpn" response = urllib2.urlopen(url) html = response.read() # print html m = re.search('<ul\sclass=\"disc\">.*</ul>',html,re.S) if m: string = m.group() result = string[:string.find("</ul>")+len("</ul>")] # print(result) print "Server:" k = re.findall(r"<li><strong>.*\.vpnbook.com</strong>",result) for one in k: print "\t"+one[one.find("<strong>")+len("<strong>"):one.find("</strong>")] u = re.findall(r"<li>Username.*</li>",result) user = u[0] print "Username:" print "\t"+user[user.find("<strong>")+len("<strong>"):user.find("</strong>")] p = re.findall(r"<li>Password.*</strong>",result) password = p[0] print "Password:" print "\t"+password[password.find("<strong>")+len("<strong>"):password.find("</strong>")] else: print "No matched" if __name__ == "__main__": raw_input() else: pass
enjoy it!
=============================================2014-04-29 00:49=================================================
1 #! /usr/bin/python 2 #coding:utf-8 3 4 import re 5 import urllib2 6 7 url = "https://www.vpnbook.com/freevpn" 8 9 response = urllib2.urlopen(url) 10 11 html = response.read() 12 13 # print html 14 15 m = re.search('<ul\sclass=\"disc\">.*?</ul>',html,re.S) 16 if m: 17 result = m.group() 18 # print(result) 19 print "Server:" 20 k = re.findall(r"<li><strong>.*\.vpnbook.com</strong>",result) 21 for one in k: 22 print "\t"+one[one.find("<strong>")+len("<strong>"):one.find("</strong>")] 23 u = re.findall(r"<li>Username.*</li>",result) 24 user = u[0] 25 print "Username:" 26 print "\t"+user[user.find("<strong>")+len("<strong>"):user.find("</strong>")] 27 p = re.findall(r"<li>Password.*</strong>",result) 28 password = p[0] 29 print "Password:" 30 print "\t"+password[password.find("<strong>")+len("<strong>"):password.find("</strong>")] 31 else: 32 print "No matched" 33 34 if __name__ == "__main__": 35 raw_input() 36 else: 37 pass
代码更新了,看看有什么差别?
15行的地方多了一个问号,17行的地方少了一行代码,这里是正则表达式的贪婪模式与懒惰模式的区别,具体请参考相关文章。