python 爬虫 入门 commit by commit -- 前言&&准备篇

"每一个commit都是程序员的心酸,哦不,心路历程的最好展示。" -- by 我自己

考虑以这样的方式写一组文章,主要还是在提供入门级别的帮助的同时,还能展示至少作为我迭代的一个小小的心路历程。

我是一个C++程序员,并且挺热爱这门语言的,在我工作的大部分时间里,我都从事着维护并升级老的C++代码的工作,百分之二十的工作是用最新的C++重写以前的程序。毕竟在现在的软件行业,特别是中国的软件行业里,使用C++的真是不多。这门语言过于灵活,开发周期长,入门成本高,实在是不符合国内很多公司的开发模式。这也是我一直觉得在我国特别奇怪的地方,在我接触的国外开发者和开发行业来说,单从语言来说,比例其实挺均匀的。在国内感觉啥事都流行个热度,并且资本真的会导致语言的不均匀,比如我敢打赌,在国内JAVA的使用者绝对多余其他的语言。我并不是想说这样有啥不好,或者感觉自己貌似委屈啥的。只是觉得不管什么时候,百家齐放比一枝独秀总是多那么一点希望和给人以辩证思考的机会吧。

虽然我主要工作语言是C++,并且我觉得我就是用我有限的时间不停的学习,还是很难进入C++牛人的行列。加上我本身还真是一个守旧的人,总感觉老的还掌握的不扎实,迈出新步子容易扯着蛋,迟迟我都真的认真的去学习过另外一门新的语言。但是这两年,我决定认真的学习学习python和go语言。学习python是因为这玩意儿你说你工作中一点也接触不到,那真是工作中的一股清流。go语言,我是看了说这个是c语言的创始人看不惯C++ 11的那一帮人天天吹自己有多牛逼而创建出来的。我独立思考过,你想想一个人想怼败另一个人,肯定是用自己的全部力气,那么搞出来的玩意儿估计靠谱。加上我做过网络编程,对于调试C++多线程问题很多时候都想跪下来把头往地上摩擦只求能够稳定的复现,看到go语言对并发天然支持,怎么能不让人感动?

既然我说了认真学习,那么我一般的办法就是自己弄点啥练练,python这种我经常看,随便一个介绍爬虫的文章都有那么多人看,标题不乏,50行爬知乎全部亮评,30行给你找到网易热点新闻。我这人最讨厌标题党,但是人性的光辉让我忍不住猎奇,经常点进去看看。我寻思着,我得蹭热点,加上这越看越少的行数,我感觉用这个练练也耗不了多少时间。于是我踏上了学习爬虫的道路,学习的过程中,我发现其实很多人挺想入门这个的,但是又不想看完全入门级的文章。我想,我学着也是学着,就写点自己的心得体会和自己遇到的坑,如果能帮助一个人就帮助一个人。

但是,我不是一个完完全全的新手,我做开发也有几年了,所以我写的这一组文章,不可能从python小白或者编程小白的出发点开始写。我又想,我怎么样才能让这组文章看起来有兴趣而且又能投递到我觉得最适合的人群呢?我觉得,简单明了的列表是最行之有效的办法。所以如果你觉得自己满足以下条件,我觉得我的这组文章比较适合你:

  1. 不是完全的编程小白
  2. 用过python,知道基本的语法,知道html是什么,了解简单的http原理
  3. 有一些基本的编程相关的概念只是,比如多线程,多进程,json,当然,不要认为我说的我都会用,我也是唬唬人的
  4. 想看看这货有没有瞎扯的地方
  5. 想联系我探讨问题以及扯淡的

如果你想从这组文章中学到如下知识,那么恭喜你,你可以在最开始就转台了:

  1. 学习Python基本的语法
  2. 学习到数据分析的内容以及爬虫和数据库的结合
  3. 完全商业化的爬虫

另外,我觉得我得提一下的就是,我是个C++程序员,这门语言和Linux经常会发生关系,所以我的所有代码都是在ubuntu上写的并且运行的。这里就涉及到一个问题,可能有的包安装方法略有差异,本着写都写了,还是细致一点的原则,我会尽量写如何安装需要的包的方法,不过如果没有,就当我这人说话喜欢打自己脸好了。

最后,来个总结吧。简单的说,这组文章会介绍一个编程上算老鸟,但是python算新手的人自己摸索爬虫的过程,以及根据自己的工程经验,如何一点一点的强迫自己修改代码的过程。代码你可以在https://github.com/rogerzhu/relwarcDJ 上得到,并且带有我完整的commit记录,为了点题,我会尽量一个commit一个commit的写,那句老话怎么说,记录你的心路历程。

当然,按照我自己的尿性,很多时候看到文章中的github地址,第一件事,就是去clone到本地,然后在某个不小心的瞬间看到他,努力回想当时的自己是如何的心路历程。虽然打心里话,毕竟写了这么多,没给人留点印象肯定是难受的,但是我欢迎各位这样做,当然,你要觉得值得star的话,那我更是无限感谢了。

"工具与环境是阻碍程序员工作的第一块拦路石,所以docker是个伟大的产品!" -- by 我自己

在最开始,我觉得我应该说明我这几个commit最后完成的爬虫是干嘛的。其实很简单,我就是去爬京东图书编程语言这个类目中的一些信息。虽然作为示例,我只是爬取了一些信息,但是如果你看完整个一组文章,你可以很方便的扩展到网页上你能看到的任何信息。

