首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数据哪里来?自己爬!Python+MongoDB爬虫基础入门

笔名:戏说猫狗

全文共3290字,阅读需要20分钟

——引入及废话感言——

与上次撰文已隔许久,只能说2017是多事之秋,繁忙到病痛没有间断过,与其说收获不如说对人生有了更多感悟……感谢一直对GoBid交流支持不放弃的各位,无论结局如何努力过,奋斗过。

新年伊始,新的征途还要继续......

之前撰文都是灌输理论和思想,身为技术小白写一篇技术文压力山大……主要因为翻遍网络上没有一篇完整的傻瓜式入门爬虫教学,大神们都是在研究更高深的爬虫技巧。我也是最近从Python和MongoDB入手钻研,所以把心路历程分享出来和大家交流,来普度众生,哈哈哈……大神看到这里可以退了……下面转入正题

——BEGIN——

一句话描述Python、MongoDB

其实对于大神来说任何编程语言都可以写爬虫,但是学习成本会相对高一些,有些编程的理念自学理解起来会困难些。所以对于没有编程基础的新手来说python交互式的编程方式简单易上手好理解。

爬虫做的就是爬取数据,当然如果只是少量的简单数据完全可以爬下来直接保存成文件即可。不过如果数据量大,并且对爬取的数据进行后期处理的话还是选一个数据库会方便一些。

MongoDB是个开源的NoSql数据库(你看,一句话就俩知识点:开源:免费!;NoSql:非关系型),也就是所说的非关系型数据库,大数据的挖掘一般是指的从非关系及没有联系的数据中寻找规律。简单来说非关系型数据库就不像MySQL、Sqlserver这些关系型数据库中表与表的数据之间有关联关系。如下图1.1所示,我在MongoDB插入两条不同的数据,你可以先简单理解为我在一个表(文档)中插入两条数据,但是这两条数据的字段名却是不同的,而关系型数据库是不会这样存储的。

图1.1

NoSql数据库是未来的趋势,也是大量无规则数据的分析基础。并且MongoDB也支持分布式的集群配置,构建数据仓库等。

所以Python+MongoDB算是比较简单容易上手的。

Python、MongoDB环境配置

工欲善其事,必先利其器。其实阻碍前行的最大因素应该是软件安装和环境配置,不过现在安装都做得傻瓜化,相对轻松了很多。

给大家准备好的python 3.6.3版本(python不同版本的还是有点差别的,所以这里以64位的3.6.3版本为例)和需要的requests、lxml、pymongo和scapy的模块包,因为scapy包是涉及网络抓包,需要了解像报文等网络传输知识,等到进阶再讲。

链接: https://pan.baidu.com/s/1qYBR5bY 密码: cmx4

文件顺序依次为:scapy-python3、pymongo、requests、lxml、python3.6.3 amd64位

MongoDB安装文件大家可以自行去官网下载https://www.mongodb.com/download-center?jmp=nav#community。

打开python安装包,如下图2.1这里要强调的是“Add Python 3.6 to PATH”,3.6版本很人性化的加上自动加入PATH环境,如果不勾选需要自己配置系统PATH变量。

图2.1.1

然后一直下一步直到安装成功就可以了。

下面来安装一下python的包,因为python3以上自带了pip模块包管理,所以安装包方便了很多。

首先进到python目录里的Scripts文件夹,如C:\python36\Scripts;把上面下载的python包放到这个目录下。按住Shift键点击鼠标右键会出现”打开命令行窗口“

图2.1.2

在命令行里输入”pip install“,如下图要安装requests包需要把全部文件名输入,之后回车即可。其他的包安装方法相同。

图2.1.3

当包都安装完了可以输入”pip list“命令看一下现在python里含有的包。(如下图2.1.4)

图2.1.4

也可以到python自带的IDLE里验证一下,如下图2.1.5未报错那么是正常的,如果没有这个模块会像最后一条那样报错。

(Ps:顺带说一下python的一个知识点,看到下面”from lxml import etree“,正常”import 模块名“是引入模块里的所有函数,如果只用到一个像etree,那么就可以这么写。)

图2.1.5

OK~到此python的安装及配置就大功告成了,下面来说一下MongoDB。

MongoDB的安装不细说了,也是安装包直接一步步往下直到安装成功就可以了。

Ps:不过这里强调一下,Python和MongoDB最好安装路径在C盘的根目录下C:\,否则在环境配置的时候会容易出现些奇怪的错误。

