java抓取网页内容( 网页抓取意味着流程(Web抓取自动化)的简要信息表)

优采云 发布时间: 2021-10-14 12:03

  java抓取网页内容(

网页抓取意味着流程(Web抓取自动化)的简要信息表)

  使用 Node.js 进行网页内容抓取(Web Scraping)

  介绍

  根据定义,网络抓取意味着从网页中获取有用的信息。该过程应该消除手动浏览页面的需要,自动化,并允许您感兴趣的信息的程序化采集和分类

  Node.js 是一个很好的网络爬虫工具。它允许使用 npm 提供的开源模块在几行代码中实现网页抓取

  使用Node.js进行网页内容抓取(Web Scraping)的主要步骤

  正如我们所定义的,网络抓取只不过是自动手动浏览和从您首选的网络浏览器中的特定 网站 采集信息

  这个过程包括三个主要步骤:

  根据应用的需要,第一步和最后一步通常基本相同。但是,理解 HTML 内容需要为每个要爬取的 网站 编写特定的代码

  警告

  根据您对这些技术和技术的使用,您的应用程序可能正在执行非法操作

  在某些情况下,您需要小心:

  手动抓取网页的算法方法示例

  例如,我们会找到本站豆豆网的部分列表页

  首先,让我们定义我们的任务和期望的结果:

  使用“.CSV”文件来存储收录 文章 的地址、标题和日期。这些专栏将简要描述每个文章

  以下是我们如何手动执行此操作:

  多次重复这些步骤将得到这个搜索列表页面的简要信息表

  使用 Web Scraping 自动化流程(Web Scraping)

  为了自动化这个过程,我们应该以编程方式遵循相同的步骤

  设置开发环境

  我们将使用 Node.js 和 npm 来开发这个示例项目。因此,请确保您的机器上安装了这些工具,让我们首先在您选择的空目录中运行以下命令,然后创建一个收录我们代码的空 index.js 页面:

  $ npm init

  下一步是从 npm 安装所需的模块

  从上面描述的手动算法可以看出,我们需要一些东西来获取HTML源代码,解析内容并理解它,然后将JavaScript对象数组写入“.CSV”文件:

  $ npm install --save request request-promise cheerio objects-to-csv

  在终端中执行上一行将在 node_modules 目录中安装所需的模块并将它们作为依赖项保存在 package.json 文件中

  检索信息

  所有准备工作完成后,使用编辑器编辑 index.js 并根据需要导入我们刚刚安装的模块:

  const rp = require('request-promise');

const otcsv = require('objects-to-csv');

const cheerio = require('cheerio');

  在手动算法中完成这一步会为我们提供一个链接,我们将把它分成两部分并添加到模块导入代码后面的 index.js 中:

  const baseURL = 'https://fullsmilespace.cn';

const searchURL = '?s=IT';

  根据图中得到这两个变量的值:

  

  然后,我们应该编写一个函数,该函数将在任务描述中返回表示 文章 的 JavaScript 对象数组

  为了能够将手动算法转换为代码,我们必须首先使用网络浏览器的检查器工具进行一些手动工作

  我们需要找到收录我们感兴趣的信息的特定 HTML 元素。在我们的示例中,可以在以下元素中找到 文章 链接:

  

  

如何将iPhone X/8/7/6s/6/5s/5/4s/SE等备份到iTunes/iCloud/PC/Mac

  它是一个 h2 嵌套的 tag 标签,带有类 entry-title,其中收录 文章 链接,以及一个 href 属性,其中收录指向各种 文章 页面的链接。这两种方法将来都会对我们有用

  链接到文章页面后,我们需要找到剩下的两部分数据:title和date,分别位于class entry-title标签和class entry-date标签下

  请注意,要获取标题和日期,我们需要将值存储在标签中

  当我们尝试实现其编程时,让我们看看手动算法会是什么样子:

  下面是这个算法在实现时的样子:

  const getCompanies = async () => {

const html = await rp(baseURL + searchURL);

const businessMap = cheerio('.entry-title a', html).map(async (i, e) => {

const link = e.attribs.href;

const innerHtml = await rp(link);

const title = cheerio('.entry-title', innerHtml).text();

const date = cheerio('.entry-date', innerHtml).text();

return {

link,

title,

date

}

}).get();

return Promise.all(businessMap);

};

  它遵循我们之前设置的规则并返回一个 Promise,它解析为一组 JavaScript 对象:

  { link: 'https://fullsmilespace.cn/?p=75',

title: '如何在WordPress中添加关键字keywords和元描述meta descriptions',

date: '2019年1月15日' }

{ link: 'https://fullsmilespace.cn/?p=209',

title: '如何将iPhone X/8/7/6s/6/5s/5/4s/SE等备份到iTunes/iCloud/PC/Mac',

date: '2019年1月18日' }

{ link: 'https://fullsmilespace.cn/?p=197',

title: '解决App Store下载“超过150MB”的应用需无线局域网来下载的限制',

date: '2019年1月17日' }

{ link: 'https://fullsmilespace.cn/?p=192',

title: '2019年的页面搜索引擎优化|2019年页面SEO优化',

date: '2019年1月16日' }

{ link: 'https://fullsmilespace.cn/?p=95',

title: '美化WordPress网站的最佳插件推荐|WordPress网站美化插件汇总',

date: '2019年1月15日' }

{ link: 'https://fullsmilespace.cn/?p=254',

title: 'Node.js初学者指南 | 初识Node.js详细过程',

date: '2019年1月21日' }

  承诺

  如果你不熟悉现代 JavaScript 中异步编程的核心概念,这里是 Promises 的简要介绍

  Promise 是一种特殊类型,用作值的占位符。它可能处于几种状态:

  如果你不是太详细,你应该只知道返回一个promise的函数并没有返回实际值。为了访问 Promise 的结果或解析值,您应该编写另一个函数,该函数应该传递到 then 块中,并期望 Promise 的值被解析。如果在 Promise 等待期间发生任何错误,它会过渡到拒绝状态,并且可以在 catch 块中处理错误

  数据存储和整理工作

  现在我们已经从网页中提取了所有必要的数据并拥有一个干净的 JavaScript 对象数组,我们可以准备任务定义所需的文件“.CSV”:

  getCompanies()

.then(result => {

const transformed = new otcsv(result);

return transformed.toDisk('./output.csv');

})

.then(() => console.log('成功完成简单页面内容抓取!'));

  getCompanies 函数返回一个承诺,该承诺解析为准备写入 CSV 文件的对象数组,这是在第一个 then 块中完成的。当CSV文件成功写入文件系统后,第二个解析器会解析完成任务

  通过将此代码添加到 index.js 文件并运行它:

  node index.js

  我们应该在我们的工作目录中得到一个 output.csv 文件。csv文件表示的表格收录3列——文章链接、标题、日期,每行描述一篇文章文章

  综上所述

  本质上,网页抓取就是浏览网页,根据任务获取有用的信息,并将其存储在某个地方,所有这些都是通过编程来完成的。为了能够通过代码实现这一点,你应该首先使用浏览器的inspector工具或者通过分析目标网页的原创HTML内容来手动完成这个过程

  Node.js 提供了可靠且简单的工具,使网页抓取成为一项简单的任务,与手动处理链接相比,可以节省大量时间

  尽管将所有日常任务自动化似乎很诱人,但在制作这些工具时要小心,因为如果您不完全理解源网站 的术语或网络爬虫产生的流量,它们很容易违反法律

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线