说爬虫

前一段时间因为一个机会,写了好长一段时间爬虫,不过没有写什么复杂的爬虫,比如说爬微博之类的,主要还是解析HTML。这里主要对我之前的写的东西总结一下。

爬虫说到底其实非常简单,就做两件事情:第一件事情,下载网页;第二件事情,分析下载的网页。当然,如果有其他要求,做起来还是要稍微注意一下的。

开发语言

我一直以来用的是python,因为写起来简单,配置也简单。然后我就用python写了各种各样的简单的爬虫,比如爬新闻标题,爬图片,爬商品信息等等。但是最近我在爬取一个购物网站的时候出现了问题,爬取1W条数据花了1个多小时,太慢了,特别是最后分析html,虽然Bs挺好用的,但是确实太慢了。所以我把python换成了java。

我发现在下载的时候其实语言差别不大,只要线程足够,是能够把IO跑满的,也就是极限了。这块儿用什么语言无所谓。

但是在下载结束后需要缓存下载的页面和分析数据,就有区别了,因为python的全局锁和性能的问题,会发现要多线程分析数据确实写的很蹩脚,前段时间在源创会的时候一个大牛也说到这个,不建议使用python处理大量的CPU并行的业务,效率太低了。

流程

写爬虫的时候我是用了生产者-消费者模型,首先下载网页,把网页丢到队列里面,在用一个线程专门储存这些网页,这样有专门下载页面的,有专门储存网页的,也有专门分析的,完全可以并行来做,可以把网络、硬盘、CPU一起全部利用起来,效率会更高。

当然这里面还是要考虑代价的问题,因为我爬取得数量没有太多,只是1W条左右,所以我的程序把分析放在了最后,等爬取网页结束了再分析,这样程序简单,思路也简单,出错也少。

问题

一般爬取网页都是直接解析网页,当然很多时候有一些问题需要解决,因为有些网页是用js生成的,一般说来用js生成的很多都可以找到API直接解析服务器返回的数据,效率会提升好多。当然也可以用webkit库来模拟浏览器解释js,这样的话难度就加大好多:

  1. 效率降低了很多,加载html需要时间,解释js运行也需要时间,要慢将近2个数量级
  2. 多线程多进程使用特别麻烦,因为要多开webkit,并行运行,内存控制很容易出现问题。
  3. 需要等待js执行,需要调试各种bug。
  4. 资源利用不能忍受,经常发现跑10个进程CPU和内存就跑慢了,这是不能忍受的。

当然如果时间来得及,是在PC上跑,可以接受,但是放在服务器上,基本可以换方案了。

所以这里推荐在写爬虫之前先抓抓包,看看有没有什么js在和后台通信,也许这个通信的api就是你想要的。

最后

对于爬虫而言,最重要的还是网络环境要好,而且一定要考虑超时的问题,这是爬虫的稳定性所在。当然我也有在想能不能再进一步节省资源,只下载一部分html,这是我下一步可能要做的,如果可以,能够定位,那么性能还会大大提升。

我把我之前的爬虫都放在了Github上了,各位看官有需要的可以自己下载看看。
我的Github

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

推荐阅读更多精彩内容