Python挑战游戏( PythonChallenge)闯关之路Level- 4
来源:互联网 发布:windows u盘安装工具 编辑:程序博客网 时间:2024/06/05 02:28
闯关过程
关口地址:http://www.pythonchallenge.com/pc/def/linkedlist.html
输入关卡地址发现, 提示信息要求将网址改为:http://www.pythonchallenge.com/pc/def/linkedlist.php
闯关程序:
#coding:utf-8import urllib2import HTMLParserimport re,timefrom bs4 import BeautifulSoup as BSdef get_html_Pages(url):try: headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.2; rv:16.0) Gecko/20100101 Firefox/16.0'}#构建请求的request request=urllib2.Request(url,headers=headers) #利用urlopen获取页面代码 response=urllib2.urlopen(request) #将页面转化为UTF-8编码格式 html=response.read().decode('utf-8')html=HTMLParser.HTMLParser().unescape(html)#处理网页内容, 可以将一些html类型的符号如" 转换回双引号return html #捕捉异常,防止程序直接死掉 except urllib2.URLError,e:print u"连接失败,错误原因",e.reason return None except urllib2.HTTPError,e: print u"连接失败,错误原因:%s " % e.code return None def level4():level4_url='http://www.pythonchallenge.com/pc/def/linkedlist.php'html=get_html_Pages(level4_url)tips_string_pattern=re.compile('<!--(.*?)-->',re.S)#定义匹配规则,获取网页中注释的内容 tips_string=re.search(tips_string_pattern,html).group(1).strip()print u'提示信息是:%s ' % tips_string#获取图片网址bs_obj_level4=BS(html,'lxml')photo_url= bs_obj_level4.find('a').get('href')new_url_1= level4_url.replace(level4_url.split('/')[-1],photo_url)new_url_2 = new_url_1for i in range(400):print '%d , next url is %s ' % (i,new_url_2)next_html=get_html_Pages(new_url_2)print next_htmlif 'Divide' in next_html:print 'it is Divide,need do again 'new_url_2= new_url_1.split('=')[0] + '=' + str(int(new_url_2.split('=')[1])/2)print 'in Divide new url is %s' % new_url_2else:#通过正则表达式得到数字 str_num_pattern=re.compile(r'next nothing is (\d+)',re.S) str3=re.findall(str_num_pattern,next_html)#对数字长度进行判断,可以在最后跳出循环if str3 ==[] :print 'next lexvel'break; print str3[0]new_url_2= new_url_1.split('=')[0] + '=' + str(str3[len(str3)-1])if i%20 ==0:time.sleep(2)print 'finished'level4()
下一关网址 :
66831
peak.html
http://www.pythonchallenge.com/pc/def/peak.html
总结:
本章关卡和黑板客第一关很相似: 都是需要不停获得新的页面, 不停的将页面内容中的数字提取出来,然后组装新的url, 如此重复
不同的是,本节关卡, 中间多了两个小意外,
一次是: 跑着跑着, 会要求将上一次的地址尾数,除以2,得到新的数字,再次继续
第二次是, 页面上出现了两个数字, 因此,这就需要对匹配规则做出一点点限制, 不能使用之匹配数字的正则表达式。
阅读全文
1 0
- Python挑战游戏( PythonChallenge)闯关之路Level- 4
- Python挑战游戏( PythonChallenge)闯关之路Level 0
- Python挑战游戏( PythonChallenge)闯关之路Level- 1
- Python挑战游戏( PythonChallenge)闯关之路Level- 2
- Python挑战游戏( PythonChallenge)闯关之路Level- 3
- Python挑战游戏( PythonChallenge)闯关之路Level- 5
- Python挑战游戏( PythonChallenge)闯关之路Level- 6
- PythonChallenge 挑战之路 Level-4
- PythonChallenge 挑战之路 Level-0
- PythonChallenge 挑战之路 Level-1
- PythonChallenge 挑战之路 Level-2
- PythonChallenge 挑战之路 Level-3
- PythonChallenge 挑战之路 Level-5
- PythonChallenge 挑战之路 Level-6
- PythonChallenge 挑战之路 Level-7
- PythonChallenge 挑战之路 Level-8
- PythonChallenge 挑战之路 Level-9
- PythonChallenge 挑战之路 Level-10
- Android进程间共享数据之SharedPreference
- javascript文本输入框中判断中文字与英文字符占位多少
- 用JAVA语言表示出一个有秒计时的简单时钟:
- 使用 Office 365 PowerShell 管理用户帐户和许可证(一)使用 Office 365 PowerShell 查看许可证和服务
- 通过字符串创建对象并访问类中的方法(利用java的反射)
- Python挑战游戏( PythonChallenge)闯关之路Level- 4
- 对一些 关键词、语句、函数、专业名词 等的解释和理解(二)
- mac下安装Slice2java 报错问题
- MySQL
- 海航集团王健出席“2016海航光明行”启动仪式
- 206. Reverse Linked List--链表翻转
- jquery post请求服务器资源
- 雅克比矩阵(Jacobian Matrix)的意义
- 高并发量网站解决方案