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
原创粉丝点击