首页
学习
活动
专区
工具
TVP
发布

新人必看!手把手教你用Python爬取湾区日报

对于程序员来讲,英文的重要性已不需要多言...

大多数优秀一手的编程资源,都是英文编写。

这篇教程爬取了「湾区日报」的英文文章,教程涉及到的代码都在链接:

https://github.com/junbin123/wanqu

在开始动工之前,先简单介绍一下什么是「湾区日报」?

湾区日报」是一位在硅谷工作的工程师运营的一个博客网站。

他每天大量阅读,从中筛选出 5 篇优秀的文章,发表到网站上。

文章虽然是英文的,但好在作者是双语阅读者,每篇文章都有对应的中文简评以及阅读时长

对于有心想学好英语的工程师,可以说是一举两得的学习资料了。

今天的任务就是扒下小于 5 分钟的文章,训练自己的英文阅读能力。

我们一共采取了下面几个步骤,来爬取网页内容:

连接获取网页内容

使用 BeautifulSoup 获取 html 内容

在 soup 对象里的循环搜索 HTML 元素

进行简单的数据清理

把数据写入 csv 文件中

准备开始

每次想用 Python 搞点事情,你的第一个问题应该是「我需要用到什么库」?

网页爬取方面,Python 从来不会让我们失望的,有好些库可以使用:

Beautiful Soup

Requests

Scrapy

......

这里我们就用强大的解析工具Beautiful Soup,它借助的是网页的结构和属性等特性。

开始前分析

首先打开湾区日报(https://wanqu.co/issues/1280/),明确我们要抓取文章的内容:标题、链接、阅读时长、简评

然后,打开「开发者工具」,分析代码结构:

从图中可以看到,每一期 5 篇文章被包含在标签中,每一篇文章都是一个标签。

也就是说,我们不需要太复杂的代码,只需要一个循环,就能读取到每一期 5 篇文章。

然后更改链接,重复上面的步骤,爬取每一期的文章。

另外,通过更换不同链接,我们看到,链接的后缀,就是期数,这简直不要太贴心了!

开始写代码

使用 BeautifulSoup 处理 html 内容

熟悉了网页结构,我们终于要拿起代码开工了。

首先导入各种模块。

除了上面提到BeautifulSoup可以帮助我们处理 HTML 结构。

还需导入requests模块,它负责连接到地址,并获取网页内容;以及csv库,把数据写入 csv 文件中。

下一步,使用requests得到网页的Response对象,然后用BeautifulSoup来解析Response的内容,把处理结果存在soup变量中。

尝试输出soup看看!

查找 HTML 元素

既然文章被包含在标签里,我们可以在soup对象里搜索到它,再用find_all方法,遍历前 5 个标签。

同样,尝试输出看看!

简单数据清洗

接着,我们可以先声明一个空列表,把表头数据作为第一个元素。

之后的添加数据,只需调用方法。

下一步,我们遍历 5 篇文章,提取关键信息,并保存在列表中。

其中,期数直接赋值;阅读时长需要用到正则表达式,所以需要在最开始导入模块:

上面代码,我们遍历了每篇文章,并获取标题、链接、阅读时长、简评

分析代码发现,标题被包含在节点,且节点在只出现一次,于是利用属性,获取节点元素包含的文本内容。

继续获取链接,它存在标签的属性中,但每个标签中不只有一个,所以我们还需要更多信息。非常幸运,我们看到这个,多了一个属性:,绝佳的定位信息!!

阅读时长的稍微麻烦,需要先得到字符串time_read_temp:,再使用正则表达式匹配出。

ps.需要注意的是,我在爬取文章的是时候,发现有一篇文章没有阅读时长,这会导致正则表达式匹配失败:

不过,不用当心,只需增加语句,捕获这个异常,跳过这个赋值。这部分代码可以到我的 GitHub 项目里下载:https://github.com/junbin123/wanqu

完成上面循环体,我们再打印一下articles的内容,这样可以在数据写入前,检查一下。

如果你也得到图片一样干净的数据,可以开始下一步了。

写入 CSV 文件

最后,我们把上面获取的数据,写入保存到 csv 文件中。

现在,你可以运行一下这个代码,不出意外,你会发现一个 csv 文件出现在目录中,打开后,应该下图:

基本流程跑通了,现在我们来解决另外 2 个问题?

如何筛选出阅读时长 1-5 分钟的文章?

如何爬取更多文章?

第一个问题比较简单,只需原来代码加上筛选语句就行了。

第二个问题解决思路是循环上面的步骤。

我把重构后的代码放在 GitHub 里,欢迎下载:https://github.com/junbin123/wanqu

最后

如果有什么没说清楚的,欢迎大家在下面留言,我会尽可能给大家解答的!

祝你的爬虫之旅有一个美好的开始!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181107G1LPV500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券