上高中以来,学校一直订了一份「报纸」当作业用,叫《学英语》。最近做题时发现报纸与时俱进,多了几个二维码,分别是微信公众号还有「扫一扫 查答案」。
目标网站#
通过二维码扫描出来的结果是上一期的答案。网页的地址长这样:
简直不要太直白。
首先在网站逛了一圈,PC 版风格看起来仍然是很老旧的那种;网站首页是有专门的答案分区,但是点进来的答案很少。显然,我所需要的答案没有文章列表,必须要经过扫描二维码拿到。
然后便是尝试改地址:稍稍增减 id 参数,可以看到最近发的文章:
发现只有几期的答案是连在一起的,其余的有很多这家报社的其他产品的内容。这些答案的排布也并不是那么有规律,比如下一个 id 的是上上期的答案。那么,只需要爬取附近的每个页面,然后把符合要求的找出来就行了。
开发环境#
Google 提供了免费的 Jupyter Notebook 环境—— Colab,无需配置,开箱即用。进入 后创建一个新的 PYTHON3 笔记本。
或者,你也可以下载 ANACONDA 并安装。接着执行命令
这之后默认浏览器会打开本地的 Jupyter Notebook。
我们需要安装 requests_html 做爬虫。
requests-html 是基于现有的框架 PyQuery、Requests、lxml、beautifulsoup4 等库进行了二次封装,作者将 Requests 设计的简单强大的优点带到了该项目中。
Jupyter Notebook 中,以 !
开头的行会被解释成命令。
爬取和解析#
这种 CMS 一般都没什么反爬措施,连 X5 浏览器 UA 都不需要伪造。所有网页的标题都是相同的,所以爬取每个页面内的标题就好。
Chrome 内右键目标元素,点「检查」,右键 Elements 中高亮的颜色,复制选择器。
对下面的答案图片如法炮制,它们的选择器分别是:
页面最后一般会有 doc 文档可以下载,但是最近没有了。
然后便是遍历每个页面了。
Demo#
learningEnglishFetch.py
评论