在介绍正式内容之前,我得先说一下我都用了那些包。但是我想着既然是入门级别的文章,越少封装越好,所以整个爬虫程序,我没有用任何框架,比如说比较流行的Scrapy之类的。本质上说,python爬虫的一个主要任务就是解析文件,对,HTML文件,json文件,这玩意儿要不用个库的话,那就真是要造轮子了。所以,我选择了BeautifulSoup这个库,好用还简单。说真的,第一次看到这个库的名字的时候我觉得作者是不是在喝汤的时候忽然想到我TM要写个解析格式化文件的库,不过程序员起名字常常都自带一种神经病的气质,美味的汤,算是贴近生活了吧。

由于我是使用的Linux系统,所以我只要运用pip3来安装这个库就好了。如果你不知道pip3的话,不用感到紧张和不好意思之类的,你就理解他是一个协助你安装python包的一个工具。只要你搜索一下pip3或者pip,很容易就能安装和使用他。这就是我喜欢Linux系统的一个重要原因,安装这种事情特别的省心。整个过程就一句话:

sudo pip3 install beautifulsoup4

在安装完成之后,运行python3进入命令行,输入from bs4 import BeautifulSoup,没有报错的话,那么恭喜你,你已经成功了。

至于windows系统的话,就比较复杂了,我大概搜索了下,比较靠谱的应该是这篇文章。本来我想写在这里的,因为毕竟链接多了也没有人愿意点了,但是windows上安装步骤实在是太复杂了,我还是战胜不了自己放弃了。

说好了使用的库,我想说的另外一个东西和代码本身无关,没有这个玩意儿你也能运行文章里面所有的代码,只要你安装好了BeautifulSoup库,但是,我是十分推荐想在python这方面做开发的初学者都学习一下。说了这么多,其实我想说的是virtualenv,如果你知道这个概念,那么很明显,你已经不是一个只看过python语法的人了。如果不知道,其实也没啥,使用这个好处,就是每个项目你都能有一个独立而又可以复用的环境,比如我传到github上的代码,你会发现在你使用"source bin/activate"之后,你不需要再去安装beautifulsoup包了。而且如果你有另外一个项目,你是想用python2 而不是python3,那么很简单的就可以在环境内切换而不会污染环境。

在Linux上,同样可以使用简单的sudo pip3 install virtualenv完成安装,在完成安装之后,在建立好的项目文件夹中,输入命令virtualenv --no-site-packages xxx,最后是文件夹就是vituralenv里面执行程序的路径。当然,我是比较喜欢把python代码文件放在和virtualenv的bin目录同一级,不过这都是个人喜好问题。

有了这个虚拟文件之后,你就可以在这个环境中随意的安装任何你需要的包而不用担心会影响其他的或者全局的python环境。这玩意儿就和容器技术一样,隔离并且很容易scale。如果你想退出当前环境,只要使用deactivate就可以了。如果你想快速而又比较全面的了解virtualenv的知识,强烈推荐廖雪峰老师的这一篇文章

最后,说一句话,因为我相信还是会有人觉得上面太长,不管怎么样,大部分都是想跑跑看看,虽然我强烈建议你不要。先github上的代码在clone到本地以后,进入到代码所在的文件夹,对于每一个commit,在安装了pip3的情况下(我觉得我还是严谨的)执行以下三个命令就可以运行:

  1. sudo pip3 install virtualenv
  2. source bin/activate
  3. python3 myGAND.py

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SDNLAB

网络功能虚拟化系列:NFV的开源软件包

本文系SDNLAB社区译者计划发布文章,SDNLAB将与国外优质媒体和个人进行长期的内容合作,带来更多的优质技术文章,本文是<<网络功能虚拟化:新兴的虚拟化网...

3468
来自专栏大数据文摘

去IOE的另外一条路径:全内存数据库弯道超车

1918
来自专栏华仔的技术笔记

iOS应用架构谈 view层的组织和调用方案 pragma mark - life cyclepragma mark - life cyclepragma mark - getters and set

3548
来自专栏LET

CPU简介

3019
来自专栏轮子工厂

Linux系统的前世今生

上世纪六十年代,人们还在用批处理计算机,也就是一次性给一批任务到计算机,然后等待结果,中途不能和计算机进行交互,而且准备作业需要耗费大量时间。于是1965年,贝...

1012
来自专栏云端架构

【云端架构】程序员常用四十个小技巧

4、注释贵精不贵多。杜绝大姨妈般的“例注”。漫山遍野的碎碎念注释,实际就是背景噪音。

4479
来自专栏Java学习网

互联网高手教你如何搜集你想要的信息

  写在前面   几个月前,团队邀我做次内部的分享,主题是如何有效搜索信息。这是因为平时工作中,我经常会分享一些专业学习文档,而这些文档的出现往往很及时,回应一...

3678
来自专栏分布式关系数据库探索

分布式关系数据库探索 - NewSQL 演化过程

回味过去,展望未来,开始分布式数据库探索之旅,首先了解历史,本文大致梳理一下数据库发展过程,从1970年到2018年,数据库的发展过程,仅供参考,交流和学习,感...

4411
来自专栏ThoughtWorks

ArchUnit,架构守护神 | 雷达哔哔哔

ArchUnit是一个基于 Java 的测试库,用于检查代码的结构特性,如包和类的依赖关系、注解验证,甚至还能检查代码分层是否一致。我们很喜欢 ArchUnit...

2662
来自专栏架构师之路

框架组件,究竟要不要自研?

一、问题的提出 询问框架组件,是否需要自研? 18年规划系统介绍58到家的技术体系,15年加盟58到家后,架构部正好也是负责范围的一部分,故谈一谈自己的想法,个...

4236

扫码关注云+社区

领取腾讯云代金券