python 爬虫 入门 commit by commit -- commit3

"第一遍是学习,第二遍是看看自己到底有没有认真的学习" -- by 我自己

代码你可以在https://github.com/rogerzhu/relwarcDJ 上得到,并且带有我完整的commit记录。

这个commit我想做的拿到一本书的好评率,听起来又更有意义了一点。在reset到相应的commit之后,使用如下命令:​

在删除第53行再改掉把最后一个pass注释掉,启用最后一个print,啊,原谅我这轻率的commit吧。你应该能看到如下的结果:

那么,如何拿到这个好评率呢?首先好评率并不在这个第一个页面里,他是要点进每一个图书的详情页面里才能看到。并且,准确的说,在一个tab里面,有网购经验的人应该很熟练的就能找到。剩下来,先上三板斧,用选择工具找到元素,构建出需要的元素-标识-名称三元组,传到BeautifulSoup中,执行!很好,又一次被打脸,啥也弄不出来。有了上一次的经验,很明显,这又是一次回调。那么问题就简单了,毕竟已经处理过同样的问题一次了。根据上一节相同的逻辑,找到这个callback接口。同样是有点长,同样,你可以按照上一节的方法,慢慢的试到一个最短的路径,但是,我的懒病又犯了,这一次,我决定就用这么长的接口了!

https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv4374&productId=xxx&score=0&sortType=5&page=0&pageSize=xxx&isShadowSku=0&fold=1"

我在两个地方用了xxx,一个是Id,一个是pageSize。Id好理解,为啥这个pageSize我要重点突出呢?因为如果你手痒打出了这个接口的输出,他大概是长这个样子的:​

这个json字符串返回的信息有点多,不仅仅有我需要的好评率,虽然淹没在茫茫大海之中,还有用户评论!很明显,对于很多爬虫爱好者,这是一个非常有用的信息。而虽然我这个爬虫里并没有对这个有啥有意思的期望,但是我的经验,把任何你可能感兴趣的内容设计成参数,对以后肯定是有好处的。

好评率在这个json字符串中并不好找,但是也不算难找,你应该很敏感的看到有个字段叫goodRateShow,后面有一个数字,再看看页面上的数字,很明显,这个就是好评率。但是这个是嵌套在另外一个json结构之中的,叫productCommentSummray。但是这些,都不是问题,对于python,不过是字典里面包含一个字典而已,请看第54行:​

细心观察的人会发现,这次传入BeautifulSoup构造函数多了一个参数,如果你有手贱的毛病,会忍不住删除这个参数然后试试。当然,如果你有相关的开发经验,会立马知道,一大堆乱码会向你袭来。这里传入的参数是字符编码格式或者说是标准。这里最常听到的应该是utf-8,utf-16,而大多数网页或者从服务器传回的文件都会采用这个编码,所以在处理英语网站的时候,绝大多数时候你可以忽略这个参数。但是毕竟中文是博大精深的语言,所以很多时候会采用gb18030这个标准,这个gb,就是国标的意思。在这里使用采用这个参数你可以说是我猜测的,或者是我的经验所致。一点也不科学,一点也工程。有没有办法获取到这个确定的编码呢?当然有!

python中有个包,叫做chardet,而想拿到这个编码只需要把你的request的返回值下面的一个参数body传入chardet.detect(html.body)可以输出结果。而这个结果也是一个字典,其中的encoding后面的就是网页的编码。

剩下的一个能扯淡的地方就是try except了,只要有任何语言的编程经验的人对异常处理都不可能完全没听过的。如果你真的没有使用过,那么只有一个可能,你可能没有写过面对用户的真正产品级代码。毕竟,用户大大们在遇到任何问题时是不会有耐心听你解释任何逻辑的。而再次,如果你去掉这个异常处理模块,你会发现,大概率你的爬虫在运行随机时间后,程序就伴着trace back的错误信息就退出了。而爬虫程序绝大概率需要长时间运行,而因为数据巨大,偶尔一两个的数据对于最后的数据分析并没有任何影响。所以,如何在爬虫程序中handle异常是一种哲学,我的哲学就是吞掉这些异常,给出一个默认值,记下log。至于这个commit中为啥没有按照我说的逻辑做,因为我为了能够丰富一下这组文章,我在后面的commit中会涉及。

而就目前来说,说白了,我这个爬虫还只能爬取第一页的信息,总不能永远只看第一页啊,翻页的功能就是为了人类探索更多世界而说明的,而下一个commit,我想做的就是实现理论上的想看多少页就看多少页。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云加头条

智能云上手指南:语音合成 API 快速接入

本文将为大家讲解如何上手智能云提供的智能语音识别服务。

9162
来自专栏python3

python介绍

python是一门优秀的综合语言,python的宗旨是简明,优雅,强大,在人工智能,云计算,金融分析,大数据开发,web开发,自动化运维,测试等方向应用广泛,已...

1981
来自专栏专知

【干货】如何写代码 -编程内功心法

写代码就是学一门语言然后开始撸代码吗?看完了我的《GoF设计模式》系列文章的同学或者本身已经就是老鸟的同学显然不会这么认为。 编程是一项非常严谨的工作!虽然我们...

3418
来自专栏精讲JAVA

Gof设计模式之单例模式(一)

今天开始更新设计模式系列,题目中Gof指的是《Design Patterns: Elements of Reusable Object-Orie...

2145
来自专栏编程

如何提高Python运行效率 超实用的四种提速方法

Python增长势头一直非常迅猛,它虽然是脚本语言,但容易学,同时,还有非常多优秀的深度学习库可用,也有越来越多的人将Python学习列入计划。Python是一...

2427
来自专栏take time, save time

python 爬虫 入门 commit by commit -- commit5

代码你可以在https://github.com/rogerzhu/relwarcDJ 上得到,并且带有我完整的commit记录。

550
来自专栏Java学习网

书写高质量代码之状态维护

状态之始 我们第一眼接触新事物所触发的思考方式,决定了以后我们看待这样事物的角度,进而影响更深层次的理解和行为。 编程相对于人类历史的进程而言,不过是个六七岁孩...

2864
来自专栏我就是马云飞

设计模式二十四章经之六大设计原则

1392
来自专栏互联网杂技

如何去了解JavaScript引擎的工作原理

1. 什么是JavaScript解析引擎? 简单地说,JavaScript解析引擎就是能够“读懂”JavaScript代码,并准确地给出代码运行结果的一段程序。...

3797
来自专栏编程

使用JavaScript开发一个自修改代码

话说在25年前,我刚刚开始从事软件开发。在工作中,我遇到一个叫Dave的朋友,他曾在一家大型保险公司工作过几年,他的工作重点是开发支持一个名为“个人人寿保险”的...

2797

扫码关注云+社区