jquery抓取网页内容(自然要和http的request,get,post一些方法相关)

优采云 发布时间: 2022-01-29 10:17

  jquery抓取网页内容(自然要和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,那是怎么回事?只需在下一篇文章文章 中解决它。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线