说爬虫

作者: 小武子 | 来源:发表于2015-04-26 14:47 被阅读335次

前一段时间因为一个机会,写了好长一段时间爬虫,不过没有写什么复杂的爬虫,比如说爬微博之类的,主要还是解析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

相关文章

  • 说爬虫

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

  • BeautifulSoup requests 爬虫初体验

    BeautifulSoup requests 爬虫初体验 说爬虫不得不提python 常用的Python爬虫库(摘...

  • 一个简单的网络爬虫

    什么是网络爬虫 简单的说,网络爬虫就是一种自动抓去互联网上资源的程序。 简单的网络爬虫 简单的网络爬虫原理就是使用...

  • Python爬虫笔记一 ——爬取网页题目

    爬虫是Python十分广泛的应用,有人说不会爬虫,就像没有学过Python。这个系列的文章就是爬虫入门笔记,面向的...

  • 源码时代教教你:Java爬虫(1)-Jsoup的入门

    1. 网络爬虫概述 1.1. 什么是爬虫 简单的说,网络爬虫就是使用程序模拟人浏览网页的行为,并把看到的数据采集并...

  • 11.20-11.26

    本周目标 爬虫 爬虫 爬虫 爬虫

  • 小白学爬虫:网易云音乐歌单(一)

    从零开始写爬虫,初学者的速成指南! 介绍 什么是爬虫? 先看看百度百科的定义: 简单的说网络爬虫(Web craw...

  • 爬虫入门基础

    Day01 一、爬虫介绍 什么是爬虫 Python爬虫的优势 Python爬虫需要掌握什么 爬虫与反爬虫与反反爬虫...

  • 01-认识爬虫

    一、爬虫介绍 什么是爬虫 Python爬虫的优势 Python爬虫需要掌握什么 爬虫与反爬虫与反反爬虫三角之争 网...

  • 爬虫玩得好,监狱进得早

    爬虫玩得好,监狱进得早。数据玩得溜,牢饭吃个够。 这里说的爬虫是指网络爬虫,也叫网络蜘蛛。我平常用的谷歌搜索和百度...

网友评论

  • 2c6d0621118b:PO主 已经找不到你的 GITHUB地址了 求分享
    2c6d0621118b:@小武子 谢谢你啦
    小武子:@Nova热疼疼 我这篇博文都是很久之前的了,仅供参考哈
    小武子:@Nova热疼疼 https://github.com/XianwuLin

本文标题:说爬虫

本文链接:https://www.haomeiwen.com/subject/vtemfttx.html