书《Python web scraping》第二版中构建网站代码出现AttributeError:pretty_link错误之解决

1 问题描述

最近在第三遍阅读《Python web scraping: fetching data from the web》第二版,发现与该书籍配套的专门用于爬虫练习的网站http://example.webscraping.com已不能访问。点击该网址会自动重定向到一个github网址上,其包含了构建http://example.webscraping.com网站所需的源代码。按照其上提示的方法构建、部署http://example.webscraping.com,在web2py框架的web IDE中会提示出错信息。下表为在Python3.7.6环境下出现的错误及解决方法。

错误错误描述原因分析解决方法
1提示找不到Recaptcha,涉及的文件为1_db.py因为安装的是最新版的web2py框架,且该框架可以支持我电脑上的Python3.6+版本上运行。该新版框架不再支持Recaptcha,但支持Recaptcha2将代码中的Recaptcha改为Recaptcha2
2common.py中的语句import cSringIO as StringIO出错因为在Python3.x的版本中,已不再区分cStringIO和StringIO,而是将它们统一为io。可知,该书的例子网站构建时基于Python2.7.x的。这为续问题的解决埋下伏笔将导入包语句改为import io as StringIO

依次解决了上述两个问题后,还会出现一个错误。注意,我电脑上运行web2py框架的python版本为3.7.6。该错误提示AttributeError: 找不到pretty_link,并在Web IDE中给出了异常抛出的堆栈链表。该信息有助于我们调试。

尝试了多种方法,该错误依然得不到解决。

2 解决过程

因为对web2py这个Web开发框架不熟,我决定先弄懂它。于是在官方的web2py上找了一本书:《web2py: complete reference manual》6th edition。这是一本还没出版的网上公开的书。按照书上的例子讲解,边操作地一口气读了书上的前三章。虽然书上的截图是2012年的,但都可以运行。

2.1 web2py之感悟

大概十多年前,用了ASP.Net进行了Web开发。经过这么多年,对Web开发已渐渐陌生。通过阅读web2py的书,关于Web开发的热情又重新点燃。下面是一些关于web2py的使用感悟:

  1. web2py是一个全栈Web开发框架,即不依赖于第三方的安装包,即可完成Web的快速开发。
  2. web2py框架完全采用MVC软件架构,数据表示、页面展现、业务逻辑完全区分,是学生们学习MVC软件架构的绝佳范例。
  3. web2py做了许多包装,开发网页、或者利用Python写后台代码,只涉及到少量的HTML代码。例如,DIV类是对标签<div>的抽象。
  4. web2py没采用ORM模型方法处理数据,而是用DAL模型,即数据抽象层模型,即对SQL语句又做了抽象。在控制器中编写与数据库打交道的代码时,我们只需写简单的几条高层指令,即可完成数据库的CRUD。
  5. web2py提供了基于角色的访问控制,只需简单的几行代码,即可完成待开发网站的基于角色的访问控制,并可以提供相应的管理页面。

上面给我的震撼不言而喻。我感受到了web2py框架的开发威力,能促进开发效率的大幅提升。之前使用ASP.NET时,感觉.NET已经很卓越了,但相比于web2py,ASP.NET还是较低层。

2.2 问题的解决

了解了web2py框架,清楚了它的框架结构后,在我的Python 3.7.6环境电脑上,还是没能解决AttributeError错误。

又在书籍《web2py: complete reference manual》6th edition上发现一句话:

在Python 2.7上web2py上开发的网站代码不能在Python3.6.x上的web2py上运行,反之亦然。

根据前述判断,http://example.webscraping.com是在Python 2.7的web2py上开发的。于是下班回到家,在家里的一台旧笔记本电脑上折腾起来,部署好Python 2.7.16环境,以web2py代码的方式运行web2py服务器。(注意,官方网站上提供的web2py的Python 2.7二进制安装包只针对64位的Windows机器,不支持32位的Windows机器,因此,我只能以代码的方式运行web2py框架。)

此时,将构建http://example.webscraping.com代码放置在Python2.7环境中的web2py框架的applications文件夹中,在浏览器访问例子网站,出现了一个Recaptcha错误,按前述方法修正此错误后,即可在本电脑上完美地运行http://example.webscraping.com例子网站,也可在局域网内访问。当然,部署到整个Internet上也是可以的。

3 感悟

通过阅读《Python web scraping》2ed,及解决AttributeError错误后,使我认识到,在学习爬虫技术的时候必须有一个专门配套的针对学习的例子网站。而互联网上的网站,随着时间的推移,往往变得不稳定,甚至访问不了。必须有一种方法,确保被爬虫的网站稳定才行。幸而,书《Python web scraping》提供了这样一种方法,供国内的爬虫技术书籍以撰写借鉴。

该书《Python web scraping》比较矛盾的一点是,例子网站http://example.webscraping.com的构建是基于Python 2.7的,而书中爬虫技术的实现是基于Python 3.4+的。但这可以理解,因该书成于2017年,在该年才推出针对Python3.6+的web2py框架,二者时间点可能无交叉。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值