2013-08-10 34 views
20

Tôi muốn thực hiện những hành động sau đây ở phía máy chủ:Cạo một trang web và điều hướng bằng nút nhấn

1) Cạo một trang web
2) Mô phỏng một nhấp chuột trên trang đó và sau đó điều hướng đến trang mới.
3) Cạo trang mới
4) Mô phỏng một số nhấp chuột vào nút trên trang mới
5) Gửi dữ liệu trở lại cho khách hàng thông qua json hoặc một cái gì đó

Tôi đang nghĩ đến việc sử dụng nó với Node.js .

Nhưng bối rối như mà mô-đun nên tôi sử dụng
a) Zombie
b) Node.io
c) Phantomjs
d) JSDOM
e) Bất cứ điều gì khác nút

Tôi đã cài đặt , io nhưng không thể chạy nó thông qua dấu nhắc lệnh.

PS: Tôi đang làm việc trong windows 2008 server

Trả lời

30

Zombie.js và Node.io chạy trên JSDOM, do đó các tùy chọn của bạn sẽ đi với JSDOM (hoặc bất kỳ trình bao bọc tương đương) nào, một trình duyệt không đầu (PhantomJS, SlimerJS) hoặc Cheerio.

  • JSDOM khá chậm vì nó phải tạo lại DOM và CSSOM trong Node.js.
  • PhantomJS/SlimerJS là trình duyệt không đầu đúng, do đó hiệu suất là ok và những chương trình này cũng rất đáng tin cậy.
  • Cheerio là giải pháp thay thế nhẹ cho JSDOM. Nó không tạo lại toàn bộ trang trong Node.js (nó chỉ tải xuống và phân tích cú pháp DOM - không có javascript nào được thực hiện). Vì vậy, bạn không thể thực sự nhấp vào nút/liên kết, nhưng nó rất nhanh để loại bỏ các trang web.

Với yêu cầu của bạn, tôi có thể đi với thứ gì đó giống như trình duyệt không có đầu. Đặc biệt, tôi chọn CasperJS vì nó có API đẹp và biểu cảm, nó nhanh và đáng tin cậy (nó không cần phải phát minh lại bánh xe về cách phân tích cú pháp và hiển thị dom hoặc css như JSDOM) và nó rất dễ tương tác với các yếu tố như nút và liên kết.

công việc của bạn trong CasperJS nên xem xét nhiều hơn hoặc ít hơn như thế này:

casper.start(); 

casper 
    .then(function(){ 
    console.log("Start:"); 
    }) 
    .thenOpen("https://www.domain.com/page1") 
    .then(function(){ 
    // scrape something 
    this.echo(this.getHTML('h1#foobar')); 
    }) 
    .thenClick("#button1") 
    .then(function(){ 
    // scrape something else 
    this.echo(this.getHTML('h2#foobar')); 
    }) 
    .thenClick("#button2") 
    thenOpen("http://myserver.com", { 
    method: "post", 
    data: { 
     my: 'data', 
    } 
    }, function() { 
     this.echo("data sent back to the server") 
    }); 

casper.run(); 
+0

Ngoài ra những gì là quan điểm của mình về việc sử dụng zombie' – user2129794

+0

Theo kinh nghiệm của Zombie của tôi là không đáng tin cậy như PhantomJS hoặc CasperJS.Đôi khi dòng chảy bị gián đoạn bởi những trục trặc rất lạ và tôi dường như không hiểu khi nào sử dụng các nút, nhấp chuột, liên kết, v.v ... để điều hướng trang. Tuy nhiên, thật tuyệt khi có Node chạy cào và không phải là một quá trình bên ngoài. Tôi đoán nó thực sự phụ thuộc vào ứng dụng của bạn. Nếu bạn có thể làm việc xung quanh một thực tế là một dịch vụ bên ngoài đang làm việc cạo, đi với và trình duyệt không đầu. – danielepolencic

2

Các module bạn liệt kê làm như sau:

  • Phantomjs/Zombie - mô phỏng trình duyệt (không đầu - không có gì là thực sự hiển thị). Có thể được sử dụng để cạo tĩnh hoặc động. Hoặc thử nghiệm các trang html của bạn.
  • Node.io/jsdom - webscraping: trích xuất dữ liệu từ trang (tĩnh).

Nhìn vào yêu cầu của bạn, bạn có thể sử dụng ma hoặc zombie.

Các vấn đề liên quan