0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

测试你的爬虫能力是否及格

电子工程师 来源:fqj 2019-05-22 17:29 次阅读

最近在网上看到一个非常有意思的 Python 游戏通关网站,一共有 33 关,每一关都需要利用 Python 知识解题找到答案,然后进入下一关。

很考验对 Python 的综合掌握能力,比如有的闯关需要用到正则表达式,有的要用到爬虫。

我们平常学 Python 都是按章节顺序、包或者模块来学,容易前学后忘。正好可以拿这个网站来综合测试一下对 Python 的掌握情况,以便查缺补漏。

来说说这个网站怎么玩。

mark

这是网站主页面,很有历史感对吧,诞生了已有十几年了。但千万不要因为看着像老古董而小瞧它。

mark

我们来玩玩看,点击「get challenged」开始挑战。

第 0 关是 Warming up 热身环节:

这一关要求是修改 URL 链接,给的提示是电脑上的数学表达式:2 的 38 次方,所以大概就是需要计算出数值,然后修改url 进入下一关。

所以这关就是考 Python 的基本数值运算,你知道怎么算么?

打开 Python 自带终端,一行代码就能计算出结果:

mark

把原链接中的0替换为274877906944回车就会进入下一关:

mark

游戏这就正式开始了。图片中的笔记本给了三组字母,很容易发现规律:前面的字母往后移动两位就是后面的字母。

那么需要做的就是根据这个规律把下面的提示字符串,做位移解密得到真正的句子含义:

这道题考察字符串编码和 for 循环相关知识,代码实现如下:

1text='''gfmncwmsbgblrrpylqjyrcgrzwfylb.rfyrqufyramknsrcpq 2
ypcdmp.bmglegrglzwfylbgqglcddgagclrylbrfyr'q 3
ufwrfgqrcvrgqqmjmle.sqgleqrpgle.kyicrpylq() 4
gqpcamkkclbcb.lmuynnjwmlrfcspj.''' 5 6text_translate='' 7foriintext: 8
ifstr.isalpha(i): 9
n=ord(i)10
ifi>='y':11
n=ord(i)+2-2612
else:13
n=ord(i)+214
text_translate+=chr(n)15
else:16
text_translate+=i17print(text_translate)

得到结果:

1ihopeyoudidnttranslateitbyhand.2thatswhatcomputersarefor.3doingitinbyhandisinefficientandthat'swhythistextissolong.4usingstring.maketrans()isrecommended.nowapplyontheurl.

作者很风趣,当然不能手动去一个推算了,推荐用 string.maketrans() 这个方法解决,我们上面采取的是比较直接的方法,官方给出了更为精简的方法:

1importstring2l=string.lowercase3t=string.maketrans(l,l[2:]+l[:2])4print(text.translate(t))

然后把 url 中的 map 改为ocr回车就来到了第 2 关:

mark

作者接着说过关的提示可能在书里(当然不可能了)也可能在网页源代码里。那就右键查看源代码往下拉看到绿色区域,果然找到了问题:

mark

意思就是:要在下面这一大串字符里找到出现次数最少的几个字符

考察了这么几个知识点:

正则表达式提取字符串

list 计数

条件语句

如果是你,你会怎么做?

首先,用 Requests 请求网页然后用正则提取出字符串,接着 for 循环计算每个字符出现的次数。

1%6104 2$6046 3@6157 4_6112 5^6030 6#6115 7)6186 8&6043 9!607910+606611]615212*603413}610514[610815(615416{60461718e119q120u121a122l123i124t125y1

可以看到出现次数最少的就是最后几个字符,合起来是「equality」,替换 url 字符就闯过过了第 2 关进入下一关继续挑战。是不是有点意思?

后面每一关都需要用到相关的 Python 技巧解决,比如第 4 关:

mark

这一关作者弄了个小恶作剧,需要手动输入数值到 url 中然后回车,你以为这样就完了么?并没有它有会不断重复弹出新的数值让你输入,貌似无穷尽。

所以,这一关肯定不能采取手动输入的方法闯关,自然要用到 Python 了。要实现自动填充修改 url 回车跳转到新 url,循环直到网页再也无法跳转为止这一功能。

如果是你,你会怎么做?

其实,一段简单的爬虫加正则就能搞定。思路很简单,把每次网页中的数值提取出来替换成新的 url 再请求网页,循环下去,代码实现如下:

1importrequests 2importre 3importos 4 5#首页url 6resp=requests.get( 7'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345').text 8url='http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=' 9#计数器10count=011whileTrue:12try:13#提取下一页动态数值14nextid=re.search('d+',resp).group()15count=count+116nextid=int(nextid)17except:18print('最后一个url为:%s'%nexturl)19break2021#获取下一页url22nexturl=url+str(nextid)23print('url%s:%s'%(count,nexturl))24#重复请求25resp=requests.get(nexturl).text

输出结果如下:

