Python3作采集

出于某些目的,须要在网上爬一些数据。考虑到Python有各类各样的库,之前想试试Pycharm这个IDE,就决定用它了。首先翻完《深刻Python3》这本书,了解了它的语法之类的。下面就如下载http://www.meinv68.com/为例子开始干活了:html

  1. Http协议的实现。那本书里有介绍一个叫httplib2的库,看起来挺好。就用这个库把网页内容抓下来先。
  2. Html解析。以前有用过一些解析xml的库,可是想着html代码可能不会太严禁,就找到了一个传说中对html容错度很高的库:BeautifulSoup。Python3得用这个库的第四版,导入时也是要导「bs4」库。解析挺简单,我用的基本仍是xml那一套。
  3. 数据保存。呃,没啥说的,就是用内建方法open()打开一个文件,会返回一个文件对象,而后调用它的各类方法就能够了。

采集的有点慢。须要采集的数据有三十多万条。可是一个页面只有十条数据,并且每三四秒左右才能从服务器抓到一个页面。刚开始想着用多线程之类的加速,但想着抓一次就行了,并且有人鄙视说,抓太快对服务器负担太大,就让它跑了个通宵。只抓了十万条数据,并且还有漏的。正则表达式

 

而后就找到另一个网站,继续抓。这个时候蛋疼了,那网页里的内容大部分都是js之类生成的。第一反应就是看看有没人用Python实现一个js的解释器。结果发现这个工具量太大,不少库都必须依靠浏览器来解析,过重量级。先放一放,就先看看这个js里有些啥,会不会直接有须要的数据。浏览器

之前没有网页开发的经验,只是问过同窗什么js,asp语言是干吗用的。可是Firefox好久以前就装了FireBug这个插件,就拿出来随便点点。很容易看到了加载的js,可是看了半天没发现有想要的东西。而后继续随便点点,发现加载的不仅一个脚本,最后在控制台里,发现Get了一个aspx文件,里面就有想要的数据。服务器

 

 

下面继续是Python的事了:多线程

  1. 瞄了下那个url里,有关于日期的参数。首先很纯洁的想到我须要一个能处理日期的类。嗯,我也找到了,datetime。这货能很方便的处理关于 「时间」的功能,好比一个时间的前一天,前一秒是何时,计算两个时间相差多少等等,而彻底不用考虑相似润年哇,加了几小时后就成了另一天之类的问题。也能很方便的把日期用字符串按指定的格式打印出来。
  2. 抓到这里面的文件后,须要进行分析。就简单的用正则表达式了。用到的库是re。呃,用法也很简单,能够先用编译一个正则表达式,而后能够查看一个字符串能不能被这个正则表达式匹配,返回匹配部分等等。

由于这个脚本很小,比起抓整个网页来讲,效率好太多了,一秒钟左右抓一个页面,并且一个页面大概有170条数据。跑了二十分钟左右就抓完了。函数

 

后:工具

之前用C++这样的静态类型语言,一个表达式的值,一个函数的返回值只能是一种类型。可是Python则不一样,好比open()会根据你打开模式返回不一样的类型的对象。虽说C++的parser作起来很难,可是只要作出来,就能很容器肯定一个变量的类型(模板中的除外,因此C++11放弃Concept的时候仍是略让人蛋疼的),而后IDE就能进行很好的自动补全建议。可是动态类型语言这方面则略为蛋疼了,对IDE要求高了一点。好处则是很方便灵活,写函数里也不怎么纠结参数的实际类型,全特么是模板参数……好在PyCharm能根据一个函数的docstring判断参数的类型。网站

还有就是Python里对机器的控制弱了点。由于数据量有点大,因此不得不关心了下list的实现。它相似C++ stl里的vector,可是又没有提供设置容量的方法。如今就用collection.deque将就了一下。url

相关文章
相关标签/搜索