jquery抓取网页内容(自然要和http的request,get,post一些方法相关)
优采云 发布时间: 2022-01-29 10:17jquery抓取网页内容(自然要和http的request,get,post一些方法相关)
Node.js Request+Cheerio实现小爬虫-基础功能实现1:内容抓取
Node.js Request+Cheerio实现小爬虫-基础功能实现2:文件写入
Node.js Request+Cheerio实现小爬虫-基础功能实现3:进程控制和并发控制
Node.js Request+Cheerio 实现小爬虫 - 额外部分:代理设置
前段时间碰巧有个小任务是爬虫。因为一直使用js和Node.js的兴起,所以我打算用Node来完成这个任务。当然,在实施过程中也遇到了很多问题。所以我打算把它写成评论和排序。
既然是爬虫,自然和http的request、get、post方法有关。至于这方面的知识,可以去问谷歌或者度娘。除了http相关的知识,我们还需要提取抓取到的内容。提取可以使用万能的正则表达式,当然我们也可以使用node丰富的包。下面是这个小项目用到的node包。
使用的包
要求
Request 模块是一个非常方便使用的 http 模块。具体用法请参考GitHub官方主页。
官方主页
切里奥
Cheerio 是一个可以使用 jQuery 语法来提取内容的模块。特别是对于从网络上抓取的东西。因为它使用与jQuery相同的语法,所以特别适合前端使用。
官方主页
现在您已经介绍了包和模块,是时候试用它们了。那我们把代码放在下面吧!
const request = require('request');
const cheerio = require('cheerio');
var shopLists = [];
var option = {
url: url,
// 不加入headers的话很可能会被拒绝访问
headers: {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.6',
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Mobile Safari/537.36',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive'
}
};
request(option, function(error, response, body) {
if (!error && response.statusCode == 200) {
// 使用Cheerio对抓取到的内容进行解析
var $ = cheerio.load(body, {
ignoreWhitespace: true,
xmlMode: true
});
var shopInfo = {
pageNo: option.url.match(/g\d+p(\d+)/)[1],
pageURL: option.url,
info: []
};
var shopList = $('div#shop-all-list').find('a[data-hippo-type = "shop"]');
shopList.each(function(no, shop) {
let info = {};
info.no = no + 1;
info.name = $(shop).attr('title');
info.url = $(shop).attr('href');
shopInfo.info.push(info);
});
shopLists.push(shopInfo);
}
});
这样就可以抓取到想要的网站内容了。当然,问题自然会一个接一个地解决。现在您已经捕获了内容,您总是希望将其保存在一个地方。以本地保存为例,我们可以使用Node自带的fs模块来读取文件。fs模块的使用方法请参考官方文档或向谷歌渡娘咨询。
const fs = require('fs');
...
// 刚才的爬虫代码
...
fs.writeFile(FILE_PATH + FILE_NAME, shopLists, 'utf-8', function(err) {
if (err) {
console.error("文件生成时发生错误.");
throw err;
}
console.info('文件已经成功生成.');
});
好吧,看来问题已经解决了。所以不管它是否有效,都需要练习。运行它,问题就出现了。文件是0,那是怎么回事?只需在下一篇文章文章 中解决它。