2016-03-27 30 views
2

Uzak bir web sitesinin DOM'sini almak ve ayrıştırmak, yani ayrıştırılan sonucu bir DOM düğümüne dönüştürmek ve etkin bir şekilde istenen öğeleri almak ve daha sonra bunları işlemek istiyorum. Yani, belirli öğeleri DOM'den almak ve sonraki işlemler için dizide saklamak istiyorum. Gerçekten ulaşılabilir mi? Şimdiye kadar bu konuda geldim: JS içinde uzaktan uzak DOM'yi ayrıştır

import request from 'request'; 

export default function getBody(url, callback) { 
    request(url, (err, res, body) => { 
    callback(body); 
    }); 
} 

Ve yolları klasöründe

:

import express from 'express'; 
import getBody from '../server'; 

const router = express.Router(); 

const url = 'http://www.google.com'; 
let result = {}; 

getBody(url, response => { 
    result = response; 
}); 

router.get('/', (req, res, next) => { 
    res.render('index', { title: 'Express', data: result }); 
}); 

export default router; 

Bu kod Bence içine uzaktan sayfanın DOM alır, ama sonuç olarak geri geliyor dev dize ve bunu işlemek için bir kabus olacak. Ön uçtan işlemek için browser-request kitaplığı kullanmayı denedim, ancak üstbilgileri çalıştıramadı ve her zaman bir hata döndürürdüm No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.

Uzaktan erişim için en iyi eylem nedir DOM ve yukarıda açıklanan şekilde ayrıştırır mı?

cevap

3

jQuery'yi biliyorsanız, DOM üzerinden gitmek için cheerio kullanabilirsiniz.

import request from 'request'; 
import cheerio from 'cheerio'; 

export default function getBody(url, callback) { 
    request(url, (err, res, body) => { 
    $ = cheerio.load(body); 
    $('h2') // finds all of the `h2` tags within the `body` object. 
    }); 
} 
+0

Bir çekicilik gibi çalıştım, tam ihtiyacım olan şey. –