精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

熱點技術:使用CasperJS構建Web爬蟲

開發 前端
本文只寫了點關于使用CasperJS你所能做到的皮毛的東西。該項目的文檔是完美的,所以要確保查看過API ,看看你還可以用它來做些什么。

從你的應用中收集數據有時候可能有點困難和艱辛。可能是缺少一個必須的API,或者是有太多的數據需要處理。這時候你就需要借助于web抓取。

不用說了,這可能是個法律雷區,所以要確保你沒有逾越法律的邊界。

目前有很多工具可以幫助你抓取內容,例如Import.io,但是有時這些工具并不能完全滿足你的需要。又或者,像我一樣,充滿好奇心,希望深入地了解web抓取。

挑戰

讓我們從一個簡單地挑戰——網絡爬蟲開始,讓這個爬蟲爬取Techmeme,并獲得一個當天熱門新聞列表!

注意: 在這里我將會使用DZone,但在獲取頁面時會出現問題。后面會詳細說明這個問題。

機器設置

您只需要做很少的工作來完成安裝。我假設您已經安裝了Node.js(我的意思是誰沒有安裝呢!)。盡管我們并不直接使用PhantomJS,但是您依然需要安裝它。版本2.0.1目前已經可以使用了——您可以從其官網下載或使用homebrew或其他等效的包管理器安裝。

如果您使用具有homebrew的Mac,您可以這樣安裝PhantomJS

brew install phantomjs

下載完成之后,您將需要用相同的方式安裝CasperJS。您可以將CasperJS看做PhantomJS的伴侶。它實際上是給您提供相似的網頁處理API。盡管它是為網頁測試設計的。與PhantomJS相同,它具有豐富的功能使其也非常適合于抓取內容。

CasperJS允許我們編寫JavaScript腳本。您可以通過在終端中輸入casperjs以測試其是否正確安裝并加入到PATH中。

 

編寫腳本

下面我們將編寫一個新的JavaScript腳本文件。在我的例子中,我稱其為index.js。您需要做的***件事就是在您的代碼中創建一個casper實例。您還需要加入依賴的模塊并向其傳遞一些基本參數。

  1. var casper = require("casper").create({ 
  2. waitTimeout: 10000
  3. stepTimeout: 10000
  4. verbose: true
  5. pageSettings: { 
  6. webSecurityEnabled: false 
  7. }, 
  8.     onWaitTimeout: function() { 
  9.           this.echo('** Wait-TimeOut **'); 
  10.     }, 
  11.     onStepTimeout: function() { 
  12.         this.echo('** Step-TimeOut **'); 
  13.     } 
  14. }); 

當您等待一個元素可見時,上面的onWaitTimeout回調將會被調用。例如,點擊一個按鈕之后,waitTimeout將被超出。

現在,您可以啟動casper實例并將其指向我們希望爬取的頁面。

 

  1. casper.start(); 
  2. casper.open("http://techmeme.com"); 

Casper使用一個可靠地框架來幫助您一步一步地運行所有任務。對于***步,您將希望使用then函數。

  1. casper.then(function() { 
  2.   //logic here 
  3. }); 
  4. //start your script 
  5. casper.run(); 

為了使Casper打開網頁并按您的想法運行,您需要調用run函數。

檢查網頁以獲取想要的元素

當抓取到一個網頁,您可以假設它具有特定的結構。在您編寫腳本之前,可能已經瀏覽過了網頁的源代碼,或者已經使用開發者工具觀察了頁面對特定行為的變化。

所以,讓我們開始于一個簡單地邏輯,使用CasperJS維護系統確保一個特定的元素在繼續之前處于合適的位置。如果元素不存在,腳本將會停止,但 是至少您將會知道其為何停止。這個維護行為對于觀察您之前抓取頁面的變化是無價的,但是可能會與您之前見到的頁面具有不一樣的結構。

如果您檢查了Techmeme首頁的元素,您將會注意到頭條新聞部分在一個id為,topcol1的div中。

 

