分类: Python/Ruby

    数据抓取是一门艺术,和其他软件不同,世界上不存在完美的、一致的、通用的抓取工具。为了不同的目的,需要定制不同的代码。不过,我们不必Start from Scratch,已经有许多的基本工具、基本方法和基础框架可供使用。不同的工具、不同的方法、不同的框架的特点也不同。了解这些工具、方法和框架是首要任务,接下来就需要明白它们的差异都在哪里、什么情境该用什么东东,最后才是析出规则、编写代码、运行程序来抓取数据。所以说,其实数据抓取的学习路线,不但很长而且很杂。

为了一个特定的目的,我需要爬取Google的搜索数,和其他情况不同:人家是特定关键词,一页一页地爬结果;我的是N多关键词,一次一个地搜索,只需要返回的搜索条数。事实上,一共有153个关键词,但每个关键词都需要和所有关键词握手组配成一对待检词组。于是,大家可以试想一下,一个153行、153列的大表格,每一个空白都等着填,这就将是153*153=23409次,也就是约23409/2=11704次,经测试每爬取一个共词页面的结果并存入Excel,需要花费4秒的时间。这意味着,以单人单线程的方式需要11704*4/3600=13个小时,才能跑完。

这些内容我还会在后续博文中详述,现在先介绍上述目的情境下我使用的技术框架及其安装配置过程。

一、技术架构
    [Python2.7 + Pip + Selenium + Phantomjs]
    Selenium+Phantomjs,最初这对兄弟不是一家的,后来发现二者志趣相投、互有好感,于是结拜为兄弟,住进了Selenium家里。(这种说法有待商榷)
    看看介绍:
    Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla Firefox、Chrome等。
    Phantom JS是一个服务器端的 JavaScript API 的 WebKit。其支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas, 和 SVG。

二、环境搭建
   (1)安装Python从略,我用的版本是2.7.4(WinXP和Win7的32位平台)。
   (2)由于发现Pip比easy_install优秀,我便使用我已经安装的easy_install来安装pip。

  1. easy_install pip

如图所示:

(3)安装Phantomjs。
   到Phantomjs的官方网站http://phantomjs.org/download.html,下载“Download phantomjs-1.9.0-windows.zip (7.1 MB) ”。随后打开这个压缩包,将phantomjs.exe这一个文件解压到系统路径所能找到的地方,由于之前我已经将“C:\Python27\Scripts”目录添加入PATH之中,所以我就直接解压到这个目录。如图所示:

至此,就已经在Win的环境下配置好了环境。

三、测试
    随意新建一个文件,并加入如下代码:

  1. from selenium import webdriver
  2. driver = webdriver.PhantomJS()
  3. driver.get('www.baidu.com')
  4. data = driver.find_element_by_id('cp').text
  5. print data

Check Out,看看是不是这个结果:

其实,我一直不喜欢弹出来的DOS黑框,觉得这东东太影响视觉而且可能更耗时,但是在我看了官方DOC后:

   我发现,是不能直接藏匿DOS弹框的。So,只好这般啦。
   
    OK,it's time to "Enjoy yourself"......

也请参看下文:《数据抓取的艺术(二):数据抓取程序优化及抓取Google之心得

 

最新文章

  1. Netty 异步的、事件驱动的网络应用程序框架和工具
  2. hdu 1272 小希的迷宫
  3. Codeforces Round #247 (Div. 2) B - Shower Line
  4. SharePoint 2013 创建web应用程序报错"This page can’t be displayed"
  5. flatbuffers 使用问题记录
  6. PHP框架 Laravel Eloquent ORM 批量插入数据 && 批量更新目前没有
  7. Codeforces Round #223 (Div. 2) C
  8. transparent 的新问题
  9. LA 4636 (贪心) Cubist Artwok
  10. apache开源项目-- OODT
  11. bzoj1922
  12. Cracking the coding interview--Q1.5
  13. MySQL 存储过程和函数(转)
  14. bzoj1298题解
  15. PAT 乙级 1074 宇宙无敌加法器 (20 分)
  16. tensorflow,model,object_detection,训练loss先下降后递增,到几百万,解决tensorflow,model,object,detection,loss,incease
  17. ubuntu14.04安装Anaconda
  18. L2-025. 分而治之
  19. Anaconda 安装、使用
  20. linux 卸载数据库

热门文章

  1. 【转】 管理CPU 亲和性
  2. Intel格式和AT&T格式汇编区别
  3. DBus通讯
  4. MVC C# 调用存储过程
  5. 101个MySQL的调节和优化的Tips
  6. 日志文件切割服务logrotate配置及crontab定时任务的使用
  7. Qt websocket协议的实现
  8. Regex.Match 方法
  9. pure.css
  10. mysql 的日志文件