可以看到,最终循环了 85 次找到了最后一个数字16044,输入到 url 中就闯关成功。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    51

    文章

    4669

    浏览量

    83457
  • 数值运算
    +关注

    关注

    0

    文章

    2

    浏览量

    5014

原文标题:33关Python游戏,测试你的爬虫能力到底及格不?

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Python数据爬虫学习内容

    现行环境下大数据与人工智能的重要依托还是庞大的数据和分析采集,就如淘宝、京东、百度、腾讯级别的企业能够通过数据可观的用户群体获取需要的数据。而一般企业可能就没有这种通过产品获取数据的能力和条件。因此
    发表于 05-09 17:25

    Python爬虫与Web开发库盘点

    ,高层次的web抓取网页,并从web站点的页面中提取结构化的数据Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。最爽的就是它是一个框架,任何人都可以根据需求方便的修改,里面有很多类型爬虫的基
    发表于 05-10 15:21

    Python 爬虫:8 个常用的爬虫技巧总结!

    费的。7、gzip压缩有没有遇到过某些网页,不论怎么转码都是一团乱码。哈哈,那说明还不知道许多web服务具有发送压缩数据的能力,这可以将网络线路上传输的大量数据消减 60% 以上。这尤其适用于 XML
    发表于 01-02 14:37

    爬虫犯罪有多远

    不要在爬虫犯罪的边缘疯狂试探!
    发表于 04-11 16:04

    爬虫可以采集哪些数据

    一、爬虫可以采集哪些数据   1.图片、文本、视频   爬取商品(店铺)评论以及各种图片网站,获得图片资源以及评论文本数据。   掌握正确的方法,在短时间内做到能够爬取主流网站的数据,其实非常容易
    发表于 10-15 17:25

    应对反爬虫的策略

    被机器人肆意地滥用,网站的安全和流量费用就会面临严重威胁,因此很多网站都会想办法防止爬虫程序接入。为了能够更好的爬虫,我们需要使用可变的ip地址,建立网络爬虫的第一原则是:所有信息都可以伪造。但是有
    发表于 12-12 17:39

    网络爬虫之关于爬虫http代理的常见使用方式

    在做爬虫的过程中,如果爬取的频率过快,不符合人的操作模式。有些网站的反爬虫机制通过监测到你的IP异常,访问频率过高。就会对进行封IP处理。目前已有比较多的第三方平台专门进行代理IP
    发表于 04-26 17:43

    网络爬虫nodejs爬虫代理配置

    随着互联网的发展进步,现在互联网上也有许多网络爬虫。网络爬虫通过自己爬虫程序向目标网站采集相关数据信息。当然互联网的网站会有反爬策略。比如某电商网站就会限制一个用户IP的访问频率,从而出现验证码
    发表于 09-01 17:23

    什么是爬虫

    什么是爬虫爬虫的价值?最简单的python爬虫爬虫基本架构
    发表于 11-05 06:13

    如何运行imdb爬虫

    imdbcn爬虫实例 imdbcn网站结构分析 创建爬虫项目 运行imdb爬虫
    发表于 11-05 07:07

    0基础入门Python爬虫实战课

    情况及薪资水平……诸如此类,不胜枚举。只要是信息,只要你能看到它,想批量获取它,都可以使用爬虫来实现。但,自学爬虫存在不少障碍,可能会有这些困扰:看了书,上了课,却依然不会爬虫自学遇
    发表于 07-25 09:28

    python网络爬虫概述

    数据,则可以通过爬虫从网上抓取;在Web安全方面,使用爬虫可以对网站是否存在某一漏洞进行批量验证、利用;在产品研发方面,可以采集各个商城物品价格,为用户提供市场最低价;在舆情监控方面,可以抓取、分析新浪微博
    发表于 03-21 16:51

    爬虫是如何实现数据的获取爬虫程序如何实现

    进入大数据时代,爬虫技术越来越重要,因为它是获取数据的一个重要手段,是大数据和云计算的基础。那么,爬虫到底是如何实现数据的获取的呢?今天和大家分享的就是一个系统学习爬虫技术的过程:先掌握爬虫
    发表于 01-02 16:30 10次下载
    <b class='flag-5'>爬虫</b>是如何实现数据的获取<b class='flag-5'>爬虫</b>程序如何实现

    网络爬虫是否合法

    网络爬虫在大多数情况中都不违法,其实我们生活中几乎每天都在爬虫应用,如百度,你在百度中搜索到的内容几乎都是爬虫采集下来的(百度自营的产品除外,如百度知道、百科等),所以网络爬虫作为一门
    的头像 发表于 03-21 17:20 1.2w次阅读

    Python爬虫 你真的会写爬虫吗?

    你以为你真的会写爬虫了吗?快来看看真正的爬虫架构!
    的头像 发表于 05-02 17:02 3532次阅读
    Python<b class='flag-5'>爬虫</b> 你真的会写<b class='flag-5'>爬虫</b>吗?