讓我們使用維護功能確保這個元素存在:

 

  1. casper.then(function() { 
  2. this.test.assertExists("#topcol1"); 

如果這個元素不存在,測試(例如我們的腳本)將會停止,否則它將繼續運行。

您還可以使用waitForSelector函數來獲得更為細致的結果:

  1. this.waitForSelector("#topcol1"
  2.     function pass () { 
  3.        console.log("Continue"); 
  4.     }, 
  5.     function fail () { 
  6.         this.die("Did not load element... something is wrong"); 
  7.     } 
  8. ); 

使用這個函數的優點就是它允許頁面加載元素并一直等待到執行。您在初始配置中指定的waitTimeout將會被用于確定失敗前等待多久。

注意:有時,使用CasperJS查找元素可能會出問題。使用capture()函數截取一個CasperJS看到的頁面的截圖。

this.capture(‘screener.png’);

從頁面中提取內容

下面,讓我們看看怎樣從頁面中找出標題。首先,找到包含您需要的內容的元素,在我們的例子中,為class=ii的div。

CasperJS自帶一個evaluate函數,可以讓您在頁面中運行JavaScript,并且您還可以讓函數返回一個值以供進一步處理。

這個JavaScript寫起來并沒有什么不同,您可能注意到,在本例中,我使用的是原始的純DOM方法,而不是jQuery,同樣,如果您愿意,您也可以在evaluate函數中使用jQuery;

  1. var links = this.evaluate(function(){ 
  2. var results = [];  
  3. var elts = document.getElementsByClassName("ii"); 
  4. for(var i = 0; i < elts.length; i++){ 
  5. var link = elts[i].getElementsByTagName("a")[0].getAttribute("href"); 
  6. var headline = elts[i].firstChild.textContent; 
  7. results.push({link: link, headline: headline}); 
  8. return results;  
  9. }); 

如果您在evaluate函數中使用console.log語句,它們將會通過remote.message句柄打印到您的控制臺,這將會在下一節中詳細介紹。

一旦運行結束,結果將會返回給您。您可以將它們寫入文件系統,或者將它們打印到屏幕上:

 

  1. console.log("There were "  + links.length + " stories"); 
  2. for(var i = 0; i < links.length; i++){ 
  3. console.log(links[i].headline); 

輸出的結果如:

 

抓取中的錯誤處理

有時,您運行的JavaScript中可能存在錯誤,或者其對您抓取的頁面的處理存在問題。這些情況中,您可以捕獲錯誤并使用remote.message和page.error事件將其打印到控制臺:

 

  1. casper.on('remote.message', function(msg) { 
  2. this.echo('remote message caught: ' + msg); 
  3. }); 
  4.  
  5. casper.on('page.error', function(msg, trace) { 
  6. this.echo('Error: ' + msg, 'ERROR'); 
  7. }); 
  8.  
  9. 您同樣還能觀察到即將請求的資源,這些資源的加載使用的是resource.error和resource.received事件: 
  10.  
  11. casper.on('resource.error', function(msg) { 
  12. this.echo('resource error: ' + msg); 
  13. }); 
  14.  
  15. casper.on('resource.received', function(resource) { 
  16.     console.log(resource.url); 
  17. }); 

了解更多

本文只寫了點關于使用CasperJS你所能做到的皮毛的東西。該項目的文檔是***的,所以要確保查看過 API ,看看你還可以用它來做些什么。

在本系列的下一篇文章中,我回來看看如何從網頁上下載圖片,而且我也會討論下如何使用構建到CasperJS中的文件系統函數,其使用會受到比Node.js更多的限制。

責任編輯:王雪燕 來源: oschina
相關推薦

2009-09-22 12:59:07

ibmdwWeb

2013-06-13 10:29:39

CasperJS測試UI測試

2024-03-08 12:17:39

網絡爬蟲Python開發

2020-06-04 17:38:49

PythonFastAPIWeb服務

2019-03-12 09:20:09

shell爬蟲命名

2017-03-06 14:44:49

Androidhook技術

2012-05-14 17:35:28

移動Web

2022-11-24 10:24:32

2010-06-13 09:22:37

jQuery

2021-11-07 14:29:13

ChromeAPI 藍牙

2010-01-15 15:47:38

軟交換機技術

2014-11-14 17:23:29

web掃描爬蟲

2022-09-14 23:06:45

2023-12-26 00:58:53

Web應用Go語言

2023-04-19 07:39:55

RustHTTP服務器

2009-01-03 14:25:10

ibmdwWeb

2013-04-27 11:22:14

2017-03-13 14:09:19

RESTful API實踐

2017-03-24 13:40:44

機器學習模型神經

2016-12-19 10:00:00

React性能優化
點贊
收藏

51CTO技術棧公眾號

久草成人在线视频| 完美搭档在线观看| 午夜av在线播放| 97久久久精品综合88久久| 国产成人精品久久久| 久草手机视频在线观看| 国产精品xxxav免费视频| 色婷婷综合激情| 青青视频免费在线| 久久伊伊香蕉| 国产成人在线看| 国产精品成人国产乱一区 | 精品国产18久久久久久洗澡| 色狠狠色噜噜噜综合网| 91免费版看片| h网站在线免费观看| 成人妖精视频yjsp地址| 国产精品啪视频| www.天天色| 天天久久综合| 国产一区二区黑人欧美xxxx| 欧美xxxx日本和非洲| 91精品国产66| 欧美性xxxx极品hd欧美风情| 日本精品福利视频| 巨大荫蒂视频欧美大片| 中文字幕精品一区二区精品绿巨人 | 999色成人| 91久久精品一区二区三区| 精品人妻少妇一区二区| 中文在线观看免费| 综合欧美一区二区三区| 日韩区国产区| 日本啊v在线| eeuss鲁片一区二区三区在线观看| 成人国产精品免费视频| 中文精品久久久久人妻不卡| 久久高清一区| 91av在线免费观看视频| 国内偷拍精品视频| 亚洲精品一二三区区别| 久久激情视频免费观看| 中文字幕美女视频| 第一sis亚洲原创| 国产亚洲精品久久| 国产成人精品无码免费看夜聊软件| 国产96在线亚洲| 日韩欧美成人一区| 国产chinesehd精品露脸| 视频在线一区| 欧美变态tickling挠脚心| 性鲍视频在线观看| 91亚洲无吗| 精品粉嫩aⅴ一区二区三区四区| 天堂av.com| 国产在线视频欧美一区| 欧美一级久久久| 91香蕉视频免费看| 日韩在线观看中文字幕| 日韩欧美国产电影| 日韩综合第一页| 欧美一级一片| 亚洲视频在线观看网站| 免费成人深夜天涯网站| 日韩欧美二区| 久久亚洲精品视频| 国产一级在线观看视频| 国产日韩一区| 国产精品久久久久久久电影| 亚洲天堂中文字幕在线| 国产一区二区日韩精品| 成人在线免费网站| 视频二区在线| 欧美激情在线观看视频免费| 一区二区三区四区视频在线观看 | 色综合www| 亚洲天堂色网站| 日韩精品久久久久久久的张开腿让| 欧美激情国产在线| 欧美激情一区二区三区在线视频观看 | 精品久久久久久久久久久久| 日本成人中文字幕在线| 在线观看欧美| 日韩av在线一区| 五月婷婷欧美激情| 欧美激情综合| 日韩美女在线看| 国产又粗又猛视频免费| 成人免费高清视频在线观看| 日本高清久久一区二区三区| 主播国产精品| 色婷婷久久综合| 色网站在线视频| 欧美人与动xxxxz0oz| 在线国产精品视频| 欧美一级高潮片| 美洲天堂一区二卡三卡四卡视频 | 中文字幕 欧美日韩| 91免费精品国偷自产在线在线| 亚洲日本aⅴ片在线观看香蕉| 国产免费久久久久| 三级欧美韩日大片在线看| 亚洲综合在线做性| 成人在线免费观看| 精品国产精品自拍| 中文字幕亚洲影院| 偷窥自拍亚洲色图精选| 欧美区在线播放| japanese国产在线观看| 成人免费视频一区二区| 亚洲日本精品| 综合日韩av| 日韩三级视频中文字幕| 国产免费一区二区| 天天操中文字幕| 国产乱码精品一区二区三区五月婷 | 成人av免费电影网站| 91精品婷婷国产综合久久竹菊| 玖草视频在线观看| 韩国亚洲精品| 91精品视频专区| 国产毛片av在线| 欧美日韩一区免费| 折磨小男生性器羞耻的故事| 99久久99热这里只有精品| 日韩av电影中文字幕| 男人天堂av网| 一区二区三区在线免费播放| 91国内在线播放| 欧美猛男男男激情videos| 91国内产香蕉| 色丁香婷婷综合久久| 亚洲欧美综合网| 人人干人人干人人| 欧美丝袜丝交足nylons172| 26uuu另类亚洲欧美日本一| 亚洲国产精品无码久久| 亚洲欧美aⅴ...| www.国产视频.com| 色135综合网| 国产免费一区二区三区在线观看 | 久久精品亚洲精品国产欧美 | 视频在线日韩| 亚洲天堂av在线播放| 国产一级18片视频| 91小视频在线免费看| 欧美国产日韩激情| xvideos.蜜桃一区二区| 久久久久久中文字幕| 精品人妻一区二区三区日产乱码| 亚洲人成伊人成综合网小说| 国产精品自在自线| 久久久久久久久99精品大| 国产欧美日韩丝袜精品一区| 五月香视频在线观看| 欧美色综合网站| 日本二区三区视频| 国产一区福利在线| 天天操天天干天天玩| 日本成人手机在线| 久久久久九九九九| 色综合久久久久久| 色婷婷国产精品| 无码少妇一区二区| 精品一区二区三区蜜桃| 国产欧美123| av不卡一区二区| 欧美亚洲视频在线观看| 国产高清免费av在线| 欧美久久久久久蜜桃| 国产成人无码aa精品一区| 国产大陆a不卡| 自慰无码一区二区三区| 激情综合网站| 91精品视频大全| av福利导福航大全在线| 亚洲女人天堂av| 一级特黄色大片| 亚洲国产精品欧美一二99| 中文字幕一区二区人妻在线不卡 | 初高中福利视频网站| 亚洲二区视频| 日本欧美色综合网站免费| 日本电影久久久| 久久免费视频在线观看| 麻豆app在线观看| 日韩一区二区视频在线观看| 日韩在线视频免费播放| 国产精品美女久久福利网站| 风韵丰满熟妇啪啪区老熟熟女| 国产农村妇女精品一区二区| 一本一道久久a久久精品综合| 欧一区二区三区| 国产成人在线亚洲欧美| 色综合999| 亚洲视频精品在线| 国产 欧美 自拍| 欧美三级三级三级爽爽爽| 久久久精品视频在线 | www.99re7| 2020国产精品自拍| 亚洲成人福利视频| 琪琪一区二区三区| 欧美日韩二三区| 永久91嫩草亚洲精品人人| 欧美 日韩 国产在线| 99视频有精品高清视频| 欧洲美女免费图片一区| 91福利国产在线观看菠萝蜜| 亚洲片在线观看| 亚洲黄色在线免费观看| 欧美日韩色一区| 日本特级黄色片| 亚洲国产一二三| 欧美风情第一页| 欧美国产精品久久| 中文字幕av观看| 成人一区二区三区中文字幕| 九九热99视频| 日本不卡的三区四区五区| 欧美久久久久久久久久久久久| 日韩在线欧美| 偷拍视频一区二区| 亚洲精品推荐| 久久久久久国产精品免费免费| 欧美一级片网址| 成人国产精品色哟哟| 九色成人搞黄网站| 国产成人精品一区二区在线| 欧美aa在线观看| 97精品国产97久久久久久春色 | 一区二区欧美视频| 黄色片网站在线播放| 国产精品欧美一级免费| 亚洲国产天堂av| 久久久久久影视| 亚洲第一成人网站| 91老师国产黑色丝袜在线| 影音先锋黄色资源| 99精品黄色片免费大全| 久久久午夜精品福利内容| 成人一区二区三区视频在线观看| 亚洲性图第一页| 国产一区二区网址| 在线观看中文av| 国产精品一区专区| 妖精视频在线观看| 国产黄色精品视频| 中文字幕永久免费| 成人综合激情网| 少妇精品一区二区| 久久久久久**毛片大全| 久久国产柳州莫菁门| 国产精品女人毛片| 登山的目的在线| 一级女性全黄久久生活片免费| 精品无码久久久久久久| 亚洲va天堂va国产va久| 毛片视频网站在线观看| 色综合久久99| 加勒比在线一区| 欧美嫩在线观看| 亚洲老妇色熟女老太| 亚洲国产精品字幕| 国产资源在线观看| 精品久久久91| 国产精品蜜臀| 国产成人精品999| 四虎精品永久免费| 国产欧美一区二区在线播放| 少妇久久久久| 亚洲一区二区三区加勒比| 欧美精品二区| 熟女性饥渴一区二区三区| 青青国产91久久久久久| 特级黄色片视频| 91免费视频网| www.com.av| 亚洲国产aⅴ天堂久久| 国产情侣小视频| 欧美一级爆毛片| 三级av在线播放| 日韩三级影视基地| 精精国产xxxx视频在线野外| 国产成人免费91av在线| 国产日韩欧美中文在线| 国内一区在线| 97国产精品| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 97在线观看免费观看高清 | 午夜在线视频免费观看| 亚洲看片一区| 中文字幕亚洲乱码| 99国产精品国产精品毛片| 自拍偷拍你懂的| 天天综合色天天综合色h| 在线观看免费观看在线| 亚洲国产91精品在线观看| a√资源在线| 欧美又大又硬又粗bbbbb| 成人精品视频在线观看| 免费观看成人在线| 欧美日韩一区自拍| 成人性生交免费看| 99视频在线观看一区三区| 日韩在线视频网址| 欧洲国内综合视频| 六月婷婷中文字幕| 精品国产区一区二区三区在线观看| 男人天堂视频在线观看| 亚洲综合日韩在线| 91综合在线| 欧美性猛交久久久乱大交小说| 成人免费高清在线观看| www.xxxx日本| 欧美日韩在线综合| 免费在线国产| 国内精品久久影院| 日韩精品免费视频一区二区三区| 日本在线观看一区二区三区| 亚洲精品色图| www日本在线观看| 中文字幕日韩av资源站| 亚洲 小说区 图片区| 精品中文字幕久久久久久| 国产精品一区hongkong| 亚洲综合最新在线| 国产精品毛片久久| 久热精品在线播放| 久久九九99视频| 日韩手机在线视频| 亚洲精品少妇网址| sqte在线播放| 国产一区免费视频| 伊人久久亚洲影院| 中国特级黄色大片| 亚洲自拍偷拍麻豆| 性欧美18一19性猛交| 欧美老女人性生活| 国产一区二区三区黄网站| 中文字幕一区二区三区在线乱码| 麻豆专区一区二区三区四区五区| 亚洲精品午夜视频| 欧美天天综合色影久久精品| 天堂网在线资源| 欧美性受xxxx白人性爽| 日韩精品导航| 久久久久狠狠高潮亚洲精品| 久久精品欧美日韩精品| 日本久久综合网| 尤物yw午夜国产精品视频明星| 最新欧美电影| 伊人久久99| 国产一区高清在线| 日本少妇全体裸体洗澡| 亚洲黄色av女优在线观看| 日本不卡1234视频| 欧美日韩一区二区三区在线观看免| 久久精品九九| 午夜黄色福利视频| 91麻豆精品国产91久久久更新时间| 国产cdts系列另类在线观看| 97se在线视频| 国产精品久久久亚洲一区| www.久久国产| 欧美日韩一级视频| 18videosex性欧美麻豆| 国产日韩欧美综合精品| 久久青草久久| 中文国语毛片高清视频| 精品av综合导航| 国产一区二区主播在线| 欧美一级特黄aaaaaa在线看片| 成人av在线电影| 无码人妻精品一区二区三区蜜桃91| 视频在线观看一区二区| 日韩精品中文字幕一区二区 | 蜜桃91丨九色丨蝌蚪91桃色| 免费高清在线观看电视| 精品成人在线观看| 竹内纱里奈兽皇系列在线观看| 一区二区三区四区视频在线| 成人久久18免费网站麻豆 | 91精品国产入口在线| www.51av欧美视频| 午夜精品一区二区在线观看的| 国产精品中文有码| 天堂а√在线中文在线新版| 久久亚洲精品一区二区| 要久久电视剧全集免费| 亚洲欧美天堂在线| 日韩欧美亚洲一二三区| 久操视频在线免费播放| 九九九九精品| 国产在线播放一区| 超碰超碰超碰超碰| 欧美成人免费在线观看| 国产乱码精品一区二区亚洲 | 一级片在线观看视频| 97精品欧美一区二区三区|