我们来配置一下MongoDB的环境,首先MongoDB要将数据目录存储在 db 目录下。但是这个数据目录不会主动创建,我们在安装完成后需要手动创建它。数据目录需要放在根目录下((如: C:\ 或者 D:\ 等 )。可以通过命令行创建,也可以直接通过 window 的资源管理器中创建这些目录。在data文件夹中创建db和log文件夹。(如下图2.1.6)

图2.1.6

然后再到MongoDB的bin目录下运行命令窗,输入“mongod --dbpath d:\data\db”将存储文件指向你创建的...\data\db目录。(如下图2.1.7)

图2.1.7

存储路径指向好后,我们来创建MongoDB的配置文件。

创建一个配置文件,该文件必须设置 systemLog.path 参数,包括一些附加的配置选项更好。

例如,创建一个配置文件位于 C:\mongodb\mongod.cfg,其中指定 systemLog.path 和 storage.dbPath。具体配置内容如下:

systemLog:

destination: file

path: d:\data\log\mongod.log

storage:

dbPath: d:\data\db

图2.1.8

通过执行mongod.exe,使用--install选项来安装服务,使用--config选项来指定之前创建的配置文件。在bin文件夹目录打开命令行输入:

"C:\MongoDB\Server\3.6\bin\mongod.exe" --config "C:\mongodb\mongod.cfg" --install

(配置完后最好重启一遍系统,或者在“服务”中手动打开MongoDB的服务)

配置完成后以管理员的身份打开命令行(CMD)先切换到bin目录下然后输入mongo开启连接。(如图2.1.9)

图2.1.9

连接成功后可以简单的执行几条命令测试下:(如图2.1.10)

图2.1.10

几条简单的命令

“show dbs”--查看所有的数据库

“use demo”--进入demo数据库,如没有则创建

OK~到现在为止python和MongoDB的环境配置基本完成了,下面来说一说怎么应用python来爬取网页数据并存储到MongoDB。

Python爬取网页数据

如果大家对网页结构不是很了解可以先去看一下像html、css、xml等知识,了解一些网页编写基础。如果自身会编写网站,那接下来理解就轻松加愉快了。

首先让我们打开python自身提供的IDLE来一步一步走向人生巅峰,先来加载上需要的requests、lxml、pymongo的模块包。(如图3.1.1)

图3.1.1

因为我们目前只用到lxml包里的etree解析xml和html,因此可以只引用etree。

我们以爬取“http://prcircle.club/”这个网址为例。(这是一个我正在建设还未启用的博客,所以放心试爬,没有反爬技术,哈哈)

我们先来看一下这个网页的源代码,第一步就是把这些源代码爬取下来。(图3.1.2)

图3.1.2

我把一步步过程放到shell里解释一下,如下图3.1.3,requests模块里的get()可以请求网页将元素返回,如图3.1.3(2)“”,此时python返回了一个结果回馈。但是看不到具体内容呀?我们将其文本化储存到html。文本化后不要直接在命令行键入html打印出里面的元素,因为如果文本过大将会导致程序崩溃。我们可以先将其存储为文件查看一下。如图3.1.3(3)/(4)

图3.1.3

图3.1.3(2)

图3.1.3(3)

图3.1.3(4)

默认路径会存放在python的根目录下,打开html.txt文件我们与之前直接从查看的网页源文件对比一下,是一样的。是不是有点小兴奋?(如图3.1.4)

图3.1.4

兴奋之余我们再往下进行,这一大篇幅的源文件看的头昏眼花,感觉无从下手,不要紧下面强大的lxml的etree模块解析就要派上用场了。假如我们就只需要获取网页的标题“PR圈 这是个小众却有深度的人际圈”我们来看一下如何操作。

如图3.1.5,通过对源文件进行html格式化后用xpath函数解析,就可以提取出目录下的内容,可以看到data2中包含一个title元素。注意如下直接打印"print(data2.text)"是会报错的,因为此时元素在字典中需要循环提取。最终打印出了“PR圈 这是个小众却有深度的人际圈”这个网页标题。

(Ps:需要提一下的是xpath是个非常强大的函数,需要运用到xml的编程规则,具体可以简单学习一下xml的树结构和查询规则,这样可以更好的运用xpath函数)

图3.1.5

图3.1.5(2)

我们在上面既然提到了MongoDB,就需要把爬到并解析出来的数据存入数据库,否则往后的数据处理分析就难以进行了。

如下图3.1.6,我们首先通过pymongo模块连接MongoDB,然后插入数据。可能有的童鞋会问为什么有一段for循环“for d in data2”,这是python遍历获取字典元素的方式,可以查看一下python的字典原理。

图3.1.6

图3.1.6(2)

我们看一下插入的数据,如下图3.1.7,我们爬取的数据已经成功的存入MongoDB,第一阶段算是大功告成!

图3.1.7 python查询

图3.1.7(2) MongoDB查询

通过上面把Python+MongoDB简单的爬取过程给大家演示了一遍,有助于大家入门并且对爬虫概念的引入,知道工作流程如何,这样可以算是对爬虫有个简单的理解。其实爬虫就是在模仿用户访问的过程,只是把人访问换成了机器自动访问。说到了爬虫模仿用户行为去访问这也引出了下一阶段我要讲解的内容,如何去把爬虫伪装成一个真正的用户使用浏览器访问页面的过程,并且对于简单的有反扒机制和登陆限制的网页如何通过登陆或引入外部cookie的方式绕过登陆和反扒来进行数据爬取。

既然是基础入门其实整个过程中提到的包括MongoDB也好,python也好,python的各个模块包也好,还是需要大家自己耐下心来抽时间自己钻研,把基础常识熟练掌握后就会更容易理解和往下进行。

人生第一次写技术文章,有不好和不对的地方还请大家轻拍,欢迎大家找我交流,如果有大神愿意指引我,我更是荣幸至极。如果你觉得这真的是傻瓜式入门教学,对你有帮助,那么敬请期待我的下一篇大作吧!

(Ps:没想到图那么多,传图真的是累死我了。。。)

--------------------------------------

如果你看了此文觉得内容较浅,那么太棒了,我找到了一位导师,希望能教授我一些思路!

如果你看了此文觉得深有感触或异议,那么欢迎我们随时一起交流探讨!

如果你看了此文觉得有所受益,那么希望我们能一起进步!

虽然说我资历不久(93年呱呱坠地),但探索互联网的时间从12岁用ASP编写了一个论坛并管理着全国各地36个版主开始就一直在摸索、折腾并在跌打滚爬中求知,我想证明90后并不是人们想象中的肤浅。

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券