学习编程过程中学会的道理

1.机器不会错,如果错了,一定是人的问题

2.思维定势,让人对错误视若无睹,比如:

1.page = request.GET.get('page',1)
写成get, Get,尤其是Get ,还完全意识不到自己的错误。
2.在使用爬虫时, 把 soup = Beautiful( *.text, 'lxml') 写成 *.txt,意识不到自己的错误。
把 web_data, 写成 wb_data, 意识不到自己的错误。

眼睁睁的看着实例都能写错,可见思维定势的强大。
那日常生活中,工作中,学习中,有多少是因为思维定势,而让你错失了了解真相的机会呢?

下图是一个很明显的例子。


少女或老妇?

为什么会这样?
在心理学上,定势又称心向,是指主体对一定活动的预先的特殊准备状态。具体地说,人们当前的活动常受前面从事的活动的影响,倾向于带有前面活动的特点。当这种影响发生在知觉过程中时,产生的就是知觉定势。

因此,你对现有事物的认知和反应,依据于你过往对类似事务的认知和经验。
当你去认知新事物的时候,是无法知道自己错在哪里了的。正如你不能提着自己的衣领把自己举起来。

怎么破?
结识和你有不同背景,具有高度自知之明的人,通过和他们的互相探讨,来逐步拼凑出事情更完整的面貌。

3-对于高门槛的新技能,付钱学习是最便宜高效的入门方法

Python 其实我15年初九嚷嚷在学,学到年底,也不过可以编一些计算类的(比如汉诺塔什么的)小程序自娱自乐。
11月份报了实战计划的爬虫入门班,包括过年,产品更新迭代上新版等等,到目前4个多月时间,我已经能够用Django搭建自己的简单网站,展示自己爬取的简单数据(搜狗数据还是不行,js控制的数据有部分不行),并从中受益。

如果早知道,我会早去花钱学习。而不是自己茫然地在网上导出寻找免费资料,浪费了近1年的时间。

为什么呢?
在入门的时候,我们其实还没有掌握寻找问题的方法,更不用说怎么去解决。而高门槛的新技能一般有复杂的初始要求,比如说配置电脑环境:python3.X升级, pip的安装,pycharm的安装,mongdo的安装,这些问题,随便一个都能让尚未入门的小白折腾一天,然后发现自己连生产工作都搞不定,更不要说学习生产了,只好绝望放弃。

所谓师傅领入门,是让你在碰到这些问题的时候,指导你该如何去寻找解决的办法。
然后,才有可能自学。

  1. 刚需,是战胜任何困难的第一推动力

学习爬虫有个很关键的目标,是想做一个自己的信息搜集器。
把和客栈相关的所有信息,能够搜集到一个地方,自己每天可以阅读。
这是我作为产品的刚需:了解市场,了解竞品。

因此每次遇到困难的时候,也只能咬咬牙,然后到处查资料问人,知道最后完成。
如果只是玩玩而已的话,早放弃了。

  1. 先整理思路框架,再开干

写程序的时候,先想清楚要干什么,比马上开始干重要。

比如我写36氪的爬虫的时候,第一次只想爬文章标题,链接。
爬完之后发现不够,于是改数据库,加上了品类;之后发现需要时间否则排序有问题,又改数据库,加上了时间。而在写知乎的时候,吸取之前的经验,一开始把所有需要的内容都整理列出来,然后再写,效率明显提高。

写完36氪一个品类的爬虫之后,写第二个品类的爬虫写到一半才意识到自己可以把品类作为参数每次输入,爬虫本身是一样的。
于是标准化了爬虫,增加了参数输入。

当然,这些问题其实都很菜鸟,通过这些菜鸟的步骤,我们才能慢慢学习成长。

  1. 集中地长时间的反复练习,才有可能前进

年后因为要准备3.0新版的事情,忙到经常一周才学习一次,每次有60%的时间都在回顾之前学到哪里了,怎么做的。40%的时间来往前走一小步。对于学习而言,是效率很低的方式。

315这周,3.0上线了,于是恢复了早上学习1个小时,周末花半天学习的习惯。速度明显加快,第一版半成品的客栈舆情网也做出来了。

一般的编程(不涉及到高级的算法什么的),其实是门手艺活,熟能生巧。因此,手熟很重要。

  1. 照抄课程的代码,运行出错:

pymongo.errors.OperationFailure: command SON([('aggregate', 'item_info1'), ('pipeline', [{'$match': {'$and': [{'pub_date': {'$lte': '2015.12.27', '$gte': '2015.12.25'}}, {'area': {'$all': ['朝阳']}}]}}, {'$group': {'_id': {'$slice': ['$cates', 2, 1]}, 'counts': {'$sum': 1}}}, {'$limit': 3}]), ('cursor', {})]) on namespace ganji.$cmd failed: First argument to $slice must be an Array, but is of type: String

原因是 'cates' 数据我之前已经整理过,不需要用$slice再整理一次。
查看了mongodb的文档发现没有slice这个方法,然后才意识到这是python自己的方法,用来做字符串操作的。核对了教程视频发现果然是这样。

看文档的确很重要。

  1. 在 views层运行数据出错:

