0
我試圖爲nodeJS構建一個非常簡單的刮板函數 - 只是一個函數,我可以將URL傳遞給它,並且它返回所刮取的數據爲var data
。構建一個簡單的Node.js刮板函數
我完全新的Node.js而不能工作,爲什麼下面不工作:
var request = require('request');
var cheerio = require('cheerio');
function scrape(url) {
console.log("Scraping: " + url);
request(url, function(err, resp, body) {
if (err) {
throw err;
}
var html = cheerio.load(body);
return html;
});
}
var data = scrape('http://www.stackoverflow.com');
$ = data;
var logo = $('#hlogo a').text();
console.log(logo);
上面的代碼應該返回"Stack Overflow"
但顯然不會。當我在控制檯中運行時,出現錯誤:
var logo = $('#hlogo a').text();
^
TypeError: Property '$' of object #<Object> is not a function
任何想法爲什麼這不適用於我?
能不能介紹一下爲什麼異步是壞在這裏解釋一下?我希望能夠在它上面放置多個URL並統一拖放它們(例如,在一個數組中有100個URL),並使用'for循環'遍歷它們並在每個URL上並行調用'scrape()'。或者我不是undertsanding異步? – Jascination
我說異步是不好的?因爲JS是單線程的異步請求是實現「並行」抓取的唯一方法,但是你的代碼沒有考慮到異步。邏輯應該如何看 – Tommi
啊,有道理,乾杯隊友。 – Jascination