【发布时间】:2019-08-06 11:06:45
【问题描述】:
我正在尝试抓取分类广告搜索结果页面。
我已经尝试在控制台记录所有可以做的事情,以确保我得到响应,但当我实际使用cheerio 查询某些内容时,我没有得到任何回复。例如,如果我只是查询有多少孩子使用$('.listing-group').children('section').length,我在控制台记录它时会返回0 而不是24。
这就是我正在做的事情。请原谅长网址。
const request = require("request");
const cheerio = require("cheerio");
const app = express();
app.get("/scrape", function(req, res) {
url =
"http://classifieds.ksl.com/search/?keyword=code&category%5B%5D=Books+and+Media&zip=&miles=25&priceFrom=&priceTo=&city=&state=&sort=";
request(url, function(error, response, html) {
if (!error) {
let $ = cheerio.load(html);
let test = $("#search-results").find("section").length
console.log(test);
} else {
console.log("there has been an error");
}
res.send("Check the console.");
});
});
app.listen("8081");
console.log("check localhost:8081/scrape");
exports = module.exports = app;
我是 Cheerio 的新手,所以我假设我可能犯了一个简单的错误,但是在我检查过的所有教程中,我似乎找不到答案。
最终我想抓取页面上的每个结果(在“部分”标签中找到)以显示我正在处理的个人项目的数据。
【问题讨论】:
-
如果您在该页面上“查看源代码”,您会看到列表数据位于该页面中间的 json blob 中。所以你需要用正则表达式和 JSON.parse() 来提取它。
-
@pguardiario 感谢您的帮助。我四处挖掘,这就是我想出的。
let newStr = html.match(/\{\"id\"(.*)\"free\"\}/gm)抓住了那个 blob,但是当我尝试用let newstr = JSON.parse(html.match(/\{\"id\"(.*)\"free\"\}/gm))解析它时,我得到了一个错误。有什么进一步的指导吗?谢谢!
标签: javascript web-scraping cheerio