bson.errors.InvalidDocument: Cannot encode object: <built-in function all>

原因:

{'$match':{'$and':[{'pub_data':{'$gte':date1,'$lte':date2}},{'area':{'$all':area}}]}},

其中把 该传入 area参数的部分,写成了all.

解释:BSON (Binary JSON)

BSON()是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。
BSON可以做为网络数据交换的一种存储形式,这个有点类似于Google的Protocol Buffer,但是BSON是一种schema-less的存储形式,它的优点是灵活性高,但它的缺点是空间利用率不是很理想,
BSON有三个特点:轻量性、可遍历性、高效性
{"hello":"world"} 这是一个BSON的例子,其中"hello"是key name,它一般是cstring类型,字节表示是cstring::= (byte) "/x00" ,其中表示零个或多个byte字节,/x00表示结束符;后面的"world"是value值,它的类型一般是string,double,array,binarydata等类型。

MongoDB使用了BSON这种结构来存储数据和网络数据交换。把这种格式转化成一文档这个概念(Document),因为BSON是schema-free的,所以在MongoDB中所对应的文档也有这个特征,这里的一个Document也可以理解成关系数据库中的一条记录(Record),只是这里的Document的变化更丰富一些,如Document可以嵌套。
MongoDB以BSON做为其存储结构的一种重要原因是其可遍历性。

5.在pycharm 里面选择了运行 test.py, 但实际运行的是models.py, 这是怎么回事呢

因为test.py 需要引入models.py,在引用的同时启动models.py的运行。

  1. 在mongoengine下,针对class进行查询操作。

http://mongoengine-odm.readthedocs.org/guide/querying.html

文档首先说明了,db.objects是一个可循环的查询类数据类型,通过objects(查询条件)生成的也是同类型,需要用 item.key 来调用其中每个数据。

  1. 以下代码,传入参数时无法识别,直接写入参数时可以运行。
#传入参数data1,data2,area,limit , 无法运行
pipeline1 = [
     {'$match':{'$and':[{'pub_data':{'$gte':date1,'$lte':date2}},{'area':{'$all':area}}]}},
    {'$group':{'_id':'$cates','counts':{'$sum':2}}},
    {'$limit':limit},
    {'$sort':{'counts':-1}}
 ]
print('pipeline1')

#直接设置参数data1,data2,area,limit , 可以运行
pipeline1 = [    
    {'$match':{'$and':[{'pub_date':{'$gte':'2015.12.25','$lte':'2015.12.27'}},
{'area':{'$all':['朝阳']}}]}},    
{'$group':{'_id':'$cates','counts':{'$sum':1}}},    
{'$limit':3},     
{'$sort':{'counts':-1}}

解决办法:直接替换

8.替换完highchairs视图函数后,网页运行不出来,显示如下:

Uncaught ReferenceError: 
jQuery is not defined(anonymous function) @ semantic.js:497
semantic.css:11 Uncaught SyntaxError: Unexpected token ILLEGAL

什么都没展示:要在series 数据源后面加'|safe'
除了数据本身,什么都展示了,那就是数据格式问题。这次我忘了加'[]'.
highchairs 的数据要求加'[]'来区分。

9.在 pycharm 中,利用 pymongo 建立mongod数据库未成功。整理发现原因如下:

为了断点续爬的功能,设计了一个 判断语句判断数据库中是否已存在此条数据,但是语句语法写错:

错误的语法:

If collection.find({key:value}):
    pass
else:
    collection.insert_one{data}

正确的语法:

If collection.find({key:value}).count():
    pass
else:
    collection.insert_one{data}

原因:
MongoDB与python 不一样,.find()方法会返回一个类型,这个类型总是存在的,因此判断总是为真,数据从未被插入数据库,因此数据库从未被真实建立起来。

改为 collection.find().count(), 如果数据存在则计数大于1,数据不存在则计数为0,条件能够顺利进入“不存在”的判断,然后插入数据,因此才能创建 数据库。

MongoDB 建立数据库:
直接用 'use.DB'
此时数据库并未真正被建立起来,需要插入数据才被建立。

> db.users.save( {username:"mkyong"} )
> db.users.find()
{ "_id" : ObjectId("4dbac7bfea37068bd0987573"), "username" : "mkyong" }
  1. 在一个普通pycharm project里面做完了MTV,发现怎么都无法展现在网站上,检查文件的时候发现缺少settings, urls等关键配置文件。-一开始建立这个项目的时候就不是按照Django项目来建立的。我也是醉了。。。

  2. 在mongoengine环境下取得当前时间:

import datetime
class a(document):
date_time = DateTimeField(default=datetime.datetime.now)

  1. 对mongoengine 对象排序:

参考文章:http://www.jb51.net/article/64861.htm

实际操作:
date_time 是我的时间数据。

zhihu1 = wb_data_zhihu.objects.order_by('-date_time') #按照时间倒序来存储

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,386评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,142评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,704评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,702评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,716评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,573评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,314评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,230评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,680评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,873评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,991评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,706评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,329评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,910评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,038评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,158评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,941评论 2 355

推荐阅读更多精彩内容