js提取指定网站内容

js提取指定网站内容

js提取指定网站内容(作者简介董沅鑫,云开发CloudBase团队研发工程师,侧重于出没在)

网站优化优采云 发表了文章 • 0 个评论 • 92 次浏览 • 2021-10-16 10:01 • 来自相关话题

  js提取指定网站内容(作者简介董沅鑫,云开发CloudBase团队研发工程师,侧重于出没在)
  关于作者
  云开发CloudBase团队研发工程师董元新,专注于前端工程和节点服务开发,业余时间经常光顾。
  这篇文章的内容
  
  介绍
  随着腾讯云开发能力的逐步提升,经验丰富的工程师已经可以独立完成产品的开发和上线。但是,与在线云开发相关的实战实战很少文章。很多开发者都知道云开发的能力,但不知道在现有的开发体系下如何引入云开发。
  
  本文从云开发团队开发者+能力用户的角度,以搭建云开发官网的思路()为例,结合流行的框架和工具分享云开发的实践经验。
  涉及的知识点有:
  概述
  系统设计图:
  
  背景介绍
  随着云开发团队业务的快速发展,团队需要一个官网来更直观、即时地向开发者展示云开发的相关能力,包括但不限于工具链、SDK、技术文档等。
  同时,为了降低开发者的动手成本,积累行业优秀的实践经验,官网还承载着营造社区氛围、聚合重要信息、提升用户留存的重任。
  我们最初使用 VuePress 作为静态 网站 工具,遇到了一些痛点:
  我们使用“cms Extensions”、“基础云开发能力”、“Next.js”、“CI Tools”很好的解决了上述问题。在实现网站动态内​​容的同时,保证了SEO,运营同学也可以通过cms对内容进行可视化管理。
  安装cms
  进入云开发扩展能力控制台,按照提示安装cms内容管理系统。
  配置分机时,有两种帐号:管理员帐号和操作员帐号。管理员账户具有更高的权限,可以创建新的数据集合;而操作员账号只能对现有数据集进行增删改查操作。
  
  注:安装时间有点长,请耐心等待
  安装成功后,云数据库会自动创建3个合集,分别是tcb-ext-cms-contents, tcb-ext-cms-users, tcb-ext-cms- webhooks ,用于存储cms系统配置信息和内容数据。自动创建了三个云函数,分别是tcb-ext-cms-api、tcb-ext-cms-init、tcb-ext-cms-auth,它们封装了初始化,身份验证和数据流的逻辑。
  进入“Static 网站 Hosting”,可以看到cms系统的静态文件已经自动部署到tcb-cms/目录下:
  
  点击上方的“基本配置”查看域名信息。
  
  在浏览器中访问对应的链接()可以看到cms系统:
  
  至此,无需任何开发成本,cms 内容管理系统正式上线~
  使用 cms 创建动态内容
  对于动态数据内容,我们将其划分为不同的模块。每个内容模块对应一个cms系统的数据集合。例如,在“云开发官网”-“社区页面”中,推荐好课程的内容是动态的。
  
  从图中可以看出,每节课都有多个属性。在云数据库中,每门课程对应一个文档,课程属性对应文档的字段。字段类型及含义如下:
  name: 课程名称
time: 课程时间
cover: 课程封面
url: 课程链接
level: 课程难度
  以管理员身份登录cms系统,在“内容设置页面”新建内容。在cms中,支持多种高级数据类型,如url、image、markdown、富文本、标签数组、邮箱、URL等,这些类型被智能识别,显示更友好。
  注:cms自带图床功能。当数据类型为“图片”时,图片会自动上传到当前云开发环境下的云存储中。图片信息以cloud://开头的特殊链接存储在数据集合中。
  创建新内容时,cms默认会自动填写4个字段:name、order、createTime、updateTime。您可以根据需要删除不需要的字段。
  建议:保留order字段,可用于数据排序。对于运营商来说,数据的订单值越大,在cms系统中显示的位置就越高;对于开发者,可以按照顺序进行排序和搜索。从而保证经验和逻辑的一致性。
  根据字段创建集合后,cms 会在系统左侧看到“推荐课程”。其对应的内容保存在云数据库的recome-course(创建时指定)集合中,其字段信息保存在tcb-ext-cms-contents(cms初始化时创建的云数据库) ) 在集合中。
  
  根据设置添加新的课程内容后,再次进入“推荐课程”,如下图:
  
  图片、链接等内容对运营商更加友好。
  项目建设
  按照 Next.js Docs 的指南创建 Next.js 项目:
  npm i --save next react react-dom axios
  因为我们要部署网站到“静态托管”,所以需要用到Next.js的静态导出功能。package.json 中的打包脚本更新为:
  "scripts": {
"dev": "next",
"build": "next build && next export",
"start": "next start"
}
  为了快速部署静态网站,发布云功能。需要全局安装@cloudbase/cli:
  npm install -g @cloudbase/cli
  安装后,添加两个脚本:
  "scripts": {
"deploy:hosting": "npm run build && cloudbase hosting:deploy out -e jhgjj-0ae4a1",
"deploy:function": "echo y | cloudbase functions:deploy --force"
}
  注意:准备两个云环境,防止静态部署时文件覆盖。envId为jhgjj-0ae4a1的云环境仅用于部署Next.js的静态导出文件。envId为pagecounter-d27cfe的云环境用于部署cms系统。获取cms内容
  借助CloudBase的Node SDK-@cloudbase/node-sdk,我们可以在Next.js的getStaticProps()方法中读取云数据库中的数据。
  为了使逻辑更清晰,我们将获取外部数据的方法封装到单个文件中。以“推荐课程”为例:
  
// provider.js
const cloudbase = require("@cloudbase/node-sdk");
const config = {
secretId: "your secretId", // 前往「腾讯云控制台」-「访问密钥」获取
secretKey: "your secretKey", // 前往「腾讯云控制台」-「访问密钥」获取
env: "your envid" // 前往「腾讯云控制台」-「云开发 CloudBase」获取
};
const app = cloudbase.init(config);
/**
* 获取云数据库数据
*/
async function getCourses() {
const db = app.database();
const result = await db.collection("recommend-course").get();
if (result.code) {
throw new Error(
`获取「推荐课程」失败, 错误码是${result.code}: ${result.message}`
);
}
return result.data.map(item => {
if (item.createTime instanceof Date) {
item.createTime = item.createTime.toLocaleString();
}
if (item.updateTime instanceof Date) {
item.updateTime = item.updateTime.toLocaleString();
}
item.cover = getBucketUrl(item.cover); // 处理云存储的特殊链接
return item;
});
}
  上一篇提到,cms自带图床功能。拖拽上传的图片会保存在同一环境的云存储中,获取图片的链接会保存在采集中。云存储链接是以cloud://开头的特殊链接,需要在前端进行识别和特殊处理。
  例如图片存储链接为:cloud://pagecounter-d27cfe.7061-pagecounter-d27cfe-1255463368/uploads/04.png。把它变成一个可访问的 http 链接:。
  转换思路是:识别出envid背后的信息,与tcb.qcloud.la域名重新拼接:
  
// provider.js
/**
* 获取云存储的访问链接
* @param {String} url 云存储的特定url
*/
function getBucketUrl(url) {
if (!url.startsWith("cloud://")) {
return url;
}
const re = /cloud:\/\/.*?\.(.*?)\/(.*)/;
const result = re.exec(url);
return `https://${result[1]}.tcb.qcloud.la/${result[2]}`;
}
  注意:云存储的“权限设置”应该是:所有用户都可以读,只有创建者和管理员可以写。否则无法访问链接。建议:除了内置的图床功能,开发者可以根据自己的需要使用其他稳定的图床服务,比如微博图床。如果使用其他图片床,对应的字段类型不能设置为“图片”,可以是“字符串”或“超链接”。
  至此,我们已经使用 SDK 获取了云数据库数据,剩下要做的就是将其注入到 Next.js 页面组件的 props 中:
  // pages/index.js
const HomePage = ({ courses }) => {
return (
// 尽情使用数据吧...
)
}
export async function getStaticProps() {
const { getCourses } = require('./../provider')
return {
props: {
courses: await getCourses()
}
}
}
export default HomePage
  打开浏览器输入:3000/,可以看到效果如下:
  
  输入view-source::3000/,可以看到网页的html源码中收录了课程数据,解决了SEO问题:
  
  注意:Next.js 的一些方法会在两端运行,但 getStaticProps() 只会在服务端运行自动构建和部署
  至此,开发工作基本结束。执行npm run build命令,将网站静态文件打包到out/目录下:
  
  运行 npm run deploy:hosting 将 out/ 目录下的文件上传到“static 网站托管”。访问静态网站:托管的链接,效果如下:
  
  借助成熟的 CI 工具,例如 Travis、Circle 等,可以定期触发构建工作。这样,内容和开发就完全分离了。
  在构建版本时,您需要使用 CloudBase CLI 工具。在CI工具中,不使用cloudbase login进行交互式输入登录,而是使用key登录:cloudbase login --apiKeyId $TCB_SECRET_ID --apiKey $TCB_SECRET_KEY。
  注意:去云API key获取TCB_SECRET_ID和TCB_SECRET_KEY的值
  在 CI 工具的控制台中,配置 TCB_SECRET_ID 和 TCB_SECRET_KEY。并向 package.json 添加一个新脚本:
  "scripts": {
"login": "echo N | cloudbase login --apiKeyId $TCB_SECRET_ID --apiKey $TCB_SECRET_KEY"
}
  综上所述,CI构建的过程是:
  如果数据需要紧急修改启动,可以在本地或者在CI工具控制台手动触发构建。
  最后
  借助云开发cms,可以实现评论系统、预约系统、博客发帖等多种内容模板,从而快速搭建网站。在现有的开发体系下,合理使用云开发,大大降低了人工成本、开发成本、运维成本。实现前后端穿梭,形成“闭环”。
  本文实战只是开始,涉及到部分云开发能力,还有更多好玩的东西等你去探索,比如用云功能实现SSR、托管后端服务、图片服务,以及各方面的 SDK。
  探索功能、多样化想法并以较低的成本开发高度可用的 Web 服务。云开发绝对是您的最佳选择! 查看全部

  js提取指定网站内容(作者简介董沅鑫,云开发CloudBase团队研发工程师,侧重于出没在)
  关于作者
  云开发CloudBase团队研发工程师董元新,专注于前端工程和节点服务开发,业余时间经常光顾。
  这篇文章的内容
  
  介绍
  随着腾讯云开发能力的逐步提升,经验丰富的工程师已经可以独立完成产品的开发和上线。但是,与在线云开发相关的实战实战很少文章。很多开发者都知道云开发的能力,但不知道在现有的开发体系下如何引入云开发。
  
  本文从云开发团队开发者+能力用户的角度,以搭建云开发官网的思路()为例,结合流行的框架和工具分享云开发的实践经验。
  涉及的知识点有:
  概述
  系统设计图:
  
  背景介绍
  随着云开发团队业务的快速发展,团队需要一个官网来更直观、即时地向开发者展示云开发的相关能力,包括但不限于工具链、SDK、技术文档等。
  同时,为了降低开发者的动手成本,积累行业优秀的实践经验,官网还承载着营造社区氛围、聚合重要信息、提升用户留存的重任。
  我们最初使用 VuePress 作为静态 网站 工具,遇到了一些痛点:
  我们使用“cms Extensions”、“基础云开发能力”、“Next.js”、“CI Tools”很好的解决了上述问题。在实现网站动态内​​容的同时,保证了SEO,运营同学也可以通过cms对内容进行可视化管理。
  安装cms
  进入云开发扩展能力控制台,按照提示安装cms内容管理系统。
  配置分机时,有两种帐号:管理员帐号和操作员帐号。管理员账户具有更高的权限,可以创建新的数据集合;而操作员账号只能对现有数据集进行增删改查操作。
  
  注:安装时间有点长,请耐心等待
  安装成功后,云数据库会自动创建3个合集,分别是tcb-ext-cms-contents, tcb-ext-cms-users, tcb-ext-cms- webhooks ,用于存储cms系统配置信息和内容数据。自动创建了三个云函数,分别是tcb-ext-cms-api、tcb-ext-cms-init、tcb-ext-cms-auth,它们封装了初始化,身份验证和数据流的逻辑。
  进入“Static 网站 Hosting”,可以看到cms系统的静态文件已经自动部署到tcb-cms/目录下:
  
  点击上方的“基本配置”查看域名信息。
  
  在浏览器中访问对应的链接()可以看到cms系统:
  
  至此,无需任何开发成本,cms 内容管理系统正式上线~
  使用 cms 创建动态内容
  对于动态数据内容,我们将其划分为不同的模块。每个内容模块对应一个cms系统的数据集合。例如,在“云开发官网”-“社区页面”中,推荐好课程的内容是动态的。
  
  从图中可以看出,每节课都有多个属性。在云数据库中,每门课程对应一个文档,课程属性对应文档的字段。字段类型及含义如下:
  name: 课程名称
time: 课程时间
cover: 课程封面
url: 课程链接
level: 课程难度
  以管理员身份登录cms系统,在“内容设置页面”新建内容。在cms中,支持多种高级数据类型,如url、image、markdown、富文本、标签数组、邮箱、URL等,这些类型被智能识别,显示更友好。
  注:cms自带图床功能。当数据类型为“图片”时,图片会自动上传到当前云开发环境下的云存储中。图片信息以cloud://开头的特殊链接存储在数据集合中。
  创建新内容时,cms默认会自动填写4个字段:name、order、createTime、updateTime。您可以根据需要删除不需要的字段。
  建议:保留order字段,可用于数据排序。对于运营商来说,数据的订单值越大,在cms系统中显示的位置就越高;对于开发者,可以按照顺序进行排序和搜索。从而保证经验和逻辑的一致性。
  根据字段创建集合后,cms 会在系统左侧看到“推荐课程”。其对应的内容保存在云数据库的recome-course(创建时指定)集合中,其字段信息保存在tcb-ext-cms-contents(cms初始化时创建的云数据库) ) 在集合中。
  
  根据设置添加新的课程内容后,再次进入“推荐课程”,如下图:
  
  图片、链接等内容对运营商更加友好。
  项目建设
  按照 Next.js Docs 的指南创建 Next.js 项目:
  npm i --save next react react-dom axios
  因为我们要部署网站到“静态托管”,所以需要用到Next.js的静态导出功能。package.json 中的打包脚本更新为:
  "scripts": {
"dev": "next",
"build": "next build && next export",
"start": "next start"
}
  为了快速部署静态网站,发布云功能。需要全局安装@cloudbase/cli:
  npm install -g @cloudbase/cli
  安装后,添加两个脚本:
  "scripts": {
"deploy:hosting": "npm run build && cloudbase hosting:deploy out -e jhgjj-0ae4a1",
"deploy:function": "echo y | cloudbase functions:deploy --force"
}
  注意:准备两个云环境,防止静态部署时文件覆盖。envId为jhgjj-0ae4a1的云环境仅用于部署Next.js的静态导出文件。envId为pagecounter-d27cfe的云环境用于部署cms系统。获取cms内容
  借助CloudBase的Node SDK-@cloudbase/node-sdk,我们可以在Next.js的getStaticProps()方法中读取云数据库中的数据。
  为了使逻辑更清晰,我们将获取外部数据的方法封装到单个文件中。以“推荐课程”为例:
  
// provider.js
const cloudbase = require("@cloudbase/node-sdk");
const config = {
secretId: "your secretId", // 前往「腾讯云控制台」-「访问密钥」获取
secretKey: "your secretKey", // 前往「腾讯云控制台」-「访问密钥」获取
env: "your envid" // 前往「腾讯云控制台」-「云开发 CloudBase」获取
};
const app = cloudbase.init(config);
/**
* 获取云数据库数据
*/
async function getCourses() {
const db = app.database();
const result = await db.collection("recommend-course").get();
if (result.code) {
throw new Error(
`获取「推荐课程」失败, 错误码是${result.code}: ${result.message}`
);
}
return result.data.map(item => {
if (item.createTime instanceof Date) {
item.createTime = item.createTime.toLocaleString();
}
if (item.updateTime instanceof Date) {
item.updateTime = item.updateTime.toLocaleString();
}
item.cover = getBucketUrl(item.cover); // 处理云存储的特殊链接
return item;
});
}
  上一篇提到,cms自带图床功能。拖拽上传的图片会保存在同一环境的云存储中,获取图片的链接会保存在采集中。云存储链接是以cloud://开头的特殊链接,需要在前端进行识别和特殊处理。
  例如图片存储链接为:cloud://pagecounter-d27cfe.7061-pagecounter-d27cfe-1255463368/uploads/04.png。把它变成一个可访问的 http 链接:。
  转换思路是:识别出envid背后的信息,与tcb.qcloud.la域名重新拼接:
  
// provider.js
/**
* 获取云存储的访问链接
* @param {String} url 云存储的特定url
*/
function getBucketUrl(url) {
if (!url.startsWith("cloud://")) {
return url;
}
const re = /cloud:\/\/.*?\.(.*?)\/(.*)/;
const result = re.exec(url);
return `https://${result[1]}.tcb.qcloud.la/${result[2]}`;
}
  注意:云存储的“权限设置”应该是:所有用户都可以读,只有创建者和管理员可以写。否则无法访问链接。建议:除了内置的图床功能,开发者可以根据自己的需要使用其他稳定的图床服务,比如微博图床。如果使用其他图片床,对应的字段类型不能设置为“图片”,可以是“字符串”或“超链接”。
  至此,我们已经使用 SDK 获取了云数据库数据,剩下要做的就是将其注入到 Next.js 页面组件的 props 中:
  // pages/index.js
const HomePage = ({ courses }) => {
return (
// 尽情使用数据吧...
)
}
export async function getStaticProps() {
const { getCourses } = require('./../provider')
return {
props: {
courses: await getCourses()
}
}
}
export default HomePage
  打开浏览器输入:3000/,可以看到效果如下:
  
  输入view-source::3000/,可以看到网页的html源码中收录了课程数据,解决了SEO问题:
  
  注意:Next.js 的一些方法会在两端运行,但 getStaticProps() 只会在服务端运行自动构建和部署
  至此,开发工作基本结束。执行npm run build命令,将网站静态文件打包到out/目录下:
  
  运行 npm run deploy:hosting 将 out/ 目录下的文件上传到“static 网站托管”。访问静态网站:托管的链接,效果如下:
  
  借助成熟的 CI 工具,例如 Travis、Circle 等,可以定期触发构建工作。这样,内容和开发就完全分离了。
  在构建版本时,您需要使用 CloudBase CLI 工具。在CI工具中,不使用cloudbase login进行交互式输入登录,而是使用key登录:cloudbase login --apiKeyId $TCB_SECRET_ID --apiKey $TCB_SECRET_KEY。
  注意:去云API key获取TCB_SECRET_ID和TCB_SECRET_KEY的值
  在 CI 工具的控制台中,配置 TCB_SECRET_ID 和 TCB_SECRET_KEY。并向 package.json 添加一个新脚本:
  "scripts": {
"login": "echo N | cloudbase login --apiKeyId $TCB_SECRET_ID --apiKey $TCB_SECRET_KEY"
}
  综上所述,CI构建的过程是:
  如果数据需要紧急修改启动,可以在本地或者在CI工具控制台手动触发构建。
  最后
  借助云开发cms,可以实现评论系统、预约系统、博客发帖等多种内容模板,从而快速搭建网站。在现有的开发体系下,合理使用云开发,大大降低了人工成本、开发成本、运维成本。实现前后端穿梭,形成“闭环”。
  本文实战只是开始,涉及到部分云开发能力,还有更多好玩的东西等你去探索,比如用云功能实现SSR、托管后端服务、图片服务,以及各方面的 SDK。
  探索功能、多样化想法并以较低的成本开发高度可用的 Web 服务。云开发绝对是您的最佳选择!

js提取指定网站内容(window.getSelection.execCommand教程 )

网站优化优采云 发表了文章 • 0 个评论 • 199 次浏览 • 2021-10-15 10:03 • 来自相关话题

  js提取指定网站内容(window.getSelection.execCommand教程
)
  如果只是简单的获取页面上复制的内容,可以使用window.getSelection()获取选中的内容,只需执行复制操作,但是如果要修改复制的内容,可以先获取要复制的内容复制然后使用文档 .execCommand("copy") 事件(document.execCommand 方法允许运行命令来操作可编辑区域的元素)。
  获取复制的内容
  配合copy事件获取
  获取的内容是一个 Selection 对象。如果要将所选内容转换为字符串,可以连接一个空字符串 ("") 或使用该方法。
  document.addEventListener('copy', function() {
var content = window.getSelection().toString();
console.log(content )
})
  通过键盘事件获取
  document.addEventListener('keyup', function(e) {
if(e.ctrlKey && e.keyCode == "67") {
var content = window.getSelection().toString();
alert(content)
}
})
  获取复制的内容并修改
  text


var btn=document.querySelector(".btn");
btn.onclick=function(){
var text=document.getElementById("text");
text.value+='我是已经复制的文本';//给复制的内容添加一段文字
text.select(); //选中复制的内容
document.execCommand("copy");//执行浏览器复制命令
alert("已复制好,可贴粘。");
} 查看全部

  js提取指定网站内容(window.getSelection.execCommand教程
)
  如果只是简单的获取页面上复制的内容,可以使用window.getSelection()获取选中的内容,只需执行复制操作,但是如果要修改复制的内容,可以先获取要复制的内容复制然后使用文档 .execCommand("copy") 事件(document.execCommand 方法允许运行命令来操作可编辑区域的元素)。
  获取复制的内容
  配合copy事件获取
  获取的内容是一个 Selection 对象。如果要将所选内容转换为字符串,可以连接一个空字符串 ("") 或使用该方法。
  document.addEventListener('copy', function() {
var content = window.getSelection().toString();
console.log(content )
})
  通过键盘事件获取
  document.addEventListener('keyup', function(e) {
if(e.ctrlKey && e.keyCode == "67") {
var content = window.getSelection().toString();
alert(content)
}
})
  获取复制的内容并修改
  text


var btn=document.querySelector(".btn");
btn.onclick=function(){
var text=document.getElementById("text");
text.value+='我是已经复制的文本';//给复制的内容添加一段文字
text.select(); //选中复制的内容
document.execCommand("copy");//执行浏览器复制命令
alert("已复制好,可贴粘。");
}

js提取指定网站内容(新浪微博中模拟抓取网页内容采集网页的内容说明(图))

网站优化优采云 发表了文章 • 0 个评论 • 119 次浏览 • 2021-10-11 17:41 • 来自相关话题

  js提取指定网站内容(新浪微博中模拟抓取网页内容采集网页的内容说明(图))
  运行程序,自动调用火狐浏览器登录微博。注:手机端信息更加精致简洁,动态加载没有限制。但是,如果微博或粉丝ID只显示20页,这是它的缺点;虽然客户端可能有动态加载,比如评论、微博,但是它的信息更完整。注:输入:明星用户id列表,使用URL用户id访问(这些id可以从用户的关注列表中获取) SinaWeibo_List_best_1.txt 输出:微博信息和用户基本信息 SinaWeibo_Info_best_1. txtMegry_Result_Best.py 这个文件用户整理了某天的用户微博信息,比如抓取2018年4月23日的客户端信息,但是评论是动态加载的,还在研究中 weibo_spider< 查看全部

  js提取指定网站内容(新浪微博中模拟抓取网页内容采集网页的内容说明(图))
  运行程序,自动调用火狐浏览器登录微博。注:手机端信息更加精致简洁,动态加载没有限制。但是,如果微博或粉丝ID只显示20页,这是它的缺点;虽然客户端可能有动态加载,比如评论、微博,但是它的信息更完整。注:输入:明星用户id列表,使用URL用户id访问(这些id可以从用户的关注列表中获取) SinaWeibo_List_best_1.txt 输出:微博信息和用户基本信息 SinaWeibo_Info_best_1. txtMegry_Result_Best.py 这个文件用户整理了某天的用户微博信息,比如抓取2018年4月23日的客户端信息,但是评论是动态加载的,还在研究中 weibo_spider<

js提取指定网站内容(javascript开发者使用的日志打印调试都是console.log)

网站优化优采云 发表了文章 • 0 个评论 • 84 次浏览 • 2021-10-07 09:21 • 来自相关话题

  js提取指定网站内容(javascript开发者使用的日志打印调试都是console.log)
  几乎所有 JavaScript 开发人员最常用的日志打印和调试 API 是 console.log()。事实上,有很多选择可供我们选择。下面笔者将一一介绍。
  一、console.table()
  console.table() 是我强烈推荐你使用的方法。它可以接受 JSON 或数组并以表格格式打印它们。可视化打印json对象和数组时使用方便,结果直观。
  比如下面的json数据对象是使用console.table()打印出来的
   console.table({
"id":"1",
"key":"value",
"count":2
});
复制代码
  控制台的输出如下:
  
  另一个示例是在以下代码中打印数组:
   console.table([
{
id: "1",
key: "value",
count: 2,
},
{
id: "2",
key: "value2",
count: 22,
},
{
id: "3",
key: "value3",
count: 5,
},
]);
复制代码
  控制台的输出如下:
  
  二、console.error()
  console.error() 比 console.log() 更有助于在调试时区分错误信息和输出日志
  
  从上图可以看出,它的输出打印结果是红色的。
  三、时间(时间,时间日志,时间结束)
  console.time()、console.timeLog()、console.timeEnd()这三个方法在我们计时程序运行时间时特别有用。
  参考下图了解这三种方法
  
  console.time("ForLoop");
// "ForLoop" is label here
for (let i = 0; i < 5; i++) {
console.timeLog('ForLoop');
}
console.timeEnd("ForLoop");
复制代码
  控制台打印出结果
  
  四、console.warn()
  使用黄色字体输出日志,更直观方便查看告警日志信息。
  五、console.assert()
  console.assert(assert_statement,message) 用于设置断言,如果为false,则显示消息
  if(3!=2){
console.error({ msg1: "msg1", msg2: "msg2" });
}
//上面的日志判断语句,可以简写为下面的断言
console.assert(3 === 2, { msg1: "msg1", msg2: "msg2" });
复制代码
  
  另一种可用于格式化输出的断言方法 console.assert(assert_statement, message, args)
  console.assert(false, "%d nd type for %s ",2,"console.assert() method");
复制代码
  
  六、console.count()
  console.count() 特别适用于计数。可以传递参数,可以根据参数标签统计次数。代码显示如下:
   for (let i = 0; i < 3; i++) {
console.count("label");
console.count();
console.count(i);
}
复制代码
  控制台打印输出的结果类似如下
   console.count() console.count("label") console.count(i)
default: 1 label: 1 0: 1
default: 2 label: 2 1: 1
default: 3 label: 3 2: 1
复制代码
  欢迎关注我的博客,精品采集很多
  如果你觉得对你有帮助,请给我点赞和分享!您的支持是我创作的不竭动力!. 另外,作者最近输出了以下优质内容,期待大家的关注。 查看全部

  js提取指定网站内容(javascript开发者使用的日志打印调试都是console.log)
  几乎所有 JavaScript 开发人员最常用的日志打印和调试 API 是 console.log()。事实上,有很多选择可供我们选择。下面笔者将一一介绍。
  一、console.table()
  console.table() 是我强烈推荐你使用的方法。它可以接受 JSON 或数组并以表格格式打印它们。可视化打印json对象和数组时使用方便,结果直观。
  比如下面的json数据对象是使用console.table()打印出来的
   console.table({
"id":"1",
"key":"value",
"count":2
});
复制代码
  控制台的输出如下:
  
  另一个示例是在以下代码中打印数组:
   console.table([
{
id: "1",
key: "value",
count: 2,
},
{
id: "2",
key: "value2",
count: 22,
},
{
id: "3",
key: "value3",
count: 5,
},
]);
复制代码
  控制台的输出如下:
  
  二、console.error()
  console.error() 比 console.log() 更有助于在调试时区分错误信息和输出日志
  
  从上图可以看出,它的输出打印结果是红色的。
  三、时间(时间,时间日志,时间结束)
  console.time()、console.timeLog()、console.timeEnd()这三个方法在我们计时程序运行时间时特别有用。
  参考下图了解这三种方法
  
  console.time("ForLoop");
// "ForLoop" is label here
for (let i = 0; i < 5; i++) {
console.timeLog('ForLoop');
}
console.timeEnd("ForLoop");
复制代码
  控制台打印出结果
  
  四、console.warn()
  使用黄色字体输出日志,更直观方便查看告警日志信息。
  五、console.assert()
  console.assert(assert_statement,message) 用于设置断言,如果为false,则显示消息
  if(3!=2){
console.error({ msg1: "msg1", msg2: "msg2" });
}
//上面的日志判断语句,可以简写为下面的断言
console.assert(3 === 2, { msg1: "msg1", msg2: "msg2" });
复制代码
  
  另一种可用于格式化输出的断言方法 console.assert(assert_statement, message, args)
  console.assert(false, "%d nd type for %s ",2,"console.assert() method");
复制代码
  
  六、console.count()
  console.count() 特别适用于计数。可以传递参数,可以根据参数标签统计次数。代码显示如下:
   for (let i = 0; i < 3; i++) {
console.count("label");
console.count();
console.count(i);
}
复制代码
  控制台打印输出的结果类似如下
   console.count() console.count("label") console.count(i)
default: 1 label: 1 0: 1
default: 2 label: 2 1: 1
default: 3 label: 3 2: 1
复制代码
  欢迎关注我的博客,精品采集很多
  如果你觉得对你有帮助,请给我点赞和分享!您的支持是我创作的不竭动力!. 另外,作者最近输出了以下优质内容,期待大家的关注。

js提取指定网站内容(基于PHP的CMS移植到基于JavaScript的静态网站时会)

网站优化优采云 发表了文章 • 0 个评论 • 472 次浏览 • 2021-10-07 09:19 • 来自相关话题

  js提取指定网站内容(基于PHP的CMS移植到基于JavaScript的静态网站时会)
  今年年初,我终于决定将我的网站从基于PHP的cms迁移到基于JavaScript的静态网站生成器(SSG)。原因如下:
  虽然我一开始是一个“全栈”的开发者,但现在我只负责前端工作:如果我需要编写自定义函数,那么我不想编写可以使用 PHP 用 Ja​​vaScript 编写的代码。我不需要抽象层,也不需要cms的复杂性——我最喜欢在markdown文件中写内容,我希望我再也不要碰Mysql数据库或所见即所得的编辑器。我想提高 网站 的性能:静态 HTML 文件在 99% 的情况下比动态页面快。最后,还有成本优势:LAMP 堆栈服务器必须按月付费;Netlify 的免费套餐(每月构建 300 分钟)应该可以轻松满足零成本个人博客的需求。
  当我决定使用静态站点生成器和 JavaScript(不包括 Jekyll 和 Hugo)时,只有两种截然不同的选择。
  “我听说盖茨比很管用”
  根据官方 网站 的声明,“Gatsby 是一个基于 React 的免费开源框架,可以帮助开发者快速构建网站 和应用程序”。它有一个 GraphQL 支持的数据层,并将所有内容输出到静态文件,让您几乎可以在任何地方托管它。
  当我第一次听说我可以编写 React 并使用这个很酷的新 GraphQL 小工具,同时仍然能够输出不需要 JavaScript 的静态页面时,我想尝试一下。我是这样认为的:“这听起来像是增量增强,但不需要太多投资。” 不幸的是,就像大多数听起来太美的东西一样,经过一番调查,我发现它是一个坑。当用户第一次访问 Gatsby 网站 时会发生这些事情:
  用户请求一个页面。服务器将静态生成的 HTML 文档发送到用户的浏览器,然后浏览器开始呈现页面。HTML 文档到达后,JavaScript 包(包括 React 库和其他渲染页面所需的 JavaScript)开始在后台下载、解析和编译。JavaScript 已准备好运行——整个 DOM 通过 React 组件“水化”。
  这里有问题——Gatsby 要求你以 React 组件的形式再次加载页面;在完成此额外步骤之前,所有需要 JavaScript 的元素(例如按钮、菜单和自定义输入)实际上都无法进行交互。
  即使你的 网站 没有任何交互元素(除了链接,即使没有 Gatsby 也不需要 JavaScript 才能工作),你的用户也必须下载这部分 JavaScript,只是为了转移你的 网站 成为单页应用程序(SPA);SPA 有其自身的不足,我们稍后再谈。
  这个额外的操作似乎违背了我转向SSG(提高页面速度)的初衷。华丽的 Gatsby 网站 在 2000 美元的 MacBook 上可能很快,但对于有 3G 连接和廉价智能手机的用户来说,它表明它可以显示,但没有任何反应;用户等待加载 JavaScript 的过程持续 15 秒。电池和数据流量也必须下降。
  如果浏览器需要解析296kb的JavaScript代码来显示博客列表文章,这不是“渐进增强”,而是错误的工具。从网站 /Web应用程序的一般区别来看,React是用来构建Web应用程序的,需要有一个交互式的UI来响应用户输入或实时获取数据;而博客只是一个 网站 就是这样。
  单页应用程序的可访问性
  单页应用网站摒弃了传统的Web导航方式,通过加载新的HTML文档来加载新的内容;相反,它使用 AJAX 和 History API 等 JavaScript 功能来切换到新内容。, 不触发页面加载。它的目标是提高感知性能并使 网站 看起来更像“原生”应用程序(从应用程序商店下载的那种)。不再需要重新加载整页的问题在于浏览器和辅助技术使用页面加载作为触发某些有用行为的信号,包括宣布新页面的标题或将键盘焦点重置到文档的开头。
  如果您正在开发一个专注于可访问性的单页应用程序,那么您可能会尝试使用 JavaScript 来模拟浏览器行为。Gatsby 试图通过收录一个 RouteAnnouncer 组件来为您解决这个问题。它使用 ARIA 实时区域来宣布页面的标题或 h1,以提示屏幕阅读器软件的用户跳转到该页面。但是这种方法也存在问题:在配置和本地化方面还有很多未解决的问题。
  我们已经看到单页应用在导航方面存在固有的可访问性问题,但需要注意的是,使用前端框架也会带来其他方面的可访问性问题。在 2020 年 2 月对 100 万个主页的调查中,WebAIM 发现使用 React 的网页的可访问性错误比平均水平高 5.7%;而使用 Vue 的网页要高出 25%。这并不一定意味着框架会导致这些错误,但更多的 JavaScript 和更差的可访问性之间存在很强的相关性。
  博客真的需要 JavaScript 吗?
  您构建的第一个网页的性能很可能会比之后构建的许多页面要好得多——它由一个 HTML 文件和一些 CSS 组成,可能还有一些未优化的图像,但它们不会阻止页面加载。如果您有和我一样的经验,那么从您开始添加 JavaScript 的那一刻起,您的网页性能就会开始急剧下降。并非所有字节都相同:与解析、编译和执行相同大小的 JavaScript 文件所需的时间相比,解码图像并将其渲染到屏幕所需的时间要少得多。
  JavaScript 是一种强大的语言,可以完成一些令人难以置信的事情,但您很容易在开发过程中过早地开始使用它。其实HTML和CSS就够了。您应该查看功能最少的原则:在充分利用功能较弱的语言 (HTML) 之前,不要使用功能更强大的语言 (JavaScript)。在我看来,将博客变成 JavaScript 单页应用程序会带来不必要的复杂性。
  这个 文章 不是为了批评盖茨比而写的。背后有一些聪明人,他们已经承认了本文提到的许多问题,并试图解决它们。静态渲染和水合页面仍然比完全客户端渲染的 React 应用程序(例如 create-react-app 生成的页面)要好得多,后者在没有 JavaScript 的情况下无法使用。我对盖茨比的宣传方式真的很不满意。他们说 Gatsby 适合任何类型的 网站。客户端 JavaScript 是有成本的,开发人员应该意识到这一点。
  用更少的 JavaScript 构建 Gatsby 网站
  这让我陷入了两难境地:使用 Gatsby 开发 网站 是一种美妙的体验;但开发体验 (DX) 应始终排在用户体验 (UX) 之后。那么如何避免在构建 Gatsby 网站 时大量使用 JS 带来的固有问题呢?当然,我们应该尝试删除那些 JavaScript。幸运的是,Gatsby 社区已经做了很多努力来构建一个更轻量级的 网站:
  首先,使用 gatsby-plugin-preact 用 Preact 替换 React 可以节省几千字节。我在组件库中使用了它,并立即将 JavaScript 负载减少了大约 30kb。
  如果您想要更激进的方法,可以使用插件从 Gatsby 网站 中删除所有 Gatsby JavaScript。
  您可以继续编写 React 组件和 GraphQL,甚至可以使用 CSS-in-JS 库(只要它输出 CSS 或内联样式),而无需向浏览器发送任何 JavaScript。Gatsby 的大部分问题都可以通过丢弃所有客户端 JavaScript 来解决。Gatsby Starter Low Tech 博客使用无 JavaScript 插件和其他技术(包括将所有图像转换为灰度)来帮助您创建一个轻量级且节能的博客。
  从零开始
  这时候感觉有点不对劲——使用了一个框架,推送了大量的客户端JavaScript,却删除了所有的JavaScript代码。这似乎是一个非常复杂的网站构造方法。我想看看我是否可以在没有客户端JavaScript的情况下构建一个功能齐全的博客,所以我不需要任何插件来删除它。所以我转向了另一个选择:
  Eleventy 鼓励您按照自己的意愿构建 网站。您可以使用您最熟悉的技术,它只负责生成页面。Eleventy 为您提供了十种模板语言选项,可以任意搭配,包括markdown、nunjucks 和liquid;这意味着我可以从 Craft 复制和粘贴旧模板,更改文件扩展名,并进行一些小的调整。运行于十一。不需要为任何新打包器调整前端构建过程,我只需要放入现有的 webpack 文件和 src 文件夹。使用并发包,我可以在 Eleventy 的服务过程中同时运行构建脚本。
  和 Gatsby 一样,Eleventy 也有一个插件生态系统(虽然很小,但增长很快)。我选择了一些可以在不添加客户端 JavaScript 的情况下添加功能的插件:
  当代码片段显示在帖子中时,它通常包括特定于语言的语法突出显示。有一些 JavaScript 库可以做到这一点,最流行的似乎是 Prism——你可以在客户端运行它,但由于我们使用的是 JavaScript SSG,我们可以在构建时运行它并突出显示语法 HTML 元素和 CSS显示所需的类直接烘焙到文档中——因此无需在浏览器中下载库。
  11-plugin-embed-tweet 也可以在构建时而不是在客户端运行 JavaScript。Twitter 的默认嵌入代码强制用户下载大量 JavaScript 以显示推文。该插件可以在构建时获取和渲染推文,因此只需要少量的 HTML 和 CSS,完全不需要额外的 JavaScript。
  与其他新技术一样,Eleventy 缺少一些更成熟的工具提供的功能。例如,在 Eleventy 中没有优雅的方式来生成响应式图像。相比之下,Gatsby 中优秀的 gatsby-image 插件可以生成延迟加载和响应式图像元素,加载全分辨率文件后可以在低分辨率或 SVG 版本的图像之间平滑切换。Eleventry还有一个让我困惑的地方:我有段时间没了解它的分页功能,以为它只是把帖子分页成指定大小的组,然后意识到它可以动态生成全新的页面;我还发现自己在同一个文件中混用了模板语言:可以随意在markdown文件中收录nunjucks标签,或者用JavaScript替换基于yaml的frontmatter,
  综上所述
  如果你仍然选择 Gatsby,我不会责怪你——有时使用自以为是的框架是好的,如果你想快速完成工作,这是一个可靠的解决方案。只需注意其性能成本以及与 JavaScript 相关的所有潜在可访问性问题。
  我选择用Eleventy来搭建自己的网站,但我知道这种方法并不适合所有人——完全按照自己的意愿来搭建可能会很麻烦。但是你不需要完全向我学习——和 Gatsby 类似,Eleventy 也有很多可以作为基础的入门项目。其中一些工具,例如 Andy Bell 的 Hylia 入门套件,可以在几分钟内获得一个 网站。它甚至预配置了 Netlify cms,因此您无需编写任何代码即可编辑 网站 的内容。
  我学到了什么?使用 Eleventy 无需 JavaScript 即可轻松构建博客,但总会有一些功能需要客户端 JavaScript:
  我会在不久的将来将 JavaScript 添加到 网站 吗?答案可能是否定的:我上面列出的功能并不那么重要。我不建议大家删除你网站上的所有JavaScript文件,但是从现在开始,在构建网站的时候,我会尽量把JavaScript当作一个可选的额外功能,而不是基本的体验组件。我鼓励你也这样做。
  关注我转发这篇文章文章,私信我“接收信息”,即可免费获得价值4999元的InfoQ迷你书! 查看全部

  js提取指定网站内容(基于PHP的CMS移植到基于JavaScript的静态网站时会)
  今年年初,我终于决定将我的网站从基于PHP的cms迁移到基于JavaScript的静态网站生成器(SSG)。原因如下:
  虽然我一开始是一个“全栈”的开发者,但现在我只负责前端工作:如果我需要编写自定义函数,那么我不想编写可以使用 PHP 用 Ja​​vaScript 编写的代码。我不需要抽象层,也不需要cms的复杂性——我最喜欢在markdown文件中写内容,我希望我再也不要碰Mysql数据库或所见即所得的编辑器。我想提高 网站 的性能:静态 HTML 文件在 99% 的情况下比动态页面快。最后,还有成本优势:LAMP 堆栈服务器必须按月付费;Netlify 的免费套餐(每月构建 300 分钟)应该可以轻松满足零成本个人博客的需求。
  当我决定使用静态站点生成器和 JavaScript(不包括 Jekyll 和 Hugo)时,只有两种截然不同的选择。
  “我听说盖茨比很管用”
  根据官方 网站 的声明,“Gatsby 是一个基于 React 的免费开源框架,可以帮助开发者快速构建网站 和应用程序”。它有一个 GraphQL 支持的数据层,并将所有内容输出到静态文件,让您几乎可以在任何地方托管它。
  当我第一次听说我可以编写 React 并使用这个很酷的新 GraphQL 小工具,同时仍然能够输出不需要 JavaScript 的静态页面时,我想尝试一下。我是这样认为的:“这听起来像是增量增强,但不需要太多投资。” 不幸的是,就像大多数听起来太美的东西一样,经过一番调查,我发现它是一个坑。当用户第一次访问 Gatsby 网站 时会发生这些事情:
  用户请求一个页面。服务器将静态生成的 HTML 文档发送到用户的浏览器,然后浏览器开始呈现页面。HTML 文档到达后,JavaScript 包(包括 React 库和其他渲染页面所需的 JavaScript)开始在后台下载、解析和编译。JavaScript 已准备好运行——整个 DOM 通过 React 组件“水化”。
  这里有问题——Gatsby 要求你以 React 组件的形式再次加载页面;在完成此额外步骤之前,所有需要 JavaScript 的元素(例如按钮、菜单和自定义输入)实际上都无法进行交互。
  即使你的 网站 没有任何交互元素(除了链接,即使没有 Gatsby 也不需要 JavaScript 才能工作),你的用户也必须下载这部分 JavaScript,只是为了转移你的 网站 成为单页应用程序(SPA);SPA 有其自身的不足,我们稍后再谈。
  这个额外的操作似乎违背了我转向SSG(提高页面速度)的初衷。华丽的 Gatsby 网站 在 2000 美元的 MacBook 上可能很快,但对于有 3G 连接和廉价智能手机的用户来说,它表明它可以显示,但没有任何反应;用户等待加载 JavaScript 的过程持续 15 秒。电池和数据流量也必须下降。
  如果浏览器需要解析296kb的JavaScript代码来显示博客列表文章,这不是“渐进增强”,而是错误的工具。从网站 /Web应用程序的一般区别来看,React是用来构建Web应用程序的,需要有一个交互式的UI来响应用户输入或实时获取数据;而博客只是一个 网站 就是这样。
  单页应用程序的可访问性
  单页应用网站摒弃了传统的Web导航方式,通过加载新的HTML文档来加载新的内容;相反,它使用 AJAX 和 History API 等 JavaScript 功能来切换到新内容。, 不触发页面加载。它的目标是提高感知性能并使 网站 看起来更像“原生”应用程序(从应用程序商店下载的那种)。不再需要重新加载整页的问题在于浏览器和辅助技术使用页面加载作为触发某些有用行为的信号,包括宣布新页面的标题或将键盘焦点重置到文档的开头。
  如果您正在开发一个专注于可访问性的单页应用程序,那么您可能会尝试使用 JavaScript 来模拟浏览器行为。Gatsby 试图通过收录一个 RouteAnnouncer 组件来为您解决这个问题。它使用 ARIA 实时区域来宣布页面的标题或 h1,以提示屏幕阅读器软件的用户跳转到该页面。但是这种方法也存在问题:在配置和本地化方面还有很多未解决的问题。
  我们已经看到单页应用在导航方面存在固有的可访问性问题,但需要注意的是,使用前端框架也会带来其他方面的可访问性问题。在 2020 年 2 月对 100 万个主页的调查中,WebAIM 发现使用 React 的网页的可访问性错误比平均水平高 5.7%;而使用 Vue 的网页要高出 25%。这并不一定意味着框架会导致这些错误,但更多的 JavaScript 和更差的可访问性之间存在很强的相关性。
  博客真的需要 JavaScript 吗?
  您构建的第一个网页的性能很可能会比之后构建的许多页面要好得多——它由一个 HTML 文件和一些 CSS 组成,可能还有一些未优化的图像,但它们不会阻止页面加载。如果您有和我一样的经验,那么从您开始添加 JavaScript 的那一刻起,您的网页性能就会开始急剧下降。并非所有字节都相同:与解析、编译和执行相同大小的 JavaScript 文件所需的时间相比,解码图像并将其渲染到屏幕所需的时间要少得多。
  JavaScript 是一种强大的语言,可以完成一些令人难以置信的事情,但您很容易在开发过程中过早地开始使用它。其实HTML和CSS就够了。您应该查看功能最少的原则:在充分利用功能较弱的语言 (HTML) 之前,不要使用功能更强大的语言 (JavaScript)。在我看来,将博客变成 JavaScript 单页应用程序会带来不必要的复杂性。
  这个 文章 不是为了批评盖茨比而写的。背后有一些聪明人,他们已经承认了本文提到的许多问题,并试图解决它们。静态渲染和水合页面仍然比完全客户端渲染的 React 应用程序(例如 create-react-app 生成的页面)要好得多,后者在没有 JavaScript 的情况下无法使用。我对盖茨比的宣传方式真的很不满意。他们说 Gatsby 适合任何类型的 网站。客户端 JavaScript 是有成本的,开发人员应该意识到这一点。
  用更少的 JavaScript 构建 Gatsby 网站
  这让我陷入了两难境地:使用 Gatsby 开发 网站 是一种美妙的体验;但开发体验 (DX) 应始终排在用户体验 (UX) 之后。那么如何避免在构建 Gatsby 网站 时大量使用 JS 带来的固有问题呢?当然,我们应该尝试删除那些 JavaScript。幸运的是,Gatsby 社区已经做了很多努力来构建一个更轻量级的 网站:
  首先,使用 gatsby-plugin-preact 用 Preact 替换 React 可以节省几千字节。我在组件库中使用了它,并立即将 JavaScript 负载减少了大约 30kb。
  如果您想要更激进的方法,可以使用插件从 Gatsby 网站 中删除所有 Gatsby JavaScript。
  您可以继续编写 React 组件和 GraphQL,甚至可以使用 CSS-in-JS 库(只要它输出 CSS 或内联样式),而无需向浏览器发送任何 JavaScript。Gatsby 的大部分问题都可以通过丢弃所有客户端 JavaScript 来解决。Gatsby Starter Low Tech 博客使用无 JavaScript 插件和其他技术(包括将所有图像转换为灰度)来帮助您创建一个轻量级且节能的博客。
  从零开始
  这时候感觉有点不对劲——使用了一个框架,推送了大量的客户端JavaScript,却删除了所有的JavaScript代码。这似乎是一个非常复杂的网站构造方法。我想看看我是否可以在没有客户端JavaScript的情况下构建一个功能齐全的博客,所以我不需要任何插件来删除它。所以我转向了另一个选择:
  Eleventy 鼓励您按照自己的意愿构建 网站。您可以使用您最熟悉的技术,它只负责生成页面。Eleventy 为您提供了十种模板语言选项,可以任意搭配,包括markdown、nunjucks 和liquid;这意味着我可以从 Craft 复制和粘贴旧模板,更改文件扩展名,并进行一些小的调整。运行于十一。不需要为任何新打包器调整前端构建过程,我只需要放入现有的 webpack 文件和 src 文件夹。使用并发包,我可以在 Eleventy 的服务过程中同时运行构建脚本。
  和 Gatsby 一样,Eleventy 也有一个插件生态系统(虽然很小,但增长很快)。我选择了一些可以在不添加客户端 JavaScript 的情况下添加功能的插件:
  当代码片段显示在帖子中时,它通常包括特定于语言的语法突出显示。有一些 JavaScript 库可以做到这一点,最流行的似乎是 Prism——你可以在客户端运行它,但由于我们使用的是 JavaScript SSG,我们可以在构建时运行它并突出显示语法 HTML 元素和 CSS显示所需的类直接烘焙到文档中——因此无需在浏览器中下载库。
  11-plugin-embed-tweet 也可以在构建时而不是在客户端运行 JavaScript。Twitter 的默认嵌入代码强制用户下载大量 JavaScript 以显示推文。该插件可以在构建时获取和渲染推文,因此只需要少量的 HTML 和 CSS,完全不需要额外的 JavaScript。
  与其他新技术一样,Eleventy 缺少一些更成熟的工具提供的功能。例如,在 Eleventy 中没有优雅的方式来生成响应式图像。相比之下,Gatsby 中优秀的 gatsby-image 插件可以生成延迟加载和响应式图像元素,加载全分辨率文件后可以在低分辨率或 SVG 版本的图像之间平滑切换。Eleventry还有一个让我困惑的地方:我有段时间没了解它的分页功能,以为它只是把帖子分页成指定大小的组,然后意识到它可以动态生成全新的页面;我还发现自己在同一个文件中混用了模板语言:可以随意在markdown文件中收录nunjucks标签,或者用JavaScript替换基于yaml的frontmatter,
  综上所述
  如果你仍然选择 Gatsby,我不会责怪你——有时使用自以为是的框架是好的,如果你想快速完成工作,这是一个可靠的解决方案。只需注意其性能成本以及与 JavaScript 相关的所有潜在可访问性问题。
  我选择用Eleventy来搭建自己的网站,但我知道这种方法并不适合所有人——完全按照自己的意愿来搭建可能会很麻烦。但是你不需要完全向我学习——和 Gatsby 类似,Eleventy 也有很多可以作为基础的入门项目。其中一些工具,例如 Andy Bell 的 Hylia 入门套件,可以在几分钟内获得一个 网站。它甚至预配置了 Netlify cms,因此您无需编写任何代码即可编辑 网站 的内容。
  我学到了什么?使用 Eleventy 无需 JavaScript 即可轻松构建博客,但总会有一些功能需要客户端 JavaScript:
  我会在不久的将来将 JavaScript 添加到 网站 吗?答案可能是否定的:我上面列出的功能并不那么重要。我不建议大家删除你网站上的所有JavaScript文件,但是从现在开始,在构建网站的时候,我会尽量把JavaScript当作一个可选的额外功能,而不是基本的体验组件。我鼓励你也这样做。
  关注我转发这篇文章文章,私信我“接收信息”,即可免费获得价值4999元的InfoQ迷你书!

js提取指定网站内容( javascript中innerHTML获取或替换html内容,本文通过实例代码)

网站优化优采云 发表了文章 • 0 个评论 • 120 次浏览 • 2021-10-05 22:20 • 来自相关话题

  js提取指定网站内容(
javascript中innerHTML获取或替换html内容,本文通过实例代码)
  javascript中innerHTML获取或替换html内容的实现代码
  更新时间:2020年3月17日09:43:47 作者:大灰牛博客
  本文文章主要介绍javascript中innerHTML对html内容的获取或替换。本文通过示例代码为您详细介绍,对您的学习或工作有一定的参考价值。有需要的朋友可以参考
  innerHTML 属性用于获取或替换 HTML 元素的内容,语法为 Object.innerHTML
  其中1.Object为获取的元素对象,如通过document.getElementById("ID")获取的元素;2. 注意书写,innerHTML 区分大小写。
  我们通过 id="light"
  元素,并输出元素的内容和改变元素的内容,代码如下:
  


innerHTML属性



你好,黑夜20200317



var mystr=document.getElementById('cshi');
mystr.innerHTML="DOM操作";
// document.write(mystr);


  通过id获取h2标签元素并赋值给变量mychar,然后使用innerHTML属性将获取到的h2标签内容修改为“Hello world!”
  
innerHTML
javascript
<p> JavaScript是一种基于对象、事件驱动的简单脚本语言,嵌入在HTML文档中,由浏览器负责解释和执行,在网页上产生动态的显示效果并实现与用户交互功能。
var mychar= document.getElementById('icon'); ;
document.write("原标题:"+mychar.innerHTML+"
"); //输出原h2标签内容
mychar.innerHTML="Hello world!";
document.write("修改后的标题:"+mychar.innerHTML); //输出修改后h2标签内容
</p>
  总结
  这是文章关于在javascript中获取或替换innerHTML中的html内容的介绍。更多替换html内容的js相关内容,请搜索脚本之家之前的文章或继续浏览下方相关文章希望大家以后多多支持Scripthome! 查看全部

  js提取指定网站内容(
javascript中innerHTML获取或替换html内容,本文通过实例代码)
  javascript中innerHTML获取或替换html内容的实现代码
  更新时间:2020年3月17日09:43:47 作者:大灰牛博客
  本文文章主要介绍javascript中innerHTML对html内容的获取或替换。本文通过示例代码为您详细介绍,对您的学习或工作有一定的参考价值。有需要的朋友可以参考
  innerHTML 属性用于获取或替换 HTML 元素的内容,语法为 Object.innerHTML
  其中1.Object为获取的元素对象,如通过document.getElementById("ID")获取的元素;2. 注意书写,innerHTML 区分大小写。
  我们通过 id="light"
  元素,并输出元素的内容和改变元素的内容,代码如下:
  


innerHTML属性



你好,黑夜20200317



var mystr=document.getElementById('cshi');
mystr.innerHTML="DOM操作";
// document.write(mystr);


  通过id获取h2标签元素并赋值给变量mychar,然后使用innerHTML属性将获取到的h2标签内容修改为“Hello world!”
  
innerHTML
javascript
<p> JavaScript是一种基于对象、事件驱动的简单脚本语言,嵌入在HTML文档中,由浏览器负责解释和执行,在网页上产生动态的显示效果并实现与用户交互功能。
var mychar= document.getElementById('icon'); ;
document.write("原标题:"+mychar.innerHTML+"
"); //输出原h2标签内容
mychar.innerHTML="Hello world!";
document.write("修改后的标题:"+mychar.innerHTML); //输出修改后h2标签内容
</p>
  总结
  这是文章关于在javascript中获取或替换innerHTML中的html内容的介绍。更多替换html内容的js相关内容,请搜索脚本之家之前的文章或继续浏览下方相关文章希望大家以后多多支持Scripthome!

js提取指定网站内容(js提取指定网站内容主要有如下下4个命令)

网站优化优采云 发表了文章 • 0 个评论 • 131 次浏览 • 2021-09-29 06:02 • 来自相关话题

  js提取指定网站内容(js提取指定网站内容主要有如下下4个命令)
  js提取指定网站内容主要有如下4个命令:navigator.find(albumid):如果目标网站与访问者同一个网站,就返回目标网站的albumid网站内容,网站资源cookie不推荐提取,
  因为你需要get一个到文件的地址。如果是http提交,
  大神给个建议,
  navigator.find(‘get’,'*/*')或navigator.find(‘get’,'*/*')都可以
  find(albumid)//很多网站一直都是这么做的find(pageid)//通过统计pageid找到页面打包的位置
  navigator.find(albumid)//很久以前的一个版本了,现在userdata提取的cookie要前置header,
  使用navigator.find()可以清晰地发现目标网站,简单、方便,同时因为这个方法并没有退出,有时也可以引入一些更复杂的功能,比如点击效果控件、intellijidea、eclipse等等。其他的方法大多用js取得网站url,然后提取资源内容,这样做应该可以吧。 查看全部

  js提取指定网站内容(js提取指定网站内容主要有如下下4个命令)
  js提取指定网站内容主要有如下4个命令:navigator.find(albumid):如果目标网站与访问者同一个网站,就返回目标网站的albumid网站内容,网站资源cookie不推荐提取,
  因为你需要get一个到文件的地址。如果是http提交,
  大神给个建议,
  navigator.find(‘get’,'*/*')或navigator.find(‘get’,'*/*')都可以
  find(albumid)//很多网站一直都是这么做的find(pageid)//通过统计pageid找到页面打包的位置
  navigator.find(albumid)//很久以前的一个版本了,现在userdata提取的cookie要前置header,
  使用navigator.find()可以清晰地发现目标网站,简单、方便,同时因为这个方法并没有退出,有时也可以引入一些更复杂的功能,比如点击效果控件、intellijidea、eclipse等等。其他的方法大多用js取得网站url,然后提取资源内容,这样做应该可以吧。

js提取指定网站内容(js提取指定网站内容重点是使用搜索引擎的软件)

网站优化优采云 发表了文章 • 0 个评论 • 77 次浏览 • 2021-09-27 12:01 • 来自相关话题

  js提取指定网站内容(js提取指定网站内容重点是使用搜索引擎的软件)
  js提取指定网站内容重点是使用搜索引擎。不同搜索引擎有不同的提取算法,可以查阅自己的网站是否适合这个算法。可以通过友链交换,付费购买购买。也可以使用seo软件。
  先说提取,提取应该不是你指定的词,你应该指定一个事件或者事件中的关键词。而提取代码是提取后代码一样的url提取出新的内容或代码。在做外链之前可以先搜集几个收录都比较多,排名也比较好的网站,把收录量提高,排名提高。在用外链的时候只需要点击收录的网站网页,然后按收录量排序就可以提取好几个网站的代码。
  1.每天看新闻。2.买书或看书评。3.交一些大网站朋友,让它们给你爬虫带。4.找一些专业的爬虫购买。
  先学一点点编程。
  多去dolphin,sugarcases,美容feed找内容。一开始不知道有没有用,看到好的就不错了。
  想到我一个朋友的经历,听说大家比较热衷于这样爬虫,我就想试试,就学习了点爬虫。起初我想着能够爬取一些好医院的时候,就去百度几家好的医院。就自己慢慢的去爬,积累了第一桶金。然后我又想接着拓展一下,于是开始去爬取一些做微商的,或者身边做微商的。但那时候,我都是先是看到过别人做的,就发现好像有人会这样做,就自己去做,因为这样比较简单。
  然后再慢慢学习别人的,现在学到一定程度,就开始做上一些大的行业,如微商等。这样一步步做着做着,就发现自己能够全面发展,然后自己感觉收入应该不错。总之最重要的是分清自己的优势。还有一点很重要,你要去一个自己可以做的领域去发展。不要多。 查看全部

  js提取指定网站内容(js提取指定网站内容重点是使用搜索引擎的软件)
  js提取指定网站内容重点是使用搜索引擎。不同搜索引擎有不同的提取算法,可以查阅自己的网站是否适合这个算法。可以通过友链交换,付费购买购买。也可以使用seo软件。
  先说提取,提取应该不是你指定的词,你应该指定一个事件或者事件中的关键词。而提取代码是提取后代码一样的url提取出新的内容或代码。在做外链之前可以先搜集几个收录都比较多,排名也比较好的网站,把收录量提高,排名提高。在用外链的时候只需要点击收录的网站网页,然后按收录量排序就可以提取好几个网站的代码。
  1.每天看新闻。2.买书或看书评。3.交一些大网站朋友,让它们给你爬虫带。4.找一些专业的爬虫购买。
  先学一点点编程。
  多去dolphin,sugarcases,美容feed找内容。一开始不知道有没有用,看到好的就不错了。
  想到我一个朋友的经历,听说大家比较热衷于这样爬虫,我就想试试,就学习了点爬虫。起初我想着能够爬取一些好医院的时候,就去百度几家好的医院。就自己慢慢的去爬,积累了第一桶金。然后我又想接着拓展一下,于是开始去爬取一些做微商的,或者身边做微商的。但那时候,我都是先是看到过别人做的,就发现好像有人会这样做,就自己去做,因为这样比较简单。
  然后再慢慢学习别人的,现在学到一定程度,就开始做上一些大的行业,如微商等。这样一步步做着做着,就发现自己能够全面发展,然后自己感觉收入应该不错。总之最重要的是分清自己的优势。还有一点很重要,你要去一个自己可以做的领域去发展。不要多。

js提取指定网站内容(IT共享者获取妹纸图上的图片链接功能大揭秘(组图))

网站优化优采云 发表了文章 • 0 个评论 • 91 次浏览 • 2021-09-27 03:18 • 来自相关话题

  js提取指定网站内容(IT共享者获取妹纸图上的图片链接功能大揭秘(组图))
  前言
  大家好,我是IT分享者,我叫皮皮。
  妹纸地图网站大家一定很熟悉了,老司机的天堂。小编第一次说身体在逐渐变空,一定要克制自己,远离这种正能量网站。话不多说,今天就带大家去获取妹子纸质地图上的图片链接。然后大家就明白了。
  一、项目准备
  360浏览器,仅此而已
  二、项目目的
  获取页面上的所有美女图片
  三、项目步骤1. 打开浏览器,搜索图片。我们以美女图片为例:
  
  画面太美了,不忍直视。
  2.打开浏览器控制台
  F12,可以打开浏览器控制台。今天我们要做的就是获取所有图片链接,顺便查看图片。如下所示:
  
  今天我们将在这里获取所有图片链接。相信没接触过前端的人一定对它一无所知,但是编辑讲完之后,你还是什么都不知道,那是你的错。NS。
  3.控制台功能的启示
  你可能觉得这个地方没啥用,没啥用,不如Element Network有用;确实前两个确实很有用,可以用来分析网页结构和网页请求,但我想说的是控制台的功能。永远不要低估它,因为它可以让您在开发过程中快速查看效果图。例如,您编写了一段代码,但您想看看它现在是否可以运行。一般的做法是写HTML+CSS,然后Embedding JavaScript进去,显然太麻烦,修改后要在浏览器中刷新才能看到效果。最终,浏览器和编辑器频繁切换,影响开发速度和效率,甚至占用过多的系统资源。于是,控制台应运而生,它让我们可以轻松使用 JavaScript 代码,无需匹配 HTML 和 CSS 即可运行,一个 Console 就搞定了,这就是我们刚才所说的控制台。我们可以先来看看它的功能:
  
  可以看到,它有自动提示功能,而且比任何第三方IDE都要全面,因为它是和浏览器结合使用的,其他IDE没有这么齐全,所以你可以看到,如果你想用某种方法,它不会提示,只有一个原因,就是你用错了。
  1)。更改其编辑状态
  控制台输入:
  ![4](4.jpgdocument.body.contentEditable=true
  
  在编辑状态下,我们的点击操作没有效果,也就是说只能修改。如果要恢复,请刷新浏览器。
  2)。针对特定元素
  这里我们可以先查看我们想要查看的浏览器图片元素的信息,可以先把所有图片打印出来。这里我们使用一个特殊符号:
  
  我们可以看到,通过这个语法糖,可以打印当前页面的所有图片信息。显示70,表示该页面有70张图片。当编辑器再次滚动鼠标时,图片数量增加了,变成了136张图片。,这表明它是由Ajax加载的。
  除了这种获取图片的方式,还可以这样做:
  document.images
  得到的结果和上面的完全一样。随着这些知识点的积累,我们现在可以轻松获取所有图片链接。
  4.获取图片链接和图片名称
  这里需要将获取到的图片加入到数组中,遍历完成后将所有图片打印出来。
  1)。创建一个数组来存储所有图片
  ab=document.images #获取当前页面所有图片
var aa=[] #建立数组
for(const y of ab){ #建立const变量使得无法修改
aa.push(y); #把图片装进数组
}
  
  2)。遍历数组并打印图像链接
  这里可以用到的方法有很多,我一一介绍。
  1)).对于...in
  for(const a in aa){
console.log(aa[a])
}
  
  2)).For...of
  for(const a of aa){
console.log(a)
}
  
  3)).ForEach
  aa.forEach(function(val,item,array){
console.log(val)
});
  
  4)).地图
  ![10](10.jpgaa.map(function(val,item,array){
console.log(val)
});
  
  可以看到,第四种方法与第三种方法类似,但还是有区别的。前者没有返回值,后者有,后者支持修改返回值。虽然我们把图片链接打印出来了,但是没有打印图片的名字,所以编辑开始找图片的名字:
  
  发现是在Div标签中,于是编辑器开始寻找符合条件的Div:
  document.querySelectorAll(&#39;div.img_tit&#39;)#精确找到所有类名为img_tit的Div
document.getElementsByClassName(&#39;img_tit&#39;)#找到所有类名为img_tit
  然后我们先输出图片名再输出图片链接,这样我们就可以用循环再判断了,如下图:
<p>var a=0;
do{
a++;
if(a%2==0){
console.log(aa[a])
}
else{
console.log(ac[a])
}
}
while(a 查看全部

  js提取指定网站内容(IT共享者获取妹纸图上的图片链接功能大揭秘(组图))
  前言
  大家好,我是IT分享者,我叫皮皮。
  妹纸地图网站大家一定很熟悉了,老司机的天堂。小编第一次说身体在逐渐变空,一定要克制自己,远离这种正能量网站。话不多说,今天就带大家去获取妹子纸质地图上的图片链接。然后大家就明白了。
  一、项目准备
  360浏览器,仅此而已
  二、项目目的
  获取页面上的所有美女图片
  三、项目步骤1. 打开浏览器,搜索图片。我们以美女图片为例:
  
  画面太美了,不忍直视。
  2.打开浏览器控制台
  F12,可以打开浏览器控制台。今天我们要做的就是获取所有图片链接,顺便查看图片。如下所示:
  
  今天我们将在这里获取所有图片链接。相信没接触过前端的人一定对它一无所知,但是编辑讲完之后,你还是什么都不知道,那是你的错。NS。
  3.控制台功能的启示
  你可能觉得这个地方没啥用,没啥用,不如Element Network有用;确实前两个确实很有用,可以用来分析网页结构和网页请求,但我想说的是控制台的功能。永远不要低估它,因为它可以让您在开发过程中快速查看效果图。例如,您编写了一段代码,但您想看看它现在是否可以运行。一般的做法是写HTML+CSS,然后Embedding JavaScript进去,显然太麻烦,修改后要在浏览器中刷新才能看到效果。最终,浏览器和编辑器频繁切换,影响开发速度和效率,甚至占用过多的系统资源。于是,控制台应运而生,它让我们可以轻松使用 JavaScript 代码,无需匹配 HTML 和 CSS 即可运行,一个 Console 就搞定了,这就是我们刚才所说的控制台。我们可以先来看看它的功能:
  
  可以看到,它有自动提示功能,而且比任何第三方IDE都要全面,因为它是和浏览器结合使用的,其他IDE没有这么齐全,所以你可以看到,如果你想用某种方法,它不会提示,只有一个原因,就是你用错了。
  1)。更改其编辑状态
  控制台输入:
  ![4](4.jpgdocument.body.contentEditable=true
  
  在编辑状态下,我们的点击操作没有效果,也就是说只能修改。如果要恢复,请刷新浏览器。
  2)。针对特定元素
  这里我们可以先查看我们想要查看的浏览器图片元素的信息,可以先把所有图片打印出来。这里我们使用一个特殊符号:
  
  我们可以看到,通过这个语法糖,可以打印当前页面的所有图片信息。显示70,表示该页面有70张图片。当编辑器再次滚动鼠标时,图片数量增加了,变成了136张图片。,这表明它是由Ajax加载的。
  除了这种获取图片的方式,还可以这样做:
  document.images
  得到的结果和上面的完全一样。随着这些知识点的积累,我们现在可以轻松获取所有图片链接。
  4.获取图片链接和图片名称
  这里需要将获取到的图片加入到数组中,遍历完成后将所有图片打印出来。
  1)。创建一个数组来存储所有图片
  ab=document.images #获取当前页面所有图片
var aa=[] #建立数组
for(const y of ab){ #建立const变量使得无法修改
aa.push(y); #把图片装进数组
}
  
  2)。遍历数组并打印图像链接
  这里可以用到的方法有很多,我一一介绍。
  1)).对于...in
  for(const a in aa){
console.log(aa[a])
}
  
  2)).For...of
  for(const a of aa){
console.log(a)
}
  
  3)).ForEach
  aa.forEach(function(val,item,array){
console.log(val)
});
  
  4)).地图
  ![10](10.jpgaa.map(function(val,item,array){
console.log(val)
});
  
  可以看到,第四种方法与第三种方法类似,但还是有区别的。前者没有返回值,后者有,后者支持修改返回值。虽然我们把图片链接打印出来了,但是没有打印图片的名字,所以编辑开始找图片的名字:
  
  发现是在Div标签中,于是编辑器开始寻找符合条件的Div:
  document.querySelectorAll(&#39;div.img_tit&#39;)#精确找到所有类名为img_tit的Div
document.getElementsByClassName(&#39;img_tit&#39;)#找到所有类名为img_tit
  然后我们先输出图片名再输出图片链接,这样我们就可以用循环再判断了,如下图:
<p>var a=0;
do{
a++;
if(a%2==0){
console.log(aa[a])
}
else{
console.log(ac[a])
}
}
while(a

js提取指定网站内容( 即可如果想要设置标签中的内容,包括标签、空格、文本、换行等。 )

网站优化优采云 发表了文章 • 0 个评论 • 232 次浏览 • 2021-09-24 11:18 • 来自相关话题

  js提取指定网站内容(
即可如果想要设置标签中的内容,包括标签、空格、文本、换行等。
)
  JS获取标签内容的方法
   测试代码
DOCTYPE html>



Title



这有个 第一个p

这有个第二个p
这是个

span


这有个a标签





  1.innerHTML
  该方法可以获取标签中的所有内容,包括标签、空格、文本、换行符等。
  清除标签内容,innerHTML = "";
  如果要设置标签的内容,innerHTML = "填写你要设置的标签和内容"; 设置内容时,将覆盖所有原创内容。
  JS代码和效果图如下:
  
var box = document.getElementById('box');
// 获取标签的内容
var box1 = box.innerHTML;
var box2 = document.getElementById('box').innerHTML;
console.log(box1);

  
  
//替换标签内容
var box = document.getElementById('box');
box.innerHTML = '你们被我h3替换啦!!!';
console.log(box);

  
  2.内文
  该方法获取标签中的所有文本(及其子标签),但不获取标签(或者它可以过滤掉所有标签)。如果有多个空格或换行符,会被解析为一个空格。
  如果要清除标签内容,innerText = "";
  如果要设置标签的内容,innerText = "填写要设置的标签和内容"; 设置内容时,将覆盖所有原创内容。但是标签不会被解析,会直接以文本的形式打印在页面上。
  
//获取标签机器子标签的所有文本内容
var box = document.getElementById('box');
var box2 = box.innerText;
console.log(box2);

  
  
//修改标签文本内容,内容中包含的标签不会被解析,会文本输出
var box = document.getElementById('box');
box.innerText = '<p>这里有个p,来看一下'
</p>
  
  3.texContent
  textContent 获取标签中的内容。但是,当 textContent 过滤掉标签时,它会保留标签结构。
  针对innerText兼容性问题的JS代码:
  
// 处理innerText的浏览器兼容性问题
function getInnerText(element) {
if (typeof element.innerText === 'string') {
return element.innerText;
} else {
return element.textContent;
}
} 查看全部

  js提取指定网站内容(
即可如果想要设置标签中的内容,包括标签、空格、文本、换行等。
)
  JS获取标签内容的方法
   测试代码
DOCTYPE html>



Title



这有个 第一个p

这有个第二个p
这是个

span


这有个a标签





  1.innerHTML
  该方法可以获取标签中的所有内容,包括标签、空格、文本、换行符等。
  清除标签内容,innerHTML = "";
  如果要设置标签的内容,innerHTML = "填写你要设置的标签和内容"; 设置内容时,将覆盖所有原创内容。
  JS代码和效果图如下:
  
var box = document.getElementById('box');
// 获取标签的内容
var box1 = box.innerHTML;
var box2 = document.getElementById('box').innerHTML;
console.log(box1);

  
  
//替换标签内容
var box = document.getElementById('box');
box.innerHTML = '你们被我h3替换啦!!!';
console.log(box);

  
  2.内文
  该方法获取标签中的所有文本(及其子标签),但不获取标签(或者它可以过滤掉所有标签)。如果有多个空格或换行符,会被解析为一个空格。
  如果要清除标签内容,innerText = "";
  如果要设置标签的内容,innerText = "填写要设置的标签和内容"; 设置内容时,将覆盖所有原创内容。但是标签不会被解析,会直接以文本的形式打印在页面上。
  
//获取标签机器子标签的所有文本内容
var box = document.getElementById('box');
var box2 = box.innerText;
console.log(box2);

  
  
//修改标签文本内容,内容中包含的标签不会被解析,会文本输出
var box = document.getElementById('box');
box.innerText = '<p>这里有个p,来看一下'
</p>
  
  3.texContent
  textContent 获取标签中的内容。但是,当 textContent 过滤掉标签时,它会保留标签结构。
  针对innerText兼容性问题的JS代码:
  
// 处理innerText的浏览器兼容性问题
function getInnerText(element) {
if (typeof element.innerText === 'string') {
return element.innerText;
} else {
return element.textContent;
}
}

js提取指定网站内容(js提取指定网站内容你可以使用一些提取特定网站的插件)

网站优化优采云 发表了文章 • 0 个评论 • 70 次浏览 • 2021-09-23 20:04 • 来自相关话题

  js提取指定网站内容(js提取指定网站内容你可以使用一些提取特定网站的插件)
  js提取指定网站内容
  你可以使用一些提取特定网站内容的插件,例如我比较喜欢用thmahi,它是按照url地址抓取网页,同时提取网页指定区域的文字,
  使用爬虫插件,
  免费导出到excel的编程语言有很多,用python,java,javascript等语言都可以实现。当然,如果这个网站支持oauth(@/)的话,还可以把url地址提供给爬虫,让爬虫自己去爬数据。
  oauth
  python的话我不知道,写网站js的php,mysql,perl都有专门写js,urls的库的。
  ps||ppt||css||js||vba||php||mysql||c#||java||python||php||png||其实php做个爬虫就好了,
  任何语言都可以,百度一下,知乎就有好多技术大牛写的爬虫,可以参考。
  python+django或者python+twitter+thunder
  vba/office文档脚本语言
  你可以打个支持bmap的爬虫,并命名为bmap.xxx,将抓取到的数据命名为urls.xxx.xxx,然后导出为xml格式。
  任何语言都可以,我用java实现的jsoup(就是一个加载的文档).我就在代码中写了这么一句:即能抓取源文件又能抓取提取数据. 查看全部

  js提取指定网站内容(js提取指定网站内容你可以使用一些提取特定网站的插件)
  js提取指定网站内容
  你可以使用一些提取特定网站内容的插件,例如我比较喜欢用thmahi,它是按照url地址抓取网页,同时提取网页指定区域的文字,
  使用爬虫插件,
  免费导出到excel的编程语言有很多,用python,java,javascript等语言都可以实现。当然,如果这个网站支持oauth(@/)的话,还可以把url地址提供给爬虫,让爬虫自己去爬数据。
  oauth
  python的话我不知道,写网站js的php,mysql,perl都有专门写js,urls的库的。
  ps||ppt||css||js||vba||php||mysql||c#||java||python||php||png||其实php做个爬虫就好了,
  任何语言都可以,百度一下,知乎就有好多技术大牛写的爬虫,可以参考。
  python+django或者python+twitter+thunder
  vba/office文档脚本语言
  你可以打个支持bmap的爬虫,并命名为bmap.xxx,将抓取到的数据命名为urls.xxx.xxx,然后导出为xml格式。
  任何语言都可以,我用java实现的jsoup(就是一个加载的文档).我就在代码中写了这么一句:即能抓取源文件又能抓取提取数据.

js提取指定网站内容( 全网智能段落搜集如何提高B2B网站排名(图))

网站优化优采云 发表了文章 • 0 个评论 • 94 次浏览 • 2021-09-17 09:06 • 来自相关话题

  js提取指定网站内容(
全网智能段落搜集如何提高B2B网站排名(图))
  
  
  运行中B2B网站在此过程中,对排名效果影响最大的是用户发布的供求内容和文章内容
  操作B2B网站收录的重量和推广极度依赖于供需信息和专业知识文章. 从事垂直行业的朋友都知道,他们的会员用户通常不知道该写什么。对于有重量的构件B2B网站,丰富的信息通常可以点击更多的关键词排名,获得更多的流量和查询
  B2B行业网站遇到的大多数情况可能是:
  到目前为止,百度一直在打击低质量的内容网站,其中大部分内容都已开始打雷B2B网站,但也由于上述因素,导致了许多问题B2B网站供需内容信息质量差,无法满足百度搜索引擎网页质量的原因
  由于网站内容质量差,重量会不稳定,或者当重量达到一定瓶颈时,无法突破
  供使用B2B网站对于推广产品的用户来说,B2B成员每天、每天、长时间地发布大量产品,以满足原创内容的要求,并使产品页面收录,这是一个巨大的挑战@
  大多数用户是自营职业者,可能正在经历:
  5118开发团队提供了帮助B2B网站制作内容的效率和质量使得搜索引擎愿意@收录为您的客户提供更高质量的内容,提高您会员的查询效果
  
  只需通过一个简单的JS将智能原创功能集成到后台,即可解决B2B用户快速制作内容和提高效率的需求B2B网站用户满意度,激发用户生产能力
  全网络智能段落采集
  如何改进B2B网站排名
  每个人都应该体验到,在创作文章之前搜索创作灵感材料是一件非常耗时的事情,而且在花时间逐一搜索之后,可能不是你想要的内容
  利用全网的智能段落集合,用户只需提供一段原创主题,超级大脑会自动分析内容的核心词,并使用高智能算法高效获取最新的高度相关的文章内容,大大节省了用户在搜索引擎中搜索文章的时间,加快了内容制作速度
  
  用户可以根据内容需求直接插入编辑器文章中,并将关键词内容与精英段落内容进行整合,从而大大提高点击关键词的概率。p>
  智能原创
  如何改进B2B网站@收录
  在挖掘了他们喜爱的内容后,搜索引擎的重复检查算法也让大多数用户感到困惑,导致许多用户花费了大量的时间和精力,但网站仍然没有@收录问题
  使用智能原创代替人力可以大大减少人工干预的时间成本。通过NLP高智能算法,像人一样阅读和理解整个文章内容。句子不是简单的一串单词,而是相互关联的真实事物,从而接近人类的写作模式
  
  通过高效的智能原创,人工修改,细化内容,从而降低文本相似度,绕过重复检查算法,快速创建高质量的唯一文章,大大提高网站@收录
  
  核心特征
  70亿+:70亿关键词语料库支持智能语义替换算法,能够准确理解每个单词的语义
  500万+:每天更新500多万个新词,使人工智能能够正确理解互联网并生成新词
  1000亿+:1000亿官方账户,标题,知乎文章段落,整个网络搜索中最相关的段落集中在文章上@
  100000+:100000用户同时使用,不断提出改进需求,使功能越来越智能化
  100+:100多台服务器支持智能原创API系统的稳定运行保证了JS后台集成后服务的稳定可靠
  JS集成模式,简单在线,包括功能性JS集成案例
  行业知名网站用户集成智能原创(个性化风格可定制)
  
  如何获得
  有关JS代码,请联系5118客户服务
  与JS集成智能原创,B2B网站内容制作不再是问题。让您的客户享受立即制作内容的乐趣
  插件支持的智能原创系统
  cms内容管理系统:帝国DEDE织梦、WordPress、Phpcms、Z-Blog、Drupal、Discuz
  新媒体平台:微信公众号、100个家庭号码、标题
  编辑:kindeditor,ueeditor 查看全部

  js提取指定网站内容(
全网智能段落搜集如何提高B2B网站排名(图))
  
  
  运行中B2B网站在此过程中,对排名效果影响最大的是用户发布的供求内容和文章内容
  操作B2B网站收录的重量和推广极度依赖于供需信息和专业知识文章. 从事垂直行业的朋友都知道,他们的会员用户通常不知道该写什么。对于有重量的构件B2B网站,丰富的信息通常可以点击更多的关键词排名,获得更多的流量和查询
  B2B行业网站遇到的大多数情况可能是:
  到目前为止,百度一直在打击低质量的内容网站,其中大部分内容都已开始打雷B2B网站,但也由于上述因素,导致了许多问题B2B网站供需内容信息质量差,无法满足百度搜索引擎网页质量的原因
  由于网站内容质量差,重量会不稳定,或者当重量达到一定瓶颈时,无法突破
  供使用B2B网站对于推广产品的用户来说,B2B成员每天、每天、长时间地发布大量产品,以满足原创内容的要求,并使产品页面收录,这是一个巨大的挑战@
  大多数用户是自营职业者,可能正在经历:
  5118开发团队提供了帮助B2B网站制作内容的效率和质量使得搜索引擎愿意@收录为您的客户提供更高质量的内容,提高您会员的查询效果
  
  只需通过一个简单的JS将智能原创功能集成到后台,即可解决B2B用户快速制作内容和提高效率的需求B2B网站用户满意度,激发用户生产能力
  全网络智能段落采集
  如何改进B2B网站排名
  每个人都应该体验到,在创作文章之前搜索创作灵感材料是一件非常耗时的事情,而且在花时间逐一搜索之后,可能不是你想要的内容
  利用全网的智能段落集合,用户只需提供一段原创主题,超级大脑会自动分析内容的核心词,并使用高智能算法高效获取最新的高度相关的文章内容,大大节省了用户在搜索引擎中搜索文章的时间,加快了内容制作速度
  
  用户可以根据内容需求直接插入编辑器文章中,并将关键词内容与精英段落内容进行整合,从而大大提高点击关键词的概率。p>
  智能原创
  如何改进B2B网站@收录
  在挖掘了他们喜爱的内容后,搜索引擎的重复检查算法也让大多数用户感到困惑,导致许多用户花费了大量的时间和精力,但网站仍然没有@收录问题
  使用智能原创代替人力可以大大减少人工干预的时间成本。通过NLP高智能算法,像人一样阅读和理解整个文章内容。句子不是简单的一串单词,而是相互关联的真实事物,从而接近人类的写作模式
  
  通过高效的智能原创,人工修改,细化内容,从而降低文本相似度,绕过重复检查算法,快速创建高质量的唯一文章,大大提高网站@收录
  
  核心特征
  70亿+:70亿关键词语料库支持智能语义替换算法,能够准确理解每个单词的语义
  500万+:每天更新500多万个新词,使人工智能能够正确理解互联网并生成新词
  1000亿+:1000亿官方账户,标题,知乎文章段落,整个网络搜索中最相关的段落集中在文章上@
  100000+:100000用户同时使用,不断提出改进需求,使功能越来越智能化
  100+:100多台服务器支持智能原创API系统的稳定运行保证了JS后台集成后服务的稳定可靠
  JS集成模式,简单在线,包括功能性JS集成案例
  行业知名网站用户集成智能原创(个性化风格可定制)
  
  如何获得
  有关JS代码,请联系5118客户服务
  与JS集成智能原创,B2B网站内容制作不再是问题。让您的客户享受立即制作内容的乐趣
  插件支持的智能原创系统
  cms内容管理系统:帝国DEDE织梦、WordPress、Phpcms、Z-Blog、Drupal、Discuz
  新媒体平台:微信公众号、100个家庭号码、标题
  编辑:kindeditor,ueeditor

js提取指定网站内容(1.异步并发的get请求/querylist安装)

网站优化优采云 发表了文章 • 0 个评论 • 140 次浏览 • 2021-09-16 08:21 • 来自相关话题

  js提取指定网站内容(1.异步并发的get请求/querylist安装)
  编写爬虫程序时,使用guzzle的异步和并发get请求非常容易,可以快速爬虫。在时间上,PHP不是多线程的,但它可以使用协作进程来实现异步并发——用户状态下的多线程。有时,请求地址返回的页面需要执行大量JavaScript代码,并且需要动态呈现数据。这里有一个简单的方法
  即使您使用querylist,您也不能再依赖PHP的DOM解析工具simpledom并拥有自己的远程访问功能
  1.安装
  安装querylist
  作曲家需要jaeger/querylist
  安装phantomjs
  Composer需要Jaeger/querylist phantomjs//PHP版本必须为&gt=7.0
  下载对应于计算机系统的phantomjs二进制文件,并将其放在计算机上的任何路径中。下面将使用此路径。下载页面直接转到:
  2.use
  以下是Linux的一个示例:
  use QL\QueryList;
use QL\Ext\PhantomJs;
$ql = QueryList::getInstance();
// 安装时需要设置PhantomJS二进制文件路径
$ql->use(PhantomJs::class,'/usr/local/bin/phantomjs');
//or Custom function name
$ql->use(PhantomJs::class,'/usr/local/bin/phantomjs','browser');
  下面是windows的示例:
  $ql->use(PhantomJs::class,'C:/phantomjs/bin/phantomjs.exe');
$html = $ql->browser('https://m.toutiao.com')->getHtml();
print_r($html);
  相关文件:
  https://doc.querylist.cc/
  例如:
  在百度搜索图书排行榜,直接发送get请求获取无数据的HTML,因为搜索结果页面是通过异步JavaScript获取的
<p> 查看全部

  js提取指定网站内容(1.异步并发的get请求/querylist安装)
  编写爬虫程序时,使用guzzle的异步和并发get请求非常容易,可以快速爬虫。在时间上,PHP不是多线程的,但它可以使用协作进程来实现异步并发——用户状态下的多线程。有时,请求地址返回的页面需要执行大量JavaScript代码,并且需要动态呈现数据。这里有一个简单的方法
  即使您使用querylist,您也不能再依赖PHP的DOM解析工具simpledom并拥有自己的远程访问功能
  1.安装
  安装querylist
  作曲家需要jaeger/querylist
  安装phantomjs
  Composer需要Jaeger/querylist phantomjs//PHP版本必须为&gt=7.0
  下载对应于计算机系统的phantomjs二进制文件,并将其放在计算机上的任何路径中。下面将使用此路径。下载页面直接转到:
  2.use
  以下是Linux的一个示例:
  use QL\QueryList;
use QL\Ext\PhantomJs;
$ql = QueryList::getInstance();
// 安装时需要设置PhantomJS二进制文件路径
$ql->use(PhantomJs::class,'/usr/local/bin/phantomjs');
//or Custom function name
$ql->use(PhantomJs::class,'/usr/local/bin/phantomjs','browser');
  下面是windows的示例:
  $ql->use(PhantomJs::class,'C:/phantomjs/bin/phantomjs.exe');
$html = $ql->browser('https://m.toutiao.com')->getHtml();
print_r($html);
  相关文件:
  https://doc.querylist.cc/
  例如:
  在百度搜索图书排行榜,直接发送get请求获取无数据的HTML,因为搜索结果页面是通过异步JavaScript获取的
<p>

js提取指定网站内容(文章删除指定或匹配的元素和节点!你知道吗?)

网站优化优采云 发表了文章 • 0 个评论 • 90 次浏览 • 2021-09-15 15:23 • 来自相关话题

  js提取指定网站内容(文章删除指定或匹配的元素和节点!你知道吗?)
  如前几篇文章中文章detail所述,我们可以使用jQuery中的detach()方法和jQuery中的remove()方法删除指定或匹配的元素,或者使用removeclass()方法和removeattr()方法删除指定或匹配元素的类或属性。今天,让我们讨论使用jQuery删除指定或匹配元素中的子元素和节点
  jquery中empty()方法的说明
  jQuery中的Empty()方法:这些方法可以清空/删除指定元素下的所有子节点或内容
  语法:
  $(selector).empty()
  举个大“例子”
  在jQuery中使用empty()方法删除Div中的所有内容
  
  HTML代码
  
    <p>这里是P标签内容
    
  这里是第二个P标签的内容
</p>
  JQ代码
  $(&#39;#button&#39;).click(function(){
    $("#mochu").empty();
})
  结果图
  审计源代码如下图所示
  
  通过上图,我们可以发现ID为Mochu的div标签已经删除了p标签和内容
  作者有话要说
  在写这篇文章时,我查阅了三份文件。其中一位说empty()函数应该理解为清除指定元素下的子节点,而不是删除指定元素下的子节点。让我们看看并理解这一点。我个人认为空的比较合适 查看全部

  js提取指定网站内容(文章删除指定或匹配的元素和节点!你知道吗?)
  如前几篇文章中文章detail所述,我们可以使用jQuery中的detach()方法和jQuery中的remove()方法删除指定或匹配的元素,或者使用removeclass()方法和removeattr()方法删除指定或匹配元素的类或属性。今天,让我们讨论使用jQuery删除指定或匹配元素中的子元素和节点
  jquery中empty()方法的说明
  jQuery中的Empty()方法:这些方法可以清空/删除指定元素下的所有子节点或内容
  语法:
  $(selector).empty()
  举个大“例子”
  在jQuery中使用empty()方法删除Div中的所有内容
  
  HTML代码
  
    <p>这里是P标签内容
    
  这里是第二个P标签的内容
</p>
  JQ代码
  $(&#39;#button&#39;).click(function(){
    $("#mochu").empty();
})
  结果图
  审计源代码如下图所示
  
  通过上图,我们可以发现ID为Mochu的div标签已经删除了p标签和内容
  作者有话要说
  在写这篇文章时,我查阅了三份文件。其中一位说empty()函数应该理解为清除指定元素下的子节点,而不是删除指定元素下的子节点。让我们看看并理解这一点。我个人认为空的比较合适

js提取指定网站内容(9,849Pdf文件中嵌入Javasript脚本的利用方式分析)

网站优化优采云 发表了文章 • 0 个评论 • 620 次浏览 • 2021-09-15 15:22 • 来自相关话题

  js提取指定网站内容(9,849Pdf文件中嵌入Javasript脚本的利用方式分析)
  阅读:9849
  Pdf文件是一种广泛使用的文件格式,至今仍在开发2.0版本,其功能也不断丰富,许多鲜为人知的功能可能被用来进行恶意行为。本文将简要介绍如何在PDF文件中嵌入JavaScript脚本
  一、PDF中的JavaScript利用率
  Pdf是可移植文档格式的缩写。它是一种广泛应用于各种场合的文件格式。它是根据postscript语言修改的文件标准,并被ISO组织接受。目前已发展到2.0版本(iso32000)-2).目前广泛使用的是1.7版本,该版本的PDF功能已经相当丰富,可以显示3D模型、播放多媒体音频和视频、执行JavaScript脚本等功能
  Adobe reader的许多CVE漏洞都是通过PDF文件中的某些结构触发的,触发过程需要提前执行嵌入PDF文件中的JavaScript脚本。例如,CVE-2017-11254 Adobe Acrobat and reader中的addannot use after free漏洞通过调用addan来触发该漏洞JavaScript代码不起作用;cve-2018-4901 for PDF中的跟踪器结构中的ID字段的溢出漏洞也会通过文件中的JavaScript调用docid触发
  PDF文件中的JavaScript内容是一种非常有用且广泛使用的攻击手段
  然而,在PDF的JavaScript函数引用规范中,对PDF中可以引用的函数有严格的限制,可以执行的操作相对有限
  通过研究发现,目前针对攻击面的攻击主要分为以下三种方式:
  二、pdf中的JavaScript规范
  将JavaScript插入PDF的介绍主要在JavaScript_api_reference.PDF中介绍。在文档中介绍函数时,将通过四元组描述函数:
  
  第一列表示方法的启用版本以及是否仍在使用中,第二列表示方法引起的更改是否会影响文件,第三列表示方法的实现需要特殊设置,第四列表示方法的可用性
  PDF中的JavaScript根据影响范围分为以下几类:文件夹级脚本、文档级脚本、页面级脚本、域级脚本和批处理级脚本。所有类型的脚本都是事件驱动的,即在相应事件发生时响应和执行
  1、文件夹级脚本
  它收录可能影响acrobat的变量声明和函数定义。它通常用于添加影响acrobat的函数,例如菜单或菜单项,包括应用程序和用户
  这些脚本通常放在相应的文件夹中,并在acrobat启动时加载。它们通常与事件实体的应用程序初始化事件关联
  2、文档级脚本
  它收录变量声明和函数定义,这些变量声明和函数定义可能会影响给定的文件,并且不能在文件外部应用。此级别脚本可以通过acrobat创建并嵌入到PDF文件中。除此类型的脚本外,还有文档级别的操作脚本,其触发操作包括:关闭文件之前,请保存文件前、保存文件后、打印文件前和打印文件后
  3、页面级脚本
  打开或关闭页面时会执行此类型的脚本。打开事件是指页面完成绘制或随时查看新页面时发生的事件。关闭事件是指用户查看的页面不再是当前页面时发生的事件
  4、域级脚本
  域级别脚本绑定到acrobat中的表字段。当用户直接或间接与相应区域交互时,会触发相应的域事件,并且级别脚本存储在PDF文件中
  三、潜在可用内容
  在PDF阅读器支持的所有JavaScript函数中,以下函数在实际应用中仍然会给用户带来一些问题:
  app.launchURL()、app.media.getURLdata()、app.alert()、app.execDialog()、doc.getURL
  1、app.launchURL()函数用于访问远程URL
  此函数的四边形如下所示:
  
  该函数收录两个参数,curl(用于指定文件路径)和bnewframe(用于指定是否在新页面中显示文件)
  打开收录此功能的PDF文件时,将弹出一个窗口,提醒用户建立远程链接,然后使用默认浏览器打开远程连接
  2、app.media.getURLdata函数()打开URL指定的多媒体文件
  四边形如下:
  
  该函数收录两个参数,curl(用于指定文件的路径)和cmimetype(可选,用于指定文件的MIME类型)
  当打开收录此功能的PDF文件时,会弹出一个窗口提醒用户建立远程链接,然后根据版本和应用可能会有安全提示,用户需要手动选择信任,最后使用系统默认播放器播放URL指定的文件
  
  
  
  3、app.alert()功能是弹出一个警告对话框
  四元函数如下所示:
  
  该函数收录多个参数,即:cmsg(用于指定对话框内容)、Nicon(可选,用于指定对话框图标)、ntype(可选,用于指定按钮类型)、ctitle(可选,用于指定对话框标题)、odoc(可选,用于指定与警告相关的文档结构),ocheckbox(可选,在对话框中放置复选框,并指定相关内容、初始值和结束值)
  打开收录此函数的PDF文件时,会弹出相应的对话框,但标题处会出现提示:“警告:Javascript窗口”,如下所示:
  
  
  4、app.execDialog()函数为创建一个对话框
  其四边形如下:
  
  该功能通过设置相关参数,可以实现高度定制的对话框,如下图:
  
  但是,该对话框收录“JavaScript窗口”标题和红色警告文本
  5、doc.getURL函数是通过get方法获取指向文件的URL
  其四边形如下:
  
  此函数收录两个参数:curl(目标文件的地址)和bappend(如果为true,则将运行结果附加到当前文件;当文件在浏览器中运行时,建议为false)。函数运行后,仍然会出现安全提示,如下所示:
  
  但是,此函数的另一个功能是它可以运行本地文件。同时,为了防止执行任意文件,它还可以在注册表项中运行\local\u machine\software\policies\Adobe\Acrobat Reader\11.0\featurelockdown\cdefaultlanchattachmentperms受到限制。系统功能安全当用户试图执行不在限制范围内的文件时,也会调用xecute。在ablefiletype判断该文件是否为可执行文件且不受两个方面的限制后,将出现以下两个弹出窗口:
  
  
  最后打开目标文件:
  
  不同版本的程序不同,在阅读器X中,默认浏览器用于打开上面的图形,而在AcROCAX-Pro中,记事本直接用来打开它/P>
  
  参考链接:
  / 查看全部

  js提取指定网站内容(9,849Pdf文件中嵌入Javasript脚本的利用方式分析)
  阅读:9849
  Pdf文件是一种广泛使用的文件格式,至今仍在开发2.0版本,其功能也不断丰富,许多鲜为人知的功能可能被用来进行恶意行为。本文将简要介绍如何在PDF文件中嵌入JavaScript脚本
  一、PDF中的JavaScript利用率
  Pdf是可移植文档格式的缩写。它是一种广泛应用于各种场合的文件格式。它是根据postscript语言修改的文件标准,并被ISO组织接受。目前已发展到2.0版本(iso32000)-2).目前广泛使用的是1.7版本,该版本的PDF功能已经相当丰富,可以显示3D模型、播放多媒体音频和视频、执行JavaScript脚本等功能
  Adobe reader的许多CVE漏洞都是通过PDF文件中的某些结构触发的,触发过程需要提前执行嵌入PDF文件中的JavaScript脚本。例如,CVE-2017-11254 Adobe Acrobat and reader中的addannot use after free漏洞通过调用addan来触发该漏洞JavaScript代码不起作用;cve-2018-4901 for PDF中的跟踪器结构中的ID字段的溢出漏洞也会通过文件中的JavaScript调用docid触发
  PDF文件中的JavaScript内容是一种非常有用且广泛使用的攻击手段
  然而,在PDF的JavaScript函数引用规范中,对PDF中可以引用的函数有严格的限制,可以执行的操作相对有限
  通过研究发现,目前针对攻击面的攻击主要分为以下三种方式:
  二、pdf中的JavaScript规范
  将JavaScript插入PDF的介绍主要在JavaScript_api_reference.PDF中介绍。在文档中介绍函数时,将通过四元组描述函数:
  
  第一列表示方法的启用版本以及是否仍在使用中,第二列表示方法引起的更改是否会影响文件,第三列表示方法的实现需要特殊设置,第四列表示方法的可用性
  PDF中的JavaScript根据影响范围分为以下几类:文件夹级脚本、文档级脚本、页面级脚本、域级脚本和批处理级脚本。所有类型的脚本都是事件驱动的,即在相应事件发生时响应和执行
  1、文件夹级脚本
  它收录可能影响acrobat的变量声明和函数定义。它通常用于添加影响acrobat的函数,例如菜单或菜单项,包括应用程序和用户
  这些脚本通常放在相应的文件夹中,并在acrobat启动时加载。它们通常与事件实体的应用程序初始化事件关联
  2、文档级脚本
  它收录变量声明和函数定义,这些变量声明和函数定义可能会影响给定的文件,并且不能在文件外部应用。此级别脚本可以通过acrobat创建并嵌入到PDF文件中。除此类型的脚本外,还有文档级别的操作脚本,其触发操作包括:关闭文件之前,请保存文件前、保存文件后、打印文件前和打印文件后
  3、页面级脚本
  打开或关闭页面时会执行此类型的脚本。打开事件是指页面完成绘制或随时查看新页面时发生的事件。关闭事件是指用户查看的页面不再是当前页面时发生的事件
  4、域级脚本
  域级别脚本绑定到acrobat中的表字段。当用户直接或间接与相应区域交互时,会触发相应的域事件,并且级别脚本存储在PDF文件中
  三、潜在可用内容
  在PDF阅读器支持的所有JavaScript函数中,以下函数在实际应用中仍然会给用户带来一些问题:
  app.launchURL()、app.media.getURLdata()、app.alert()、app.execDialog()、doc.getURL
  1、app.launchURL()函数用于访问远程URL
  此函数的四边形如下所示:
  http://blog.nsfocus.net/wp-con ... 4.png 300w" />
  该函数收录两个参数,curl(用于指定文件路径)和bnewframe(用于指定是否在新页面中显示文件)
  打开收录此功能的PDF文件时,将弹出一个窗口,提醒用户建立远程链接,然后使用默认浏览器打开远程连接
  2、app.media.getURLdata函数()打开URL指定的多媒体文件
  四边形如下:
  http://blog.nsfocus.net/wp-con ... 6.png 300w" />
  该函数收录两个参数,curl(用于指定文件的路径)和cmimetype(可选,用于指定文件的MIME类型)
  当打开收录此功能的PDF文件时,会弹出一个窗口提醒用户建立远程链接,然后根据版本和应用可能会有安全提示,用户需要手动选择信任,最后使用系统默认播放器播放URL指定的文件
  http://blog.nsfocus.net/wp-con ... 6.png 300w, http://blog.nsfocus.net/wp-con ... 1.png 768w, http://blog.nsfocus.net/wp-con ... 2.png 600w" />
  http://blog.nsfocus.net/wp-con ... 6.png 300w, http://blog.nsfocus.net/wp-con ... 7.png 768w, http://blog.nsfocus.net/wp-con ... 2.png 600w" />
  http://blog.nsfocus.net/wp-con ... 8.png 300w, http://blog.nsfocus.net/wp-con ... 0.png 768w, http://blog.nsfocus.net/wp-con ... 5.png 600w" />
  3、app.alert()功能是弹出一个警告对话框
  四元函数如下所示:
  http://blog.nsfocus.net/wp-con ... 7.png 300w" />
  该函数收录多个参数,即:cmsg(用于指定对话框内容)、Nicon(可选,用于指定对话框图标)、ntype(可选,用于指定按钮类型)、ctitle(可选,用于指定对话框标题)、odoc(可选,用于指定与警告相关的文档结构),ocheckbox(可选,在对话框中放置复选框,并指定相关内容、初始值和结束值)
  打开收录此函数的PDF文件时,会弹出相应的对话框,但标题处会出现提示:“警告:Javascript窗口”,如下所示:
  http://blog.nsfocus.net/wp-con ... 5.png 300w, http://blog.nsfocus.net/wp-con ... 1.png 600w" />
  http://blog.nsfocus.net/wp-con ... 3.png 300w, http://blog.nsfocus.net/wp-con ... 7.png 600w" />
  4、app.execDialog()函数为创建一个对话框
  其四边形如下:
  http://blog.nsfocus.net/wp-con ... 2.png 300w" />
  该功能通过设置相关参数,可以实现高度定制的对话框,如下图:
  http://blog.nsfocus.net/wp-con ... 5.png 300w, http://blog.nsfocus.net/wp-con ... 0.png 600w" />
  但是,该对话框收录“JavaScript窗口”标题和红色警告文本
  5、doc.getURL函数是通过get方法获取指向文件的URL
  其四边形如下:
  http://blog.nsfocus.net/wp-con ... 2.png 300w" />
  此函数收录两个参数:curl(目标文件的地址)和bappend(如果为true,则将运行结果附加到当前文件;当文件在浏览器中运行时,建议为false)。函数运行后,仍然会出现安全提示,如下所示:
  http://blog.nsfocus.net/wp-con ... 4.png 300w, http://blog.nsfocus.net/wp-con ... 8.png 600w" />
  但是,此函数的另一个功能是它可以运行本地文件。同时,为了防止执行任意文件,它还可以在注册表项中运行\local\u machine\software\policies\Adobe\Acrobat Reader\11.0\featurelockdown\cdefaultlanchattachmentperms受到限制。系统功能安全当用户试图执行不在限制范围内的文件时,也会调用xecute。在ablefiletype判断该文件是否为可执行文件且不受两个方面的限制后,将出现以下两个弹出窗口:
  http://blog.nsfocus.net/wp-con ... 3.png 300w, http://blog.nsfocus.net/wp-con ... 0.png 768w, http://blog.nsfocus.net/wp-con ... 6.png 600w" />
  http://blog.nsfocus.net/wp-con ... 3.png 300w" />
  最后打开目标文件:
  http://blog.nsfocus.net/wp-con ... 6.png 300w, http://blog.nsfocus.net/wp-con ... 3.png 768w, http://blog.nsfocus.net/wp-con ... 1.png 600w" />
  不同版本的程序不同,在阅读器X中,默认浏览器用于打开上面的图形,而在AcROCAX-Pro中,记事本直接用来打开它/P>
  http://blog.nsfocus.net/wp-con ... 5.png 300w, http://blog.nsfocus.net/wp-con ... 0.png 768w, http://blog.nsfocus.net/wp-con ... 1.png 600w" />
  参考链接:
  /

js提取指定网站内容(大部分分享)

网站优化优采云 发表了文章 • 0 个评论 • 75 次浏览 • 2021-09-13 07:13 • 来自相关话题

  js提取指定网站内容(大部分分享)
  小编将与大家分享如何使用Node.js抓取任何网络资源,并将PDF文件输出到本地。相信大部分人还不太了解,所以分享这个文章供大家参考,希望大家看完这个文章,学到很多东西,一起来看看吧!
  要求:
  如果你是技术人员,那可以看我下一个文章,否则请直接移到我的github仓库看文档直接使用
  仓库地址:附文件和源代码
  此需求中使用的技术:Node.js 和 puppeteer
  做个小测试,爬取京东资源
  const puppeteer = require(&#39;puppeteer&#39;); // 引入依赖 
(async () => { //使用async函数完美异步 
const browser = await puppeteer.launch(); //打开新的浏览器
const page = await browser.newPage(); // 打开新的网页 
await page.goto(&#39;https://www.jd.com/&#39;); //前往里面 &#39;url&#39; 的网页
const result = await page.evaluate(() => { //这个result数组包含所有的图片src地址
let arr = []; //这个箭头函数内部写处理的逻辑 
const imgs = document.querySelectorAll(&#39;img&#39;);
imgs.forEach(function (item) {
arr.push(item.src)
})
return arr 
});
// &#39;此时的result就是得到的爬虫数据,可以通过&#39;fs&#39;模块保存&#39;
})()
  复制过去。使用命令行命令`node file name`运行获取爬虫数据。这个 puppeteer 包实际上为我们打开了另一个浏览器,重新打开了网页,并获取了他们的数据。
  注意,以上所有逻辑都是puppeteer包帮我们在不可见的地方打开另一个浏览器,然后处理逻辑,所以最后我们必须调用browser.close()方法关闭那个浏览器。
  此时,我们优化了上一篇文章中的代码,抓取了相应的资源。
  const puppeteer = require(&#39;puppeteer&#39;);
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(&#39;https://www.jd.com/&#39;);
const hrefArr = await page.evaluate(() => {
let arr = [];
const aNodes = document.querySelectorAll(&#39;.cate_menu_lk&#39;);
aNodes.forEach(function (item) {
arr.push(item.href)
})
return arr
});
let arr = [];
for (let i = 0; i  { //这个方法内部console.log无效 
return $(&#39;title&#39;).text(); //返回每个界面的title文字内容
});
arr.push(result) //每次循环给数组中添加对应的值
}
console.log(arr) //得到对应的数据 可以通过Node.js的 fs 模块保存到本地
await browser.close()
})()
  上面有个天坑。 page.evaluate函数内部的console.log无法打印,内部无法获取外部变量,只能返回return。
  使用的选择器在使用前必须先到对应界面的控制台测试是否可以选择DOM。比如京东就不能使用querySelector。因为
  京东的子接口全部使用jQuery,所以我们可以使用jQuery。简而言之,我们可以使用他们开发的所有可以使用的选择器,否则我们无法使用。
  接下来直接爬取Node.js的官网首页,直接生成PDF
  无论您是否了解 Node.js 和 puppeteer 爬虫,您都可以做到。请仔细阅读本文档并按顺序执行每一步
  本项目的实现需求:给我们一个网页地址,抓取他的网页内容,然后输出成我们想要的PDF格式文档。请注意这是一个高质量的PDF文档
  TIPS:本项目的设计思路是一个网页和一个PDF文件,所以每次抓取单个页面时,请复制index.pdf,然后继续更改url地址,继续抓取,并生成一个新的 PDF 文件。当然,您也可以通过循环编译等方式一次性抓取多个网页生成多个PDF文件。
  对应京东首页等图片懒加载的网页,部分爬取的内容处于加载状态。对于有一些反爬虫机制的网页,爬虫也会有问题,但是绝大多数网站Its all可能
  const puppeteer = require(&#39;puppeteer&#39;);
const url = require(&#39;./url&#39;);
(async () => {
const browser = await puppeteer.launch({ headless: true })
const page = await browser.newPage()
//选择要打开的网页 
await page.goto(url, { waitUntil: &#39;networkidle0&#39; })
//选择你要输出的那个PDF文件路径,把爬取到的内容输出到PDF中,必须是存在的PDF,可以是空内容,如果不是空的内容PDF,那么会覆盖内容
let pdfFilePath = &#39;./index.pdf&#39;;
//根据你的配置选项,我们这里选择A4纸的规格输出PDF,方便打印
await page.pdf({
path: pdfFilePath,
format: &#39;A4&#39;,
scale: 1,
printBackground: true,
landscape: false,
displayHeaderFooter: false
});
await browser.close()
})()
  文件解构设计
  
  数据在这个时代非常宝贵。根据网页的设计逻辑,通过选择特定href的地址,可以先直接获取对应的资源,也可以再次使用page.goto方法进入,然后调用page.evaluate()处理逻辑,或者输出对应的PDF文件,当然也可以一次输出多个PDF文件~
  以上是《如何使用Node.js抓取任何网络资源并将PDF文件输出到本地》文章的全部内容,感谢阅读!相信大家都有一定的了解,希望分享的内容对大家有所帮助。想了解更多,请关注一宿云行业资讯频道! 查看全部

  js提取指定网站内容(大部分分享)
  小编将与大家分享如何使用Node.js抓取任何网络资源,并将PDF文件输出到本地。相信大部分人还不太了解,所以分享这个文章供大家参考,希望大家看完这个文章,学到很多东西,一起来看看吧!
  要求:
  如果你是技术人员,那可以看我下一个文章,否则请直接移到我的github仓库看文档直接使用
  仓库地址:附文件和源代码
  此需求中使用的技术:Node.js 和 puppeteer
  做个小测试,爬取京东资源
  const puppeteer = require(&#39;puppeteer&#39;); // 引入依赖 
(async () => { //使用async函数完美异步 
const browser = await puppeteer.launch(); //打开新的浏览器
const page = await browser.newPage(); // 打开新的网页 
await page.goto(&#39;https://www.jd.com/&#39;); //前往里面 &#39;url&#39; 的网页
const result = await page.evaluate(() => { //这个result数组包含所有的图片src地址
let arr = []; //这个箭头函数内部写处理的逻辑 
const imgs = document.querySelectorAll(&#39;img&#39;);
imgs.forEach(function (item) {
arr.push(item.src)
})
return arr 
});
// &#39;此时的result就是得到的爬虫数据,可以通过&#39;fs&#39;模块保存&#39;
})()
  复制过去。使用命令行命令`node file name`运行获取爬虫数据。这个 puppeteer 包实际上为我们打开了另一个浏览器,重新打开了网页,并获取了他们的数据。
  注意,以上所有逻辑都是puppeteer包帮我们在不可见的地方打开另一个浏览器,然后处理逻辑,所以最后我们必须调用browser.close()方法关闭那个浏览器。
  此时,我们优化了上一篇文章中的代码,抓取了相应的资源。
  const puppeteer = require(&#39;puppeteer&#39;);
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(&#39;https://www.jd.com/&#39;);
const hrefArr = await page.evaluate(() => {
let arr = [];
const aNodes = document.querySelectorAll(&#39;.cate_menu_lk&#39;);
aNodes.forEach(function (item) {
arr.push(item.href)
})
return arr
});
let arr = [];
for (let i = 0; i  { //这个方法内部console.log无效 
return $(&#39;title&#39;).text(); //返回每个界面的title文字内容
});
arr.push(result) //每次循环给数组中添加对应的值
}
console.log(arr) //得到对应的数据 可以通过Node.js的 fs 模块保存到本地
await browser.close()
})()
  上面有个天坑。 page.evaluate函数内部的console.log无法打印,内部无法获取外部变量,只能返回return。
  使用的选择器在使用前必须先到对应界面的控制台测试是否可以选择DOM。比如京东就不能使用querySelector。因为
  京东的子接口全部使用jQuery,所以我们可以使用jQuery。简而言之,我们可以使用他们开发的所有可以使用的选择器,否则我们无法使用。
  接下来直接爬取Node.js的官网首页,直接生成PDF
  无论您是否了解 Node.js 和 puppeteer 爬虫,您都可以做到。请仔细阅读本文档并按顺序执行每一步
  本项目的实现需求:给我们一个网页地址,抓取他的网页内容,然后输出成我们想要的PDF格式文档。请注意这是一个高质量的PDF文档
  TIPS:本项目的设计思路是一个网页和一个PDF文件,所以每次抓取单个页面时,请复制index.pdf,然后继续更改url地址,继续抓取,并生成一个新的 PDF 文件。当然,您也可以通过循环编译等方式一次性抓取多个网页生成多个PDF文件。
  对应京东首页等图片懒加载的网页,部分爬取的内容处于加载状态。对于有一些反爬虫机制的网页,爬虫也会有问题,但是绝大多数网站Its all可能
  const puppeteer = require(&#39;puppeteer&#39;);
const url = require(&#39;./url&#39;);
(async () => {
const browser = await puppeteer.launch({ headless: true })
const page = await browser.newPage()
//选择要打开的网页 
await page.goto(url, { waitUntil: &#39;networkidle0&#39; })
//选择你要输出的那个PDF文件路径,把爬取到的内容输出到PDF中,必须是存在的PDF,可以是空内容,如果不是空的内容PDF,那么会覆盖内容
let pdfFilePath = &#39;./index.pdf&#39;;
//根据你的配置选项,我们这里选择A4纸的规格输出PDF,方便打印
await page.pdf({
path: pdfFilePath,
format: &#39;A4&#39;,
scale: 1,
printBackground: true,
landscape: false,
displayHeaderFooter: false
});
await browser.close()
})()
  文件解构设计
  
  数据在这个时代非常宝贵。根据网页的设计逻辑,通过选择特定href的地址,可以先直接获取对应的资源,也可以再次使用page.goto方法进入,然后调用page.evaluate()处理逻辑,或者输出对应的PDF文件,当然也可以一次输出多个PDF文件~
  以上是《如何使用Node.js抓取任何网络资源并将PDF文件输出到本地》文章的全部内容,感谢阅读!相信大家都有一定的了解,希望分享的内容对大家有所帮助。想了解更多,请关注一宿云行业资讯频道!

js提取指定网站内容(【知识点】HTML文档的域有关(一)示例)

网站优化优采云 发表了文章 • 0 个评论 • 73 次浏览 • 2021-09-13 07:12 • 来自相关话题

  js提取指定网站内容(【知识点】HTML文档的域有关(一)示例)
  同源政策
  页面中的Javascript只能读取和访问同域的网页。这里需要注意的是,Javascript本身的域定义与其所在的网站无关,只是Javascript代码中嵌入的文档的域。如以下示例代码:
  

This is a webpage came from http://localhost:8000

123

console.log($('#test').text());

  HTML 文档来自:8000,表示它的域是:8000(域和端口也是相关的)。虽然页面中的jquery是从加载的,但是JQuery的域只和它所在的HTML文档一样,域是相关的,这样就可以访问到HTML文档的属性,所以上面的代码就可以运行了正常。
  附件:使用上述代码的原因是开发者将常用的Javascript库(如JQuery)的地址指向同一个公共URL。用户加载一次JS后,所有后续加载都会被浏览器缓存,从而加快页面加载速度。
  从这个角度看问题,如果提问者已知的远程站点引用了互联网上的任何页面,那么就无法实现你所期望的功能;如果远程站点指的是您可以控制的网站,请参阅下面的放宽同源策略;
<p>放宽同源 policyDocument.domain:用于子域的情况。对于多个窗口(一个页面上有多个iframe),Javascript可以通过将document.domain的值设置为同一个域来访问外部窗口;跨域资源共享:添加Access-Control- 查看全部

  js提取指定网站内容(【知识点】HTML文档的域有关(一)示例)
  同源政策
  页面中的Javascript只能读取和访问同域的网页。这里需要注意的是,Javascript本身的域定义与其所在的网站无关,只是Javascript代码中嵌入的文档的域。如以下示例代码:
  

This is a webpage came from http://localhost:8000

123

console.log($('#test').text());

  HTML 文档来自:8000,表示它的域是:8000(域和端口也是相关的)。虽然页面中的jquery是从加载的,但是JQuery的域只和它所在的HTML文档一样,域是相关的,这样就可以访问到HTML文档的属性,所以上面的代码就可以运行了正常。
  附件:使用上述代码的原因是开发者将常用的Javascript库(如JQuery)的地址指向同一个公共URL。用户加载一次JS后,所有后续加载都会被浏览器缓存,从而加快页面加载速度。
  从这个角度看问题,如果提问者已知的远程站点引用了互联网上的任何页面,那么就无法实现你所期望的功能;如果远程站点指的是您可以控制的网站,请参阅下面的放宽同源策略;
<p>放宽同源 policyDocument.domain:用于子域的情况。对于多个窗口(一个页面上有多个iframe),Javascript可以通过将document.domain的值设置为同一个域来访问外部窗口;跨域资源共享:添加Access-Control-

js提取指定网站内容( 本文适合无论是否有爬虫以及Node.js基础的朋友观看)

网站优化优采云 发表了文章 • 0 个评论 • 162 次浏览 • 2021-09-13 07:11 • 来自相关话题

  js提取指定网站内容(
本文适合无论是否有爬虫以及Node.js基础的朋友观看)
  
  本文适合有无爬虫的朋友和基于Node.js的朋友~ 要求:如果你是技术人员,那可以看我下一个文章,否则请直接移步我的github仓库,就查看文档并使用它。仓库地址:附文档和源代码,别忘了给个star。本次需求使用的技术:Node.js和puppeteer尝试使用,爬取京东资源
  const puppeteer = require('puppeteer'); // 引入依赖
(async () => { //使用async函数完美异步
const browser = await puppeteer.launch(); //打开新的浏览器
const page = await browser.newPage(); // 打开新的网页
await page.goto('https://www.jd.com/'); //前往里面 'url' 的网页
const result = await page.evaluate(() => { //这个result数组包含所有的图片src地址
let arr = []; //这个箭头函数内部写处理的逻辑
const imgs = document.querySelectorAll('img');
imgs.forEach(function (item) {
arr.push(item.src)
})
return arr
});
// '此时的result就是得到的爬虫数据,可以通过'fs'模块保存'
})()
复制过去 使用命令行命令 ` node 文件名 ` 就可以运行获取爬虫数据了
这个 puppeteer 的包 ,其实是替我们开启了另一个浏览器,重新去开启网页,获取它们的数据。
  跳转网页中所有标签对应的所有标题的文字内容
  最终被放入一个数组中。
  browser.newPage()、browser.close() 是固定的书写方式。
  调用这个方法。
  也就是说我们可以先进入京东网页,处理完逻辑,再调用page.goto函数,
  注意,以上所有逻辑都是puppeteer包帮我们在不可见的地方再打开一个
  然后浏览器处理逻辑,所以最后必须调用 browser.close() 方法来关闭浏览器。
  此时,我们优化了上一篇文章中的代码,抓取了相应的资源。
   const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.jd.com/');
const hrefArr = await page.evaluate(() => {
let arr = [];
const aNodes = document.querySelectorAll('.cate_menu_lk');
aNodes.forEach(function (item) {
arr.push(item.href)
})
return arr
});
let arr = [];
for (let i = 0; i < hrefArr.length; i++) {
const url = hrefArr[i];
console.log(url) //这里可以打印
await page.goto(url);
const result = await page.evaluate(() => { //这个方法内部console.log无效

return $('title').text(); //返回每个界面的title文字内容
});
arr.push(result) //每次循环给数组中添加对应的值
}
console.log(arr) //得到对应的数据 可以通过Node.js的 fs 模块保存到本地
await browser.close()
})()
  上面有个天坑。 page.evaluate函数内部的console.log无法打印,内部无法获取外部变量,只能返回return。
  使用的选择器在使用前必须先到对应界面的控制台测试是否可以选择DOM。比如京东就不能使用querySelector。因为
  京东的子接口全部使用jQuery,所以我们可以使用jQuery。简而言之,我们可以使用他们开发的所有可以使用的选择器,否则我们不能。接下来直接爬取Node.js官网首页,直接生成PDF。不管你是否了解 Node.js 和 puppeteer 爬虫,你都可以做到。请仔细阅读本文档并按顺序执行此项目的每个步骤。实现需求:给我们一个网页地址,抓取他的网页内容,输出成我们想要的PDF格式文档。请注意是高质量的PDF文档TIPS:本项目的设计思路是一个网页和一个PDF文件,所以每次爬取一个页面后,请复制index.pdf,然后继续修改url地址,继续爬取,生成新的PDF文件。当然,您也可以通过循环编译等方式一次抓取多个。网页生成多个PDF文件。
  对应京东首页等图片懒加载的网页,部分爬取的内容处于加载状态。对于有一些反爬虫机制的网页,爬虫也会有问题,但是绝大多数网站Its all可能
  文件解构设计
  
  数据在这个时代非常宝贵。根据网页的设计逻辑,通过选择特定href的地址,可以先直接获取对应的资源,也可以再次使用page.goto方法进入,然后调用page.evaluate()处理逻辑,或者输出对应的PDF文件,当然也可以一次输出多个PDF文件~
  这里就不过多介绍了。毕竟,Node.js 可以上天堂,也许以后真的可以做到一切。这么高质量的短教程,请采集
  或者转发给你的朋友,谢谢。 查看全部

  js提取指定网站内容(
本文适合无论是否有爬虫以及Node.js基础的朋友观看)
  
  本文适合有无爬虫的朋友和基于Node.js的朋友~ 要求:如果你是技术人员,那可以看我下一个文章,否则请直接移步我的github仓库,就查看文档并使用它。仓库地址:附文档和源代码,别忘了给个star。本次需求使用的技术:Node.js和puppeteer尝试使用,爬取京东资源
  const puppeteer = require('puppeteer'); // 引入依赖
(async () => { //使用async函数完美异步
const browser = await puppeteer.launch(); //打开新的浏览器
const page = await browser.newPage(); // 打开新的网页
await page.goto('https://www.jd.com/'); //前往里面 'url' 的网页
const result = await page.evaluate(() => { //这个result数组包含所有的图片src地址
let arr = []; //这个箭头函数内部写处理的逻辑
const imgs = document.querySelectorAll('img');
imgs.forEach(function (item) {
arr.push(item.src)
})
return arr
});
// '此时的result就是得到的爬虫数据,可以通过'fs'模块保存'
})()
复制过去 使用命令行命令 ` node 文件名 ` 就可以运行获取爬虫数据了
这个 puppeteer 的包 ,其实是替我们开启了另一个浏览器,重新去开启网页,获取它们的数据。
  跳转网页中所有标签对应的所有标题的文字内容
  最终被放入一个数组中。
  browser.newPage()、browser.close() 是固定的书写方式。
  调用这个方法。
  也就是说我们可以先进入京东网页,处理完逻辑,再调用page.goto函数,
  注意,以上所有逻辑都是puppeteer包帮我们在不可见的地方再打开一个
  然后浏览器处理逻辑,所以最后必须调用 browser.close() 方法来关闭浏览器。
  此时,我们优化了上一篇文章中的代码,抓取了相应的资源。
   const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.jd.com/');
const hrefArr = await page.evaluate(() => {
let arr = [];
const aNodes = document.querySelectorAll('.cate_menu_lk');
aNodes.forEach(function (item) {
arr.push(item.href)
})
return arr
});
let arr = [];
for (let i = 0; i < hrefArr.length; i++) {
const url = hrefArr[i];
console.log(url) //这里可以打印
await page.goto(url);
const result = await page.evaluate(() => { //这个方法内部console.log无效

return $('title').text(); //返回每个界面的title文字内容
});
arr.push(result) //每次循环给数组中添加对应的值
}
console.log(arr) //得到对应的数据 可以通过Node.js的 fs 模块保存到本地
await browser.close()
})()
  上面有个天坑。 page.evaluate函数内部的console.log无法打印,内部无法获取外部变量,只能返回return。
  使用的选择器在使用前必须先到对应界面的控制台测试是否可以选择DOM。比如京东就不能使用querySelector。因为
  京东的子接口全部使用jQuery,所以我们可以使用jQuery。简而言之,我们可以使用他们开发的所有可以使用的选择器,否则我们不能。接下来直接爬取Node.js官网首页,直接生成PDF。不管你是否了解 Node.js 和 puppeteer 爬虫,你都可以做到。请仔细阅读本文档并按顺序执行此项目的每个步骤。实现需求:给我们一个网页地址,抓取他的网页内容,输出成我们想要的PDF格式文档。请注意是高质量的PDF文档TIPS:本项目的设计思路是一个网页和一个PDF文件,所以每次爬取一个页面后,请复制index.pdf,然后继续修改url地址,继续爬取,生成新的PDF文件。当然,您也可以通过循环编译等方式一次抓取多个。网页生成多个PDF文件。
  对应京东首页等图片懒加载的网页,部分爬取的内容处于加载状态。对于有一些反爬虫机制的网页,爬虫也会有问题,但是绝大多数网站Its all可能
  文件解构设计
  
  数据在这个时代非常宝贵。根据网页的设计逻辑,通过选择特定href的地址,可以先直接获取对应的资源,也可以再次使用page.goto方法进入,然后调用page.evaluate()处理逻辑,或者输出对应的PDF文件,当然也可以一次输出多个PDF文件~
  这里就不过多介绍了。毕竟,Node.js 可以上天堂,也许以后真的可以做到一切。这么高质量的短教程,请采集
  或者转发给你的朋友,谢谢。

js提取指定网站内容(不是Web的运作原理及运作流程(一)Web)

网站优化优采云 发表了文章 • 0 个评论 • 66 次浏览 • 2021-09-11 02:11 • 来自相关话题

  js提取指定网站内容(不是Web的运作原理及运作流程(一)Web)
  AJAX 不是 JavaScript 规范,它只是一个哥们“发明”的缩写:Asynchronous JavaScript and XML,意思是使用 JavaScript 来执行异步网络请求。
  如果你仔细观察一个Form的提交,你会发现一旦用户点击了“Submit”按钮,表单开始提交,浏览器会刷新页面,然后在新页面告诉你是否操作成功或失败。如果不幸网络太慢或其他原因,您将获得404页面。
  Web 是这样工作的:一个 HTTP 请求对应一个页面。
  如果您希望用户停留在当前页面并同时发出新的 HTTP 请求,则必须使用 JavaScript 发送此新请求。收到数据后,使用 JavaScript 更新页面。这样用户感觉还是卡在了当前页面,但是数据可以不断更新。
  最早大规模使用AJAX的是Gmail。 Gmail 页面第一次加载后,剩下的所有数据都依赖 AJAX 来更新。
  用 JavaScript 编写完整的 AJAX 代码并不复杂,但需要注意:AJAX 请求是异步执行的,即通过回调函数获取响应。
  在现代浏览器上编写 AJAX 主要依赖于 XMLHttpRequest 对象:
  'use strict';
----
function success(text) {
var textarea = document.getElementById('test-response-text');
textarea.value = text;
}
function fail(code) {
var textarea = document.getElementById('test-response-text');
textarea.value = 'Error code: ' + code;
}
var request = new XMLHttpRequest(); // 新建XMLHttpRequest对象
request.onreadystatechange = function () { // 状态发生变化时,函数被回调
if (request.readyState === 4) { // 成功完成
// 判断响应结果:
if (request.status === 200) {
// 成功,通过responseText拿到响应的文本:
return success(request.responseText);
} else {
// 失败,根据响应码判断失败原因:
return fail(request.status);
}
} else {
// HTTP请求还在继续...
}
}
// 发送请求:
request.open('GET', '/api/categories');
request.send();
alert('请求已发送,请等待响应...');
  对于低版本的IE,需要改成ActiveXObject对象:
  'use strict';
----
function success(text) {
var textarea = document.getElementById('test-ie-response-text');
textarea.value = text;
}
function fail(code) {
var textarea = document.getElementById('test-ie-response-text');
textarea.value = 'Error code: ' + code;
}
var request = new ActiveXObject('Microsoft.XMLHTTP'); // 新建Microsoft.XMLHTTP对象
request.onreadystatechange = function () { // 状态发生变化时,函数被回调
if (request.readyState === 4) { // 成功完成
// 判断响应结果:
if (request.status === 200) {
// 成功,通过responseText拿到响应的文本:
return success(request.responseText);
} else {
// 失败,根据响应码判断失败原因:
return fail(request.status);
}
} else {
// HTTP请求还在继续...
}
}
// 发送请求:
request.open('GET', '/api/categories');
request.send();
alert('请求已发送,请等待响应...');
  如果你想把标准写法和IE写法混在一起,可以这样写:
  var request;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else {
request = new ActiveXObject('Microsoft.XMLHTTP');
}
  通过检查window对象是否有XMLHttpRequest属性来判断浏览器是否支持标准的XMLHttpRequest。注意,不要使用浏览器的 navigator.userAgent 来检测浏览器是否支持某个 JavaScript 功能。一是字符串本身可以伪造,二是通过IE版本判断JavaScript特性会很复杂。
  创建XMLHttpRequest对象时,必须先设置onreadystatechange的回调函数。在回调函数中,通常我们只需要通过readyState === 4判断请求是否完成,如果完成则根据status === 200判断是否响应成功。
  XMLHttpRequest 对象的 open() 方法有 3 个参数。第一个参数指定是GET还是POST,第二个参数指定URL地址,第三个参数指定是否使用异步。默认为true,不需要写。
  注意,第三个参数不要指定false,否则浏览器会停止响应,直到AJAX请求完成。如果这个请求需要10秒,那么在10秒内你会发现浏览器处于“假死”状态。
  最后调用send()方法实际发送请求。 GET 请求不需要参数,POST 请求需要将 body 部分作为字符串或 FormData 对象传入。
  安全限制
  上面代码中的 URL 使用了相对路径。如果改成“再运行,肯定会报错。在Chrome控制台中,也可以看到错误信息。
  这是由浏览器的同源策略引起的。默认情况下,JavaScript 发送 AJAX 请求时,URL 的域名必须与当前页面完全相同。
  完全协议是指域名必须相同(和不同),协议必须相同(http和https不同),端口号必须相同(默认为:端口80,即不同于:8080)。一些浏览器有更宽松的开口并允许不同的端口。大多数浏览器都严格遵守此限制。
  是不是因为JavaScript无法请求外部域(即其他网站)URL的URL?方法还是有的,大概就这么几个:
  一是通过Flash插件发送HTTP请求。这种方法可以绕过浏览器的安全限制,但必须安装Flash并与Flash交互。不过Flash使用起来比较麻烦,现在用的越来越少了。
  二是通过设置同源域名下的代理服务器进行转发,JavaScript负责将请求发送到代理服务器:
  '/proxy?url=http://www.sina.com.cn'
  然后代理服务器返回结果,使其符合浏览器的同源策略。这种方法的问题在于它需要在服务器端进行额外的开发。
  第三种方法称为JSONP。它有一个限制。它只能使用 GET 请求并且需要返回 JavaScript。这种跨域的方式其实就是利用浏览器来允许跨域引用JavaScript资源:
  

...
...
  JSONP 通常以函数调用的形式返回,例如返回的 JavaScript 内容如下:
  foo('data');
  这样的话,如果我们先在页面中准备好foo()函数,然后动态的给页面添加一个
  function refreshPrice(data) {
var p = document.getElementById('test-jsonp');
p.innerHTML = '当前价格:' +
data['0000001'].name +': ' +
data['0000001'].price + ';' +
data['1399001'].name + ': ' +
data['1399001'].price;
}
  当前价格:
  刷新
  最后用 getPrice() 函数触发:
  function getPrice() {
var
js = document.createElement('script'),
head = document.getElementsByTagName('head')[0];
js.src = 'http://api.money.126.net/data/feed/0000001,1399001?callback=refreshPrice';
head.appendChild(js);
}
  跨域数据加载完成。
  CORS
  如果浏览器支持 HTML5,那么您可以使用新的跨域策略:CORS 一劳永逸。
  CORS 代表跨域资源共享,即 HTML5 规范定义的跨域访问资源的方式。
  在了解CORS之前,我们先来了解一下概念:
  Origin 表示这个域,即浏览器当前页面的域。当 JavaScript 向外部域(例如)发起请求时,浏览器收到响应后,首先检查 Access-Control-Allow-Origin 是否收录该域。如果是,则跨域请求成功。如果不是,则请求失败。 JavaScript 将无法获得任何响应数据。
  用图片表示:
  
  假设域为本地域,域为外域,只要响应头Access-Control-Allow-Origin为*或为*,本次请求即可成功。
  可见,跨域成功与否取决于对方的服务器是否愿意为你设置正确的Access-Control-Allow-Origin,决定权始终掌握在对方手中.
  这种跨域请求称为“简单请求”。简单的请求包括 GET、HEAD 和 POST(POST 的 Content-Type 仅限于 application/x-www-form-urlencoded、multipart/form-data 和 text/plain),并且没有自定义标头(例如,X-定制:12345),通常可以满足90%的需求。
  无论是否需要使用 JavaScript 跨 CORS 请求资源,都必须了解 CORS 的原理。最新的浏览器完全支持 HTML5。引用国外资源时,除了JavaScript和CSS之外,还必须验证CORS。例如,当您引用第三方 CDN 上的字体文件时:
  /* CSS */
@font-face {
font-family: 'FontAwesome';
src: url('http://cdn.com/fonts/fontawesome.ttf') format('truetype');
}
  如果CDN服务商没有正确设置Access-Control-Allow-Origin,浏览器将无法加载字体资源。
  对于PUT、DELETE以及application/json等其他类型的POST请求,在发送AJAX请求之前,浏览器会先向这个URL发送一个OPTIONS请求(称为预检请求),询问目标服务器是否接受:
  OPTIONS /path/to/resource HTTP/1.1
Host: bar.com
Origin: http://my.com
Access-Control-Request-Method: POST
  服务器必须响应并明确指出允许的方法:
  HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://my.com
Access-Control-Allow-Methods: POST, GET, PUT, OPTIONS
Access-Control-Max-Age: 86400
  浏览器确认服务器响应的Access-Control-Allow-Methods头中确实收录要发送的AJAX请求的Method,然后继续发送AJAX,否则会抛出错误。
  由于 REST 中通过 POST 和 PUT 以 JSON 格式传输数据是很常见的,为了正确处理跨域的 POST 和 PUT 请求,服务器必须正确响应 OPTIONS 请求。
  需要深入了解CORS的童鞋请参考W3C文档。 查看全部

  js提取指定网站内容(不是Web的运作原理及运作流程(一)Web)
  AJAX 不是 JavaScript 规范,它只是一个哥们“发明”的缩写:Asynchronous JavaScript and XML,意思是使用 JavaScript 来执行异步网络请求。
  如果你仔细观察一个Form的提交,你会发现一旦用户点击了“Submit”按钮,表单开始提交,浏览器会刷新页面,然后在新页面告诉你是否操作成功或失败。如果不幸网络太慢或其他原因,您将获得404页面。
  Web 是这样工作的:一个 HTTP 请求对应一个页面。
  如果您希望用户停留在当前页面并同时发出新的 HTTP 请求,则必须使用 JavaScript 发送此新请求。收到数据后,使用 JavaScript 更新页面。这样用户感觉还是卡在了当前页面,但是数据可以不断更新。
  最早大规模使用AJAX的是Gmail。 Gmail 页面第一次加载后,剩下的所有数据都依赖 AJAX 来更新。
  用 JavaScript 编写完整的 AJAX 代码并不复杂,但需要注意:AJAX 请求是异步执行的,即通过回调函数获取响应。
  在现代浏览器上编写 AJAX 主要依赖于 XMLHttpRequest 对象:
  'use strict';
----
function success(text) {
var textarea = document.getElementById('test-response-text');
textarea.value = text;
}
function fail(code) {
var textarea = document.getElementById('test-response-text');
textarea.value = 'Error code: ' + code;
}
var request = new XMLHttpRequest(); // 新建XMLHttpRequest对象
request.onreadystatechange = function () { // 状态发生变化时,函数被回调
if (request.readyState === 4) { // 成功完成
// 判断响应结果:
if (request.status === 200) {
// 成功,通过responseText拿到响应的文本:
return success(request.responseText);
} else {
// 失败,根据响应码判断失败原因:
return fail(request.status);
}
} else {
// HTTP请求还在继续...
}
}
// 发送请求:
request.open('GET', '/api/categories');
request.send();
alert('请求已发送,请等待响应...');
  对于低版本的IE,需要改成ActiveXObject对象:
  'use strict';
----
function success(text) {
var textarea = document.getElementById('test-ie-response-text');
textarea.value = text;
}
function fail(code) {
var textarea = document.getElementById('test-ie-response-text');
textarea.value = 'Error code: ' + code;
}
var request = new ActiveXObject('Microsoft.XMLHTTP'); // 新建Microsoft.XMLHTTP对象
request.onreadystatechange = function () { // 状态发生变化时,函数被回调
if (request.readyState === 4) { // 成功完成
// 判断响应结果:
if (request.status === 200) {
// 成功,通过responseText拿到响应的文本:
return success(request.responseText);
} else {
// 失败,根据响应码判断失败原因:
return fail(request.status);
}
} else {
// HTTP请求还在继续...
}
}
// 发送请求:
request.open('GET', '/api/categories');
request.send();
alert('请求已发送,请等待响应...');
  如果你想把标准写法和IE写法混在一起,可以这样写:
  var request;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else {
request = new ActiveXObject('Microsoft.XMLHTTP');
}
  通过检查window对象是否有XMLHttpRequest属性来判断浏览器是否支持标准的XMLHttpRequest。注意,不要使用浏览器的 navigator.userAgent 来检测浏览器是否支持某个 JavaScript 功能。一是字符串本身可以伪造,二是通过IE版本判断JavaScript特性会很复杂。
  创建XMLHttpRequest对象时,必须先设置onreadystatechange的回调函数。在回调函数中,通常我们只需要通过readyState === 4判断请求是否完成,如果完成则根据status === 200判断是否响应成功。
  XMLHttpRequest 对象的 open() 方法有 3 个参数。第一个参数指定是GET还是POST,第二个参数指定URL地址,第三个参数指定是否使用异步。默认为true,不需要写。
  注意,第三个参数不要指定false,否则浏览器会停止响应,直到AJAX请求完成。如果这个请求需要10秒,那么在10秒内你会发现浏览器处于“假死”状态。
  最后调用send()方法实际发送请求。 GET 请求不需要参数,POST 请求需要将 body 部分作为字符串或 FormData 对象传入。
  安全限制
  上面代码中的 URL 使用了相对路径。如果改成“再运行,肯定会报错。在Chrome控制台中,也可以看到错误信息。
  这是由浏览器的同源策略引起的。默认情况下,JavaScript 发送 AJAX 请求时,URL 的域名必须与当前页面完全相同。
  完全协议是指域名必须相同(和不同),协议必须相同(http和https不同),端口号必须相同(默认为:端口80,即不同于:8080)。一些浏览器有更宽松的开口并允许不同的端口。大多数浏览器都严格遵守此限制。
  是不是因为JavaScript无法请求外部域(即其他网站)URL的URL?方法还是有的,大概就这么几个:
  一是通过Flash插件发送HTTP请求。这种方法可以绕过浏览器的安全限制,但必须安装Flash并与Flash交互。不过Flash使用起来比较麻烦,现在用的越来越少了。
  二是通过设置同源域名下的代理服务器进行转发,JavaScript负责将请求发送到代理服务器:
  '/proxy?url=http://www.sina.com.cn'
  然后代理服务器返回结果,使其符合浏览器的同源策略。这种方法的问题在于它需要在服务器端进行额外的开发。
  第三种方法称为JSONP。它有一个限制。它只能使用 GET 请求并且需要返回 JavaScript。这种跨域的方式其实就是利用浏览器来允许跨域引用JavaScript资源:
  

...
...
  JSONP 通常以函数调用的形式返回,例如返回的 JavaScript 内容如下:
  foo('data');
  这样的话,如果我们先在页面中准备好foo()函数,然后动态的给页面添加一个
  function refreshPrice(data) {
var p = document.getElementById('test-jsonp');
p.innerHTML = '当前价格:' +
data['0000001'].name +': ' +
data['0000001'].price + ';' +
data['1399001'].name + ': ' +
data['1399001'].price;
}
  当前价格:
  刷新
  最后用 getPrice() 函数触发:
  function getPrice() {
var
js = document.createElement('script'),
head = document.getElementsByTagName('head')[0];
js.src = 'http://api.money.126.net/data/feed/0000001,1399001?callback=refreshPrice';
head.appendChild(js);
}
  跨域数据加载完成。
  CORS
  如果浏览器支持 HTML5,那么您可以使用新的跨域策略:CORS 一劳永逸。
  CORS 代表跨域资源共享,即 HTML5 规范定义的跨域访问资源的方式。
  在了解CORS之前,我们先来了解一下概念:
  Origin 表示这个域,即浏览器当前页面的域。当 JavaScript 向外部域(例如)发起请求时,浏览器收到响应后,首先检查 Access-Control-Allow-Origin 是否收录该域。如果是,则跨域请求成功。如果不是,则请求失败。 JavaScript 将无法获得任何响应数据。
  用图片表示:
  
  假设域为本地域,域为外域,只要响应头Access-Control-Allow-Origin为*或为*,本次请求即可成功。
  可见,跨域成功与否取决于对方的服务器是否愿意为你设置正确的Access-Control-Allow-Origin,决定权始终掌握在对方手中.
  这种跨域请求称为“简单请求”。简单的请求包括 GET、HEAD 和 POST(POST 的 Content-Type 仅限于 application/x-www-form-urlencoded、multipart/form-data 和 text/plain),并且没有自定义标头(例如,X-定制:12345),通常可以满足90%的需求。
  无论是否需要使用 JavaScript 跨 CORS 请求资源,都必须了解 CORS 的原理。最新的浏览器完全支持 HTML5。引用国外资源时,除了JavaScript和CSS之外,还必须验证CORS。例如,当您引用第三方 CDN 上的字体文件时:
  /* CSS */
@font-face {
font-family: 'FontAwesome';
src: url('http://cdn.com/fonts/fontawesome.ttf') format('truetype');
}
  如果CDN服务商没有正确设置Access-Control-Allow-Origin,浏览器将无法加载字体资源。
  对于PUT、DELETE以及application/json等其他类型的POST请求,在发送AJAX请求之前,浏览器会先向这个URL发送一个OPTIONS请求(称为预检请求),询问目标服务器是否接受:
  OPTIONS /path/to/resource HTTP/1.1
Host: bar.com
Origin: http://my.com
Access-Control-Request-Method: POST
  服务器必须响应并明确指出允许的方法:
  HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://my.com
Access-Control-Allow-Methods: POST, GET, PUT, OPTIONS
Access-Control-Max-Age: 86400
  浏览器确认服务器响应的Access-Control-Allow-Methods头中确实收录要发送的AJAX请求的Method,然后继续发送AJAX,否则会抛出错误。
  由于 REST 中通过 POST 和 PUT 以 JSON 格式传输数据是很常见的,为了正确处理跨域的 POST 和 PUT 请求,服务器必须正确响应 OPTIONS 请求。
  需要深入了解CORS的童鞋请参考W3C文档。

js提取指定网站内容(如何模拟请求和如何解析HTML的链接和标题?(一))

网站优化优采云 发表了文章 • 0 个评论 • 75 次浏览 • 2021-09-07 06:17 • 来自相关话题

  js提取指定网站内容(如何模拟请求和如何解析HTML的链接和标题?(一))
  虽然这已经是很久以前的事了,但题目似乎已经解决了这个问题。但是看到很多答案的方法有点太重了,这里提供一个效率更高,消耗资源更少的方法。由于主题没有指定需要什么,这里的示例采用主页上所有帖子的链接和标题。
  首先请记住浏览器环境对内存和CPU的消耗非常严重,尽量避免模拟浏览器环境的爬虫代码。请记住,对于一些前端渲染的网页,虽然我们需要的数据在HTML源代码中是看不到的,但更有可能是通过另一个请求(最有可能是JSON格式)得到纯数据。我们不仅不需要模拟浏览器,还可以节省解析HTML的消耗。
<p>接下来,我打开北京帖子论坛的首页,发现首页的HTML源代码中确实没有文章页面显示的内容。那么,很有可能这是通过JS异步加载到页面的。通过浏览器开发工具(OS X下Chrome浏览器通过command+option+i或者Win/Linux下通过F12)加载首页分析请求,很容易找到,如下图的请求: 查看全部

  js提取指定网站内容(如何模拟请求和如何解析HTML的链接和标题?(一))
  虽然这已经是很久以前的事了,但题目似乎已经解决了这个问题。但是看到很多答案的方法有点太重了,这里提供一个效率更高,消耗资源更少的方法。由于主题没有指定需要什么,这里的示例采用主页上所有帖子的链接和标题。
  首先请记住浏览器环境对内存和CPU的消耗非常严重,尽量避免模拟浏览器环境的爬虫代码。请记住,对于一些前端渲染的网页,虽然我们需要的数据在HTML源代码中是看不到的,但更有可能是通过另一个请求(最有可能是JSON格式)得到纯数据。我们不仅不需要模拟浏览器,还可以节省解析HTML的消耗。
<p>接下来,我打开北京帖子论坛的首页,发现首页的HTML源代码中确实没有文章页面显示的内容。那么,很有可能这是通过JS异步加载到页面的。通过浏览器开发工具(OS X下Chrome浏览器通过command+option+i或者Win/Linux下通过F12)加载首页分析请求,很容易找到,如下图的请求:

js提取指定网站内容(作者简介董沅鑫,云开发CloudBase团队研发工程师,侧重于出没在)

网站优化优采云 发表了文章 • 0 个评论 • 92 次浏览 • 2021-10-16 10:01 • 来自相关话题

  js提取指定网站内容(作者简介董沅鑫,云开发CloudBase团队研发工程师,侧重于出没在)
  关于作者
  云开发CloudBase团队研发工程师董元新,专注于前端工程和节点服务开发,业余时间经常光顾。
  这篇文章的内容
  
  介绍
  随着腾讯云开发能力的逐步提升,经验丰富的工程师已经可以独立完成产品的开发和上线。但是,与在线云开发相关的实战实战很少文章。很多开发者都知道云开发的能力,但不知道在现有的开发体系下如何引入云开发。
  
  本文从云开发团队开发者+能力用户的角度,以搭建云开发官网的思路()为例,结合流行的框架和工具分享云开发的实践经验。
  涉及的知识点有:
  概述
  系统设计图:
  
  背景介绍
  随着云开发团队业务的快速发展,团队需要一个官网来更直观、即时地向开发者展示云开发的相关能力,包括但不限于工具链、SDK、技术文档等。
  同时,为了降低开发者的动手成本,积累行业优秀的实践经验,官网还承载着营造社区氛围、聚合重要信息、提升用户留存的重任。
  我们最初使用 VuePress 作为静态 网站 工具,遇到了一些痛点:
  我们使用“cms Extensions”、“基础云开发能力”、“Next.js”、“CI Tools”很好的解决了上述问题。在实现网站动态内​​容的同时,保证了SEO,运营同学也可以通过cms对内容进行可视化管理。
  安装cms
  进入云开发扩展能力控制台,按照提示安装cms内容管理系统。
  配置分机时,有两种帐号:管理员帐号和操作员帐号。管理员账户具有更高的权限,可以创建新的数据集合;而操作员账号只能对现有数据集进行增删改查操作。
  
  注:安装时间有点长,请耐心等待
  安装成功后,云数据库会自动创建3个合集,分别是tcb-ext-cms-contents, tcb-ext-cms-users, tcb-ext-cms- webhooks ,用于存储cms系统配置信息和内容数据。自动创建了三个云函数,分别是tcb-ext-cms-api、tcb-ext-cms-init、tcb-ext-cms-auth,它们封装了初始化,身份验证和数据流的逻辑。
  进入“Static 网站 Hosting”,可以看到cms系统的静态文件已经自动部署到tcb-cms/目录下:
  
  点击上方的“基本配置”查看域名信息。
  
  在浏览器中访问对应的链接()可以看到cms系统:
  
  至此,无需任何开发成本,cms 内容管理系统正式上线~
  使用 cms 创建动态内容
  对于动态数据内容,我们将其划分为不同的模块。每个内容模块对应一个cms系统的数据集合。例如,在“云开发官网”-“社区页面”中,推荐好课程的内容是动态的。
  
  从图中可以看出,每节课都有多个属性。在云数据库中,每门课程对应一个文档,课程属性对应文档的字段。字段类型及含义如下:
  name: 课程名称
time: 课程时间
cover: 课程封面
url: 课程链接
level: 课程难度
  以管理员身份登录cms系统,在“内容设置页面”新建内容。在cms中,支持多种高级数据类型,如url、image、markdown、富文本、标签数组、邮箱、URL等,这些类型被智能识别,显示更友好。
  注:cms自带图床功能。当数据类型为“图片”时,图片会自动上传到当前云开发环境下的云存储中。图片信息以cloud://开头的特殊链接存储在数据集合中。
  创建新内容时,cms默认会自动填写4个字段:name、order、createTime、updateTime。您可以根据需要删除不需要的字段。
  建议:保留order字段,可用于数据排序。对于运营商来说,数据的订单值越大,在cms系统中显示的位置就越高;对于开发者,可以按照顺序进行排序和搜索。从而保证经验和逻辑的一致性。
  根据字段创建集合后,cms 会在系统左侧看到“推荐课程”。其对应的内容保存在云数据库的recome-course(创建时指定)集合中,其字段信息保存在tcb-ext-cms-contents(cms初始化时创建的云数据库) ) 在集合中。
  
  根据设置添加新的课程内容后,再次进入“推荐课程”,如下图:
  
  图片、链接等内容对运营商更加友好。
  项目建设
  按照 Next.js Docs 的指南创建 Next.js 项目:
  npm i --save next react react-dom axios
  因为我们要部署网站到“静态托管”,所以需要用到Next.js的静态导出功能。package.json 中的打包脚本更新为:
  "scripts": {
"dev": "next",
"build": "next build && next export",
"start": "next start"
}
  为了快速部署静态网站,发布云功能。需要全局安装@cloudbase/cli:
  npm install -g @cloudbase/cli
  安装后,添加两个脚本:
  "scripts": {
"deploy:hosting": "npm run build && cloudbase hosting:deploy out -e jhgjj-0ae4a1",
"deploy:function": "echo y | cloudbase functions:deploy --force"
}
  注意:准备两个云环境,防止静态部署时文件覆盖。envId为jhgjj-0ae4a1的云环境仅用于部署Next.js的静态导出文件。envId为pagecounter-d27cfe的云环境用于部署cms系统。获取cms内容
  借助CloudBase的Node SDK-@cloudbase/node-sdk,我们可以在Next.js的getStaticProps()方法中读取云数据库中的数据。
  为了使逻辑更清晰,我们将获取外部数据的方法封装到单个文件中。以“推荐课程”为例:
  
// provider.js
const cloudbase = require("@cloudbase/node-sdk");
const config = {
secretId: "your secretId", // 前往「腾讯云控制台」-「访问密钥」获取
secretKey: "your secretKey", // 前往「腾讯云控制台」-「访问密钥」获取
env: "your envid" // 前往「腾讯云控制台」-「云开发 CloudBase」获取
};
const app = cloudbase.init(config);
/**
* 获取云数据库数据
*/
async function getCourses() {
const db = app.database();
const result = await db.collection("recommend-course").get();
if (result.code) {
throw new Error(
`获取「推荐课程」失败, 错误码是${result.code}: ${result.message}`
);
}
return result.data.map(item => {
if (item.createTime instanceof Date) {
item.createTime = item.createTime.toLocaleString();
}
if (item.updateTime instanceof Date) {
item.updateTime = item.updateTime.toLocaleString();
}
item.cover = getBucketUrl(item.cover); // 处理云存储的特殊链接
return item;
});
}
  上一篇提到,cms自带图床功能。拖拽上传的图片会保存在同一环境的云存储中,获取图片的链接会保存在采集中。云存储链接是以cloud://开头的特殊链接,需要在前端进行识别和特殊处理。
  例如图片存储链接为:cloud://pagecounter-d27cfe.7061-pagecounter-d27cfe-1255463368/uploads/04.png。把它变成一个可访问的 http 链接:。
  转换思路是:识别出envid背后的信息,与tcb.qcloud.la域名重新拼接:
  
// provider.js
/**
* 获取云存储的访问链接
* @param {String} url 云存储的特定url
*/
function getBucketUrl(url) {
if (!url.startsWith("cloud://")) {
return url;
}
const re = /cloud:\/\/.*?\.(.*?)\/(.*)/;
const result = re.exec(url);
return `https://${result[1]}.tcb.qcloud.la/${result[2]}`;
}
  注意:云存储的“权限设置”应该是:所有用户都可以读,只有创建者和管理员可以写。否则无法访问链接。建议:除了内置的图床功能,开发者可以根据自己的需要使用其他稳定的图床服务,比如微博图床。如果使用其他图片床,对应的字段类型不能设置为“图片”,可以是“字符串”或“超链接”。
  至此,我们已经使用 SDK 获取了云数据库数据,剩下要做的就是将其注入到 Next.js 页面组件的 props 中:
  // pages/index.js
const HomePage = ({ courses }) => {
return (
// 尽情使用数据吧...
)
}
export async function getStaticProps() {
const { getCourses } = require('./../provider')
return {
props: {
courses: await getCourses()
}
}
}
export default HomePage
  打开浏览器输入:3000/,可以看到效果如下:
  
  输入view-source::3000/,可以看到网页的html源码中收录了课程数据,解决了SEO问题:
  
  注意:Next.js 的一些方法会在两端运行,但 getStaticProps() 只会在服务端运行自动构建和部署
  至此,开发工作基本结束。执行npm run build命令,将网站静态文件打包到out/目录下:
  
  运行 npm run deploy:hosting 将 out/ 目录下的文件上传到“static 网站托管”。访问静态网站:托管的链接,效果如下:
  
  借助成熟的 CI 工具,例如 Travis、Circle 等,可以定期触发构建工作。这样,内容和开发就完全分离了。
  在构建版本时,您需要使用 CloudBase CLI 工具。在CI工具中,不使用cloudbase login进行交互式输入登录,而是使用key登录:cloudbase login --apiKeyId $TCB_SECRET_ID --apiKey $TCB_SECRET_KEY。
  注意:去云API key获取TCB_SECRET_ID和TCB_SECRET_KEY的值
  在 CI 工具的控制台中,配置 TCB_SECRET_ID 和 TCB_SECRET_KEY。并向 package.json 添加一个新脚本:
  "scripts": {
"login": "echo N | cloudbase login --apiKeyId $TCB_SECRET_ID --apiKey $TCB_SECRET_KEY"
}
  综上所述,CI构建的过程是:
  如果数据需要紧急修改启动,可以在本地或者在CI工具控制台手动触发构建。
  最后
  借助云开发cms,可以实现评论系统、预约系统、博客发帖等多种内容模板,从而快速搭建网站。在现有的开发体系下,合理使用云开发,大大降低了人工成本、开发成本、运维成本。实现前后端穿梭,形成“闭环”。
  本文实战只是开始,涉及到部分云开发能力,还有更多好玩的东西等你去探索,比如用云功能实现SSR、托管后端服务、图片服务,以及各方面的 SDK。
  探索功能、多样化想法并以较低的成本开发高度可用的 Web 服务。云开发绝对是您的最佳选择! 查看全部

  js提取指定网站内容(作者简介董沅鑫,云开发CloudBase团队研发工程师,侧重于出没在)
  关于作者
  云开发CloudBase团队研发工程师董元新,专注于前端工程和节点服务开发,业余时间经常光顾。
  这篇文章的内容
  
  介绍
  随着腾讯云开发能力的逐步提升,经验丰富的工程师已经可以独立完成产品的开发和上线。但是,与在线云开发相关的实战实战很少文章。很多开发者都知道云开发的能力,但不知道在现有的开发体系下如何引入云开发。
  
  本文从云开发团队开发者+能力用户的角度,以搭建云开发官网的思路()为例,结合流行的框架和工具分享云开发的实践经验。
  涉及的知识点有:
  概述
  系统设计图:
  
  背景介绍
  随着云开发团队业务的快速发展,团队需要一个官网来更直观、即时地向开发者展示云开发的相关能力,包括但不限于工具链、SDK、技术文档等。
  同时,为了降低开发者的动手成本,积累行业优秀的实践经验,官网还承载着营造社区氛围、聚合重要信息、提升用户留存的重任。
  我们最初使用 VuePress 作为静态 网站 工具,遇到了一些痛点:
  我们使用“cms Extensions”、“基础云开发能力”、“Next.js”、“CI Tools”很好的解决了上述问题。在实现网站动态内​​容的同时,保证了SEO,运营同学也可以通过cms对内容进行可视化管理。
  安装cms
  进入云开发扩展能力控制台,按照提示安装cms内容管理系统。
  配置分机时,有两种帐号:管理员帐号和操作员帐号。管理员账户具有更高的权限,可以创建新的数据集合;而操作员账号只能对现有数据集进行增删改查操作。
  
  注:安装时间有点长,请耐心等待
  安装成功后,云数据库会自动创建3个合集,分别是tcb-ext-cms-contents, tcb-ext-cms-users, tcb-ext-cms- webhooks ,用于存储cms系统配置信息和内容数据。自动创建了三个云函数,分别是tcb-ext-cms-api、tcb-ext-cms-init、tcb-ext-cms-auth,它们封装了初始化,身份验证和数据流的逻辑。
  进入“Static 网站 Hosting”,可以看到cms系统的静态文件已经自动部署到tcb-cms/目录下:
  
  点击上方的“基本配置”查看域名信息。
  
  在浏览器中访问对应的链接()可以看到cms系统:
  
  至此,无需任何开发成本,cms 内容管理系统正式上线~
  使用 cms 创建动态内容
  对于动态数据内容,我们将其划分为不同的模块。每个内容模块对应一个cms系统的数据集合。例如,在“云开发官网”-“社区页面”中,推荐好课程的内容是动态的。
  
  从图中可以看出,每节课都有多个属性。在云数据库中,每门课程对应一个文档,课程属性对应文档的字段。字段类型及含义如下:
  name: 课程名称
time: 课程时间
cover: 课程封面
url: 课程链接
level: 课程难度
  以管理员身份登录cms系统,在“内容设置页面”新建内容。在cms中,支持多种高级数据类型,如url、image、markdown、富文本、标签数组、邮箱、URL等,这些类型被智能识别,显示更友好。
  注:cms自带图床功能。当数据类型为“图片”时,图片会自动上传到当前云开发环境下的云存储中。图片信息以cloud://开头的特殊链接存储在数据集合中。
  创建新内容时,cms默认会自动填写4个字段:name、order、createTime、updateTime。您可以根据需要删除不需要的字段。
  建议:保留order字段,可用于数据排序。对于运营商来说,数据的订单值越大,在cms系统中显示的位置就越高;对于开发者,可以按照顺序进行排序和搜索。从而保证经验和逻辑的一致性。
  根据字段创建集合后,cms 会在系统左侧看到“推荐课程”。其对应的内容保存在云数据库的recome-course(创建时指定)集合中,其字段信息保存在tcb-ext-cms-contents(cms初始化时创建的云数据库) ) 在集合中。
  
  根据设置添加新的课程内容后,再次进入“推荐课程”,如下图:
  
  图片、链接等内容对运营商更加友好。
  项目建设
  按照 Next.js Docs 的指南创建 Next.js 项目:
  npm i --save next react react-dom axios
  因为我们要部署网站到“静态托管”,所以需要用到Next.js的静态导出功能。package.json 中的打包脚本更新为:
  "scripts": {
"dev": "next",
"build": "next build && next export",
"start": "next start"
}
  为了快速部署静态网站,发布云功能。需要全局安装@cloudbase/cli:
  npm install -g @cloudbase/cli
  安装后,添加两个脚本:
  "scripts": {
"deploy:hosting": "npm run build && cloudbase hosting:deploy out -e jhgjj-0ae4a1",
"deploy:function": "echo y | cloudbase functions:deploy --force"
}
  注意:准备两个云环境,防止静态部署时文件覆盖。envId为jhgjj-0ae4a1的云环境仅用于部署Next.js的静态导出文件。envId为pagecounter-d27cfe的云环境用于部署cms系统。获取cms内容
  借助CloudBase的Node SDK-@cloudbase/node-sdk,我们可以在Next.js的getStaticProps()方法中读取云数据库中的数据。
  为了使逻辑更清晰,我们将获取外部数据的方法封装到单个文件中。以“推荐课程”为例:
  
// provider.js
const cloudbase = require("@cloudbase/node-sdk");
const config = {
secretId: "your secretId", // 前往「腾讯云控制台」-「访问密钥」获取
secretKey: "your secretKey", // 前往「腾讯云控制台」-「访问密钥」获取
env: "your envid" // 前往「腾讯云控制台」-「云开发 CloudBase」获取
};
const app = cloudbase.init(config);
/**
* 获取云数据库数据
*/
async function getCourses() {
const db = app.database();
const result = await db.collection("recommend-course").get();
if (result.code) {
throw new Error(
`获取「推荐课程」失败, 错误码是${result.code}: ${result.message}`
);
}
return result.data.map(item => {
if (item.createTime instanceof Date) {
item.createTime = item.createTime.toLocaleString();
}
if (item.updateTime instanceof Date) {
item.updateTime = item.updateTime.toLocaleString();
}
item.cover = getBucketUrl(item.cover); // 处理云存储的特殊链接
return item;
});
}
  上一篇提到,cms自带图床功能。拖拽上传的图片会保存在同一环境的云存储中,获取图片的链接会保存在采集中。云存储链接是以cloud://开头的特殊链接,需要在前端进行识别和特殊处理。
  例如图片存储链接为:cloud://pagecounter-d27cfe.7061-pagecounter-d27cfe-1255463368/uploads/04.png。把它变成一个可访问的 http 链接:。
  转换思路是:识别出envid背后的信息,与tcb.qcloud.la域名重新拼接:
  
// provider.js
/**
* 获取云存储的访问链接
* @param {String} url 云存储的特定url
*/
function getBucketUrl(url) {
if (!url.startsWith("cloud://")) {
return url;
}
const re = /cloud:\/\/.*?\.(.*?)\/(.*)/;
const result = re.exec(url);
return `https://${result[1]}.tcb.qcloud.la/${result[2]}`;
}
  注意:云存储的“权限设置”应该是:所有用户都可以读,只有创建者和管理员可以写。否则无法访问链接。建议:除了内置的图床功能,开发者可以根据自己的需要使用其他稳定的图床服务,比如微博图床。如果使用其他图片床,对应的字段类型不能设置为“图片”,可以是“字符串”或“超链接”。
  至此,我们已经使用 SDK 获取了云数据库数据,剩下要做的就是将其注入到 Next.js 页面组件的 props 中:
  // pages/index.js
const HomePage = ({ courses }) => {
return (
// 尽情使用数据吧...
)
}
export async function getStaticProps() {
const { getCourses } = require('./../provider')
return {
props: {
courses: await getCourses()
}
}
}
export default HomePage
  打开浏览器输入:3000/,可以看到效果如下:
  
  输入view-source::3000/,可以看到网页的html源码中收录了课程数据,解决了SEO问题:
  
  注意:Next.js 的一些方法会在两端运行,但 getStaticProps() 只会在服务端运行自动构建和部署
  至此,开发工作基本结束。执行npm run build命令,将网站静态文件打包到out/目录下:
  
  运行 npm run deploy:hosting 将 out/ 目录下的文件上传到“static 网站托管”。访问静态网站:托管的链接,效果如下:
  
  借助成熟的 CI 工具,例如 Travis、Circle 等,可以定期触发构建工作。这样,内容和开发就完全分离了。
  在构建版本时,您需要使用 CloudBase CLI 工具。在CI工具中,不使用cloudbase login进行交互式输入登录,而是使用key登录:cloudbase login --apiKeyId $TCB_SECRET_ID --apiKey $TCB_SECRET_KEY。
  注意:去云API key获取TCB_SECRET_ID和TCB_SECRET_KEY的值
  在 CI 工具的控制台中,配置 TCB_SECRET_ID 和 TCB_SECRET_KEY。并向 package.json 添加一个新脚本:
  "scripts": {
"login": "echo N | cloudbase login --apiKeyId $TCB_SECRET_ID --apiKey $TCB_SECRET_KEY"
}
  综上所述,CI构建的过程是:
  如果数据需要紧急修改启动,可以在本地或者在CI工具控制台手动触发构建。
  最后
  借助云开发cms,可以实现评论系统、预约系统、博客发帖等多种内容模板,从而快速搭建网站。在现有的开发体系下,合理使用云开发,大大降低了人工成本、开发成本、运维成本。实现前后端穿梭,形成“闭环”。
  本文实战只是开始,涉及到部分云开发能力,还有更多好玩的东西等你去探索,比如用云功能实现SSR、托管后端服务、图片服务,以及各方面的 SDK。
  探索功能、多样化想法并以较低的成本开发高度可用的 Web 服务。云开发绝对是您的最佳选择!

js提取指定网站内容(window.getSelection.execCommand教程 )

网站优化优采云 发表了文章 • 0 个评论 • 199 次浏览 • 2021-10-15 10:03 • 来自相关话题

  js提取指定网站内容(window.getSelection.execCommand教程
)
  如果只是简单的获取页面上复制的内容,可以使用window.getSelection()获取选中的内容,只需执行复制操作,但是如果要修改复制的内容,可以先获取要复制的内容复制然后使用文档 .execCommand("copy") 事件(document.execCommand 方法允许运行命令来操作可编辑区域的元素)。
  获取复制的内容
  配合copy事件获取
  获取的内容是一个 Selection 对象。如果要将所选内容转换为字符串,可以连接一个空字符串 ("") 或使用该方法。
  document.addEventListener('copy', function() {
var content = window.getSelection().toString();
console.log(content )
})
  通过键盘事件获取
  document.addEventListener('keyup', function(e) {
if(e.ctrlKey && e.keyCode == "67") {
var content = window.getSelection().toString();
alert(content)
}
})
  获取复制的内容并修改
  text


var btn=document.querySelector(".btn");
btn.onclick=function(){
var text=document.getElementById("text");
text.value+='我是已经复制的文本';//给复制的内容添加一段文字
text.select(); //选中复制的内容
document.execCommand("copy");//执行浏览器复制命令
alert("已复制好,可贴粘。");
} 查看全部

  js提取指定网站内容(window.getSelection.execCommand教程
)
  如果只是简单的获取页面上复制的内容,可以使用window.getSelection()获取选中的内容,只需执行复制操作,但是如果要修改复制的内容,可以先获取要复制的内容复制然后使用文档 .execCommand("copy") 事件(document.execCommand 方法允许运行命令来操作可编辑区域的元素)。
  获取复制的内容
  配合copy事件获取
  获取的内容是一个 Selection 对象。如果要将所选内容转换为字符串,可以连接一个空字符串 ("") 或使用该方法。
  document.addEventListener('copy', function() {
var content = window.getSelection().toString();
console.log(content )
})
  通过键盘事件获取
  document.addEventListener('keyup', function(e) {
if(e.ctrlKey && e.keyCode == "67") {
var content = window.getSelection().toString();
alert(content)
}
})
  获取复制的内容并修改
  text


var btn=document.querySelector(".btn");
btn.onclick=function(){
var text=document.getElementById("text");
text.value+='我是已经复制的文本';//给复制的内容添加一段文字
text.select(); //选中复制的内容
document.execCommand("copy");//执行浏览器复制命令
alert("已复制好,可贴粘。");
}

js提取指定网站内容(新浪微博中模拟抓取网页内容采集网页的内容说明(图))

网站优化优采云 发表了文章 • 0 个评论 • 119 次浏览 • 2021-10-11 17:41 • 来自相关话题

  js提取指定网站内容(新浪微博中模拟抓取网页内容采集网页的内容说明(图))
  运行程序,自动调用火狐浏览器登录微博。注:手机端信息更加精致简洁,动态加载没有限制。但是,如果微博或粉丝ID只显示20页,这是它的缺点;虽然客户端可能有动态加载,比如评论、微博,但是它的信息更完整。注:输入:明星用户id列表,使用URL用户id访问(这些id可以从用户的关注列表中获取) SinaWeibo_List_best_1.txt 输出:微博信息和用户基本信息 SinaWeibo_Info_best_1. txtMegry_Result_Best.py 这个文件用户整理了某天的用户微博信息,比如抓取2018年4月23日的客户端信息,但是评论是动态加载的,还在研究中 weibo_spider&lt; 查看全部

  js提取指定网站内容(新浪微博中模拟抓取网页内容采集网页的内容说明(图))
  运行程序,自动调用火狐浏览器登录微博。注:手机端信息更加精致简洁,动态加载没有限制。但是,如果微博或粉丝ID只显示20页,这是它的缺点;虽然客户端可能有动态加载,比如评论、微博,但是它的信息更完整。注:输入:明星用户id列表,使用URL用户id访问(这些id可以从用户的关注列表中获取) SinaWeibo_List_best_1.txt 输出:微博信息和用户基本信息 SinaWeibo_Info_best_1. txtMegry_Result_Best.py 这个文件用户整理了某天的用户微博信息,比如抓取2018年4月23日的客户端信息,但是评论是动态加载的,还在研究中 weibo_spider&lt;

js提取指定网站内容(javascript开发者使用的日志打印调试都是console.log)

网站优化优采云 发表了文章 • 0 个评论 • 84 次浏览 • 2021-10-07 09:21 • 来自相关话题

  js提取指定网站内容(javascript开发者使用的日志打印调试都是console.log)
  几乎所有 JavaScript 开发人员最常用的日志打印和调试 API 是 console.log()。事实上,有很多选择可供我们选择。下面笔者将一一介绍。
  一、console.table()
  console.table() 是我强烈推荐你使用的方法。它可以接受 JSON 或数组并以表格格式打印它们。可视化打印json对象和数组时使用方便,结果直观。
  比如下面的json数据对象是使用console.table()打印出来的
   console.table({
"id":"1",
"key":"value",
"count":2
});
复制代码
  控制台的输出如下:
  
  另一个示例是在以下代码中打印数组:
   console.table([
{
id: "1",
key: "value",
count: 2,
},
{
id: "2",
key: "value2",
count: 22,
},
{
id: "3",
key: "value3",
count: 5,
},
]);
复制代码
  控制台的输出如下:
  
  二、console.error()
  console.error() 比 console.log() 更有助于在调试时区分错误信息和输出日志
  
  从上图可以看出,它的输出打印结果是红色的。
  三、时间(时间,时间日志,时间结束)
  console.time()、console.timeLog()、console.timeEnd()这三个方法在我们计时程序运行时间时特别有用。
  参考下图了解这三种方法
  
  console.time("ForLoop");
// "ForLoop" is label here
for (let i = 0; i < 5; i++) {
console.timeLog('ForLoop');
}
console.timeEnd("ForLoop");
复制代码
  控制台打印出结果
  
  四、console.warn()
  使用黄色字体输出日志,更直观方便查看告警日志信息。
  五、console.assert()
  console.assert(assert_statement,message) 用于设置断言,如果为false,则显示消息
  if(3!=2){
console.error({ msg1: "msg1", msg2: "msg2" });
}
//上面的日志判断语句,可以简写为下面的断言
console.assert(3 === 2, { msg1: "msg1", msg2: "msg2" });
复制代码
  
  另一种可用于格式化输出的断言方法 console.assert(assert_statement, message, args)
  console.assert(false, "%d nd type for %s ",2,"console.assert() method");
复制代码
  
  六、console.count()
  console.count() 特别适用于计数。可以传递参数,可以根据参数标签统计次数。代码显示如下:
   for (let i = 0; i < 3; i++) {
console.count("label");
console.count();
console.count(i);
}
复制代码
  控制台打印输出的结果类似如下
   console.count() console.count("label") console.count(i)
default: 1 label: 1 0: 1
default: 2 label: 2 1: 1
default: 3 label: 3 2: 1
复制代码
  欢迎关注我的博客,精品采集很多
  如果你觉得对你有帮助,请给我点赞和分享!您的支持是我创作的不竭动力!. 另外,作者最近输出了以下优质内容,期待大家的关注。 查看全部

  js提取指定网站内容(javascript开发者使用的日志打印调试都是console.log)
  几乎所有 JavaScript 开发人员最常用的日志打印和调试 API 是 console.log()。事实上,有很多选择可供我们选择。下面笔者将一一介绍。
  一、console.table()
  console.table() 是我强烈推荐你使用的方法。它可以接受 JSON 或数组并以表格格式打印它们。可视化打印json对象和数组时使用方便,结果直观。
  比如下面的json数据对象是使用console.table()打印出来的
   console.table({
"id":"1",
"key":"value",
"count":2
});
复制代码
  控制台的输出如下:
  
  另一个示例是在以下代码中打印数组:
   console.table([
{
id: "1",
key: "value",
count: 2,
},
{
id: "2",
key: "value2",
count: 22,
},
{
id: "3",
key: "value3",
count: 5,
},
]);
复制代码
  控制台的输出如下:
  
  二、console.error()
  console.error() 比 console.log() 更有助于在调试时区分错误信息和输出日志
  
  从上图可以看出,它的输出打印结果是红色的。
  三、时间(时间,时间日志,时间结束)
  console.time()、console.timeLog()、console.timeEnd()这三个方法在我们计时程序运行时间时特别有用。
  参考下图了解这三种方法
  
  console.time("ForLoop");
// "ForLoop" is label here
for (let i = 0; i < 5; i++) {
console.timeLog('ForLoop');
}
console.timeEnd("ForLoop");
复制代码
  控制台打印出结果
  
  四、console.warn()
  使用黄色字体输出日志,更直观方便查看告警日志信息。
  五、console.assert()
  console.assert(assert_statement,message) 用于设置断言,如果为false,则显示消息
  if(3!=2){
console.error({ msg1: "msg1", msg2: "msg2" });
}
//上面的日志判断语句,可以简写为下面的断言
console.assert(3 === 2, { msg1: "msg1", msg2: "msg2" });
复制代码
  
  另一种可用于格式化输出的断言方法 console.assert(assert_statement, message, args)
  console.assert(false, "%d nd type for %s ",2,"console.assert() method");
复制代码
  
  六、console.count()
  console.count() 特别适用于计数。可以传递参数,可以根据参数标签统计次数。代码显示如下:
   for (let i = 0; i < 3; i++) {
console.count("label");
console.count();
console.count(i);
}
复制代码
  控制台打印输出的结果类似如下
   console.count() console.count("label") console.count(i)
default: 1 label: 1 0: 1
default: 2 label: 2 1: 1
default: 3 label: 3 2: 1
复制代码
  欢迎关注我的博客,精品采集很多
  如果你觉得对你有帮助,请给我点赞和分享!您的支持是我创作的不竭动力!. 另外,作者最近输出了以下优质内容,期待大家的关注。

js提取指定网站内容(基于PHP的CMS移植到基于JavaScript的静态网站时会)

网站优化优采云 发表了文章 • 0 个评论 • 472 次浏览 • 2021-10-07 09:19 • 来自相关话题

  js提取指定网站内容(基于PHP的CMS移植到基于JavaScript的静态网站时会)
  今年年初,我终于决定将我的网站从基于PHP的cms迁移到基于JavaScript的静态网站生成器(SSG)。原因如下:
  虽然我一开始是一个“全栈”的开发者,但现在我只负责前端工作:如果我需要编写自定义函数,那么我不想编写可以使用 PHP 用 Ja​​vaScript 编写的代码。我不需要抽象层,也不需要cms的复杂性——我最喜欢在markdown文件中写内容,我希望我再也不要碰Mysql数据库或所见即所得的编辑器。我想提高 网站 的性能:静态 HTML 文件在 99% 的情况下比动态页面快。最后,还有成本优势:LAMP 堆栈服务器必须按月付费;Netlify 的免费套餐(每月构建 300 分钟)应该可以轻松满足零成本个人博客的需求。
  当我决定使用静态站点生成器和 JavaScript(不包括 Jekyll 和 Hugo)时,只有两种截然不同的选择。
  “我听说盖茨比很管用”
  根据官方 网站 的声明,“Gatsby 是一个基于 React 的免费开源框架,可以帮助开发者快速构建网站 和应用程序”。它有一个 GraphQL 支持的数据层,并将所有内容输出到静态文件,让您几乎可以在任何地方托管它。
  当我第一次听说我可以编写 React 并使用这个很酷的新 GraphQL 小工具,同时仍然能够输出不需要 JavaScript 的静态页面时,我想尝试一下。我是这样认为的:“这听起来像是增量增强,但不需要太多投资。” 不幸的是,就像大多数听起来太美的东西一样,经过一番调查,我发现它是一个坑。当用户第一次访问 Gatsby 网站 时会发生这些事情:
  用户请求一个页面。服务器将静态生成的 HTML 文档发送到用户的浏览器,然后浏览器开始呈现页面。HTML 文档到达后,JavaScript 包(包括 React 库和其他渲染页面所需的 JavaScript)开始在后台下载、解析和编译。JavaScript 已准备好运行——整个 DOM 通过 React 组件“水化”。
  这里有问题——Gatsby 要求你以 React 组件的形式再次加载页面;在完成此额外步骤之前,所有需要 JavaScript 的元素(例如按钮、菜单和自定义输入)实际上都无法进行交互。
  即使你的 网站 没有任何交互元素(除了链接,即使没有 Gatsby 也不需要 JavaScript 才能工作),你的用户也必须下载这部分 JavaScript,只是为了转移你的 网站 成为单页应用程序(SPA);SPA 有其自身的不足,我们稍后再谈。
  这个额外的操作似乎违背了我转向SSG(提高页面速度)的初衷。华丽的 Gatsby 网站 在 2000 美元的 MacBook 上可能很快,但对于有 3G 连接和廉价智能手机的用户来说,它表明它可以显示,但没有任何反应;用户等待加载 JavaScript 的过程持续 15 秒。电池和数据流量也必须下降。
  如果浏览器需要解析296kb的JavaScript代码来显示博客列表文章,这不是“渐进增强”,而是错误的工具。从网站 /Web应用程序的一般区别来看,React是用来构建Web应用程序的,需要有一个交互式的UI来响应用户输入或实时获取数据;而博客只是一个 网站 就是这样。
  单页应用程序的可访问性
  单页应用网站摒弃了传统的Web导航方式,通过加载新的HTML文档来加载新的内容;相反,它使用 AJAX 和 History API 等 JavaScript 功能来切换到新内容。, 不触发页面加载。它的目标是提高感知性能并使 网站 看起来更像“原生”应用程序(从应用程序商店下载的那种)。不再需要重新加载整页的问题在于浏览器和辅助技术使用页面加载作为触发某些有用行为的信号,包括宣布新页面的标题或将键盘焦点重置到文档的开头。
  如果您正在开发一个专注于可访问性的单页应用程序,那么您可能会尝试使用 JavaScript 来模拟浏览器行为。Gatsby 试图通过收录一个 RouteAnnouncer 组件来为您解决这个问题。它使用 ARIA 实时区域来宣布页面的标题或 h1,以提示屏幕阅读器软件的用户跳转到该页面。但是这种方法也存在问题:在配置和本地化方面还有很多未解决的问题。
  我们已经看到单页应用在导航方面存在固有的可访问性问题,但需要注意的是,使用前端框架也会带来其他方面的可访问性问题。在 2020 年 2 月对 100 万个主页的调查中,WebAIM 发现使用 React 的网页的可访问性错误比平均水平高 5.7%;而使用 Vue 的网页要高出 25%。这并不一定意味着框架会导致这些错误,但更多的 JavaScript 和更差的可访问性之间存在很强的相关性。
  博客真的需要 JavaScript 吗?
  您构建的第一个网页的性能很可能会比之后构建的许多页面要好得多——它由一个 HTML 文件和一些 CSS 组成,可能还有一些未优化的图像,但它们不会阻止页面加载。如果您有和我一样的经验,那么从您开始添加 JavaScript 的那一刻起,您的网页性能就会开始急剧下降。并非所有字节都相同:与解析、编译和执行相同大小的 JavaScript 文件所需的时间相比,解码图像并将其渲染到屏幕所需的时间要少得多。
  JavaScript 是一种强大的语言,可以完成一些令人难以置信的事情,但您很容易在开发过程中过早地开始使用它。其实HTML和CSS就够了。您应该查看功能最少的原则:在充分利用功能较弱的语言 (HTML) 之前,不要使用功能更强大的语言 (JavaScript)。在我看来,将博客变成 JavaScript 单页应用程序会带来不必要的复杂性。
  这个 文章 不是为了批评盖茨比而写的。背后有一些聪明人,他们已经承认了本文提到的许多问题,并试图解决它们。静态渲染和水合页面仍然比完全客户端渲染的 React 应用程序(例如 create-react-app 生成的页面)要好得多,后者在没有 JavaScript 的情况下无法使用。我对盖茨比的宣传方式真的很不满意。他们说 Gatsby 适合任何类型的 网站。客户端 JavaScript 是有成本的,开发人员应该意识到这一点。
  用更少的 JavaScript 构建 Gatsby 网站
  这让我陷入了两难境地:使用 Gatsby 开发 网站 是一种美妙的体验;但开发体验 (DX) 应始终排在用户体验 (UX) 之后。那么如何避免在构建 Gatsby 网站 时大量使用 JS 带来的固有问题呢?当然,我们应该尝试删除那些 JavaScript。幸运的是,Gatsby 社区已经做了很多努力来构建一个更轻量级的 网站:
  首先,使用 gatsby-plugin-preact 用 Preact 替换 React 可以节省几千字节。我在组件库中使用了它,并立即将 JavaScript 负载减少了大约 30kb。
  如果您想要更激进的方法,可以使用插件从 Gatsby 网站 中删除所有 Gatsby JavaScript。
  您可以继续编写 React 组件和 GraphQL,甚至可以使用 CSS-in-JS 库(只要它输出 CSS 或内联样式),而无需向浏览器发送任何 JavaScript。Gatsby 的大部分问题都可以通过丢弃所有客户端 JavaScript 来解决。Gatsby Starter Low Tech 博客使用无 JavaScript 插件和其他技术(包括将所有图像转换为灰度)来帮助您创建一个轻量级且节能的博客。
  从零开始
  这时候感觉有点不对劲——使用了一个框架,推送了大量的客户端JavaScript,却删除了所有的JavaScript代码。这似乎是一个非常复杂的网站构造方法。我想看看我是否可以在没有客户端JavaScript的情况下构建一个功能齐全的博客,所以我不需要任何插件来删除它。所以我转向了另一个选择:
  Eleventy 鼓励您按照自己的意愿构建 网站。您可以使用您最熟悉的技术,它只负责生成页面。Eleventy 为您提供了十种模板语言选项,可以任意搭配,包括markdown、nunjucks 和liquid;这意味着我可以从 Craft 复制和粘贴旧模板,更改文件扩展名,并进行一些小的调整。运行于十一。不需要为任何新打包器调整前端构建过程,我只需要放入现有的 webpack 文件和 src 文件夹。使用并发包,我可以在 Eleventy 的服务过程中同时运行构建脚本。
  和 Gatsby 一样,Eleventy 也有一个插件生态系统(虽然很小,但增长很快)。我选择了一些可以在不添加客户端 JavaScript 的情况下添加功能的插件:
  当代码片段显示在帖子中时,它通常包括特定于语言的语法突出显示。有一些 JavaScript 库可以做到这一点,最流行的似乎是 Prism——你可以在客户端运行它,但由于我们使用的是 JavaScript SSG,我们可以在构建时运行它并突出显示语法 HTML 元素和 CSS显示所需的类直接烘焙到文档中——因此无需在浏览器中下载库。
  11-plugin-embed-tweet 也可以在构建时而不是在客户端运行 JavaScript。Twitter 的默认嵌入代码强制用户下载大量 JavaScript 以显示推文。该插件可以在构建时获取和渲染推文,因此只需要少量的 HTML 和 CSS,完全不需要额外的 JavaScript。
  与其他新技术一样,Eleventy 缺少一些更成熟的工具提供的功能。例如,在 Eleventy 中没有优雅的方式来生成响应式图像。相比之下,Gatsby 中优秀的 gatsby-image 插件可以生成延迟加载和响应式图像元素,加载全分辨率文件后可以在低分辨率或 SVG 版本的图像之间平滑切换。Eleventry还有一个让我困惑的地方:我有段时间没了解它的分页功能,以为它只是把帖子分页成指定大小的组,然后意识到它可以动态生成全新的页面;我还发现自己在同一个文件中混用了模板语言:可以随意在markdown文件中收录nunjucks标签,或者用JavaScript替换基于yaml的frontmatter,
  综上所述
  如果你仍然选择 Gatsby,我不会责怪你——有时使用自以为是的框架是好的,如果你想快速完成工作,这是一个可靠的解决方案。只需注意其性能成本以及与 JavaScript 相关的所有潜在可访问性问题。
  我选择用Eleventy来搭建自己的网站,但我知道这种方法并不适合所有人——完全按照自己的意愿来搭建可能会很麻烦。但是你不需要完全向我学习——和 Gatsby 类似,Eleventy 也有很多可以作为基础的入门项目。其中一些工具,例如 Andy Bell 的 Hylia 入门套件,可以在几分钟内获得一个 网站。它甚至预配置了 Netlify cms,因此您无需编写任何代码即可编辑 网站 的内容。
  我学到了什么?使用 Eleventy 无需 JavaScript 即可轻松构建博客,但总会有一些功能需要客户端 JavaScript:
  我会在不久的将来将 JavaScript 添加到 网站 吗?答案可能是否定的:我上面列出的功能并不那么重要。我不建议大家删除你网站上的所有JavaScript文件,但是从现在开始,在构建网站的时候,我会尽量把JavaScript当作一个可选的额外功能,而不是基本的体验组件。我鼓励你也这样做。
  关注我转发这篇文章文章,私信我“接收信息”,即可免费获得价值4999元的InfoQ迷你书! 查看全部

  js提取指定网站内容(基于PHP的CMS移植到基于JavaScript的静态网站时会)
  今年年初,我终于决定将我的网站从基于PHP的cms迁移到基于JavaScript的静态网站生成器(SSG)。原因如下:
  虽然我一开始是一个“全栈”的开发者,但现在我只负责前端工作:如果我需要编写自定义函数,那么我不想编写可以使用 PHP 用 Ja​​vaScript 编写的代码。我不需要抽象层,也不需要cms的复杂性——我最喜欢在markdown文件中写内容,我希望我再也不要碰Mysql数据库或所见即所得的编辑器。我想提高 网站 的性能:静态 HTML 文件在 99% 的情况下比动态页面快。最后,还有成本优势:LAMP 堆栈服务器必须按月付费;Netlify 的免费套餐(每月构建 300 分钟)应该可以轻松满足零成本个人博客的需求。
  当我决定使用静态站点生成器和 JavaScript(不包括 Jekyll 和 Hugo)时,只有两种截然不同的选择。
  “我听说盖茨比很管用”
  根据官方 网站 的声明,“Gatsby 是一个基于 React 的免费开源框架,可以帮助开发者快速构建网站 和应用程序”。它有一个 GraphQL 支持的数据层,并将所有内容输出到静态文件,让您几乎可以在任何地方托管它。
  当我第一次听说我可以编写 React 并使用这个很酷的新 GraphQL 小工具,同时仍然能够输出不需要 JavaScript 的静态页面时,我想尝试一下。我是这样认为的:“这听起来像是增量增强,但不需要太多投资。” 不幸的是,就像大多数听起来太美的东西一样,经过一番调查,我发现它是一个坑。当用户第一次访问 Gatsby 网站 时会发生这些事情:
  用户请求一个页面。服务器将静态生成的 HTML 文档发送到用户的浏览器,然后浏览器开始呈现页面。HTML 文档到达后,JavaScript 包(包括 React 库和其他渲染页面所需的 JavaScript)开始在后台下载、解析和编译。JavaScript 已准备好运行——整个 DOM 通过 React 组件“水化”。
  这里有问题——Gatsby 要求你以 React 组件的形式再次加载页面;在完成此额外步骤之前,所有需要 JavaScript 的元素(例如按钮、菜单和自定义输入)实际上都无法进行交互。
  即使你的 网站 没有任何交互元素(除了链接,即使没有 Gatsby 也不需要 JavaScript 才能工作),你的用户也必须下载这部分 JavaScript,只是为了转移你的 网站 成为单页应用程序(SPA);SPA 有其自身的不足,我们稍后再谈。
  这个额外的操作似乎违背了我转向SSG(提高页面速度)的初衷。华丽的 Gatsby 网站 在 2000 美元的 MacBook 上可能很快,但对于有 3G 连接和廉价智能手机的用户来说,它表明它可以显示,但没有任何反应;用户等待加载 JavaScript 的过程持续 15 秒。电池和数据流量也必须下降。
  如果浏览器需要解析296kb的JavaScript代码来显示博客列表文章,这不是“渐进增强”,而是错误的工具。从网站 /Web应用程序的一般区别来看,React是用来构建Web应用程序的,需要有一个交互式的UI来响应用户输入或实时获取数据;而博客只是一个 网站 就是这样。
  单页应用程序的可访问性
  单页应用网站摒弃了传统的Web导航方式,通过加载新的HTML文档来加载新的内容;相反,它使用 AJAX 和 History API 等 JavaScript 功能来切换到新内容。, 不触发页面加载。它的目标是提高感知性能并使 网站 看起来更像“原生”应用程序(从应用程序商店下载的那种)。不再需要重新加载整页的问题在于浏览器和辅助技术使用页面加载作为触发某些有用行为的信号,包括宣布新页面的标题或将键盘焦点重置到文档的开头。
  如果您正在开发一个专注于可访问性的单页应用程序,那么您可能会尝试使用 JavaScript 来模拟浏览器行为。Gatsby 试图通过收录一个 RouteAnnouncer 组件来为您解决这个问题。它使用 ARIA 实时区域来宣布页面的标题或 h1,以提示屏幕阅读器软件的用户跳转到该页面。但是这种方法也存在问题:在配置和本地化方面还有很多未解决的问题。
  我们已经看到单页应用在导航方面存在固有的可访问性问题,但需要注意的是,使用前端框架也会带来其他方面的可访问性问题。在 2020 年 2 月对 100 万个主页的调查中,WebAIM 发现使用 React 的网页的可访问性错误比平均水平高 5.7%;而使用 Vue 的网页要高出 25%。这并不一定意味着框架会导致这些错误,但更多的 JavaScript 和更差的可访问性之间存在很强的相关性。
  博客真的需要 JavaScript 吗?
  您构建的第一个网页的性能很可能会比之后构建的许多页面要好得多——它由一个 HTML 文件和一些 CSS 组成,可能还有一些未优化的图像,但它们不会阻止页面加载。如果您有和我一样的经验,那么从您开始添加 JavaScript 的那一刻起,您的网页性能就会开始急剧下降。并非所有字节都相同:与解析、编译和执行相同大小的 JavaScript 文件所需的时间相比,解码图像并将其渲染到屏幕所需的时间要少得多。
  JavaScript 是一种强大的语言,可以完成一些令人难以置信的事情,但您很容易在开发过程中过早地开始使用它。其实HTML和CSS就够了。您应该查看功能最少的原则:在充分利用功能较弱的语言 (HTML) 之前,不要使用功能更强大的语言 (JavaScript)。在我看来,将博客变成 JavaScript 单页应用程序会带来不必要的复杂性。
  这个 文章 不是为了批评盖茨比而写的。背后有一些聪明人,他们已经承认了本文提到的许多问题,并试图解决它们。静态渲染和水合页面仍然比完全客户端渲染的 React 应用程序(例如 create-react-app 生成的页面)要好得多,后者在没有 JavaScript 的情况下无法使用。我对盖茨比的宣传方式真的很不满意。他们说 Gatsby 适合任何类型的 网站。客户端 JavaScript 是有成本的,开发人员应该意识到这一点。
  用更少的 JavaScript 构建 Gatsby 网站
  这让我陷入了两难境地:使用 Gatsby 开发 网站 是一种美妙的体验;但开发体验 (DX) 应始终排在用户体验 (UX) 之后。那么如何避免在构建 Gatsby 网站 时大量使用 JS 带来的固有问题呢?当然,我们应该尝试删除那些 JavaScript。幸运的是,Gatsby 社区已经做了很多努力来构建一个更轻量级的 网站:
  首先,使用 gatsby-plugin-preact 用 Preact 替换 React 可以节省几千字节。我在组件库中使用了它,并立即将 JavaScript 负载减少了大约 30kb。
  如果您想要更激进的方法,可以使用插件从 Gatsby 网站 中删除所有 Gatsby JavaScript。
  您可以继续编写 React 组件和 GraphQL,甚至可以使用 CSS-in-JS 库(只要它输出 CSS 或内联样式),而无需向浏览器发送任何 JavaScript。Gatsby 的大部分问题都可以通过丢弃所有客户端 JavaScript 来解决。Gatsby Starter Low Tech 博客使用无 JavaScript 插件和其他技术(包括将所有图像转换为灰度)来帮助您创建一个轻量级且节能的博客。
  从零开始
  这时候感觉有点不对劲——使用了一个框架,推送了大量的客户端JavaScript,却删除了所有的JavaScript代码。这似乎是一个非常复杂的网站构造方法。我想看看我是否可以在没有客户端JavaScript的情况下构建一个功能齐全的博客,所以我不需要任何插件来删除它。所以我转向了另一个选择:
  Eleventy 鼓励您按照自己的意愿构建 网站。您可以使用您最熟悉的技术,它只负责生成页面。Eleventy 为您提供了十种模板语言选项,可以任意搭配,包括markdown、nunjucks 和liquid;这意味着我可以从 Craft 复制和粘贴旧模板,更改文件扩展名,并进行一些小的调整。运行于十一。不需要为任何新打包器调整前端构建过程,我只需要放入现有的 webpack 文件和 src 文件夹。使用并发包,我可以在 Eleventy 的服务过程中同时运行构建脚本。
  和 Gatsby 一样,Eleventy 也有一个插件生态系统(虽然很小,但增长很快)。我选择了一些可以在不添加客户端 JavaScript 的情况下添加功能的插件:
  当代码片段显示在帖子中时,它通常包括特定于语言的语法突出显示。有一些 JavaScript 库可以做到这一点,最流行的似乎是 Prism——你可以在客户端运行它,但由于我们使用的是 JavaScript SSG,我们可以在构建时运行它并突出显示语法 HTML 元素和 CSS显示所需的类直接烘焙到文档中——因此无需在浏览器中下载库。
  11-plugin-embed-tweet 也可以在构建时而不是在客户端运行 JavaScript。Twitter 的默认嵌入代码强制用户下载大量 JavaScript 以显示推文。该插件可以在构建时获取和渲染推文,因此只需要少量的 HTML 和 CSS,完全不需要额外的 JavaScript。
  与其他新技术一样,Eleventy 缺少一些更成熟的工具提供的功能。例如,在 Eleventy 中没有优雅的方式来生成响应式图像。相比之下,Gatsby 中优秀的 gatsby-image 插件可以生成延迟加载和响应式图像元素,加载全分辨率文件后可以在低分辨率或 SVG 版本的图像之间平滑切换。Eleventry还有一个让我困惑的地方:我有段时间没了解它的分页功能,以为它只是把帖子分页成指定大小的组,然后意识到它可以动态生成全新的页面;我还发现自己在同一个文件中混用了模板语言:可以随意在markdown文件中收录nunjucks标签,或者用JavaScript替换基于yaml的frontmatter,
  综上所述
  如果你仍然选择 Gatsby,我不会责怪你——有时使用自以为是的框架是好的,如果你想快速完成工作,这是一个可靠的解决方案。只需注意其性能成本以及与 JavaScript 相关的所有潜在可访问性问题。
  我选择用Eleventy来搭建自己的网站,但我知道这种方法并不适合所有人——完全按照自己的意愿来搭建可能会很麻烦。但是你不需要完全向我学习——和 Gatsby 类似,Eleventy 也有很多可以作为基础的入门项目。其中一些工具,例如 Andy Bell 的 Hylia 入门套件,可以在几分钟内获得一个 网站。它甚至预配置了 Netlify cms,因此您无需编写任何代码即可编辑 网站 的内容。
  我学到了什么?使用 Eleventy 无需 JavaScript 即可轻松构建博客,但总会有一些功能需要客户端 JavaScript:
  我会在不久的将来将 JavaScript 添加到 网站 吗?答案可能是否定的:我上面列出的功能并不那么重要。我不建议大家删除你网站上的所有JavaScript文件,但是从现在开始,在构建网站的时候,我会尽量把JavaScript当作一个可选的额外功能,而不是基本的体验组件。我鼓励你也这样做。
  关注我转发这篇文章文章,私信我“接收信息”,即可免费获得价值4999元的InfoQ迷你书!

js提取指定网站内容( javascript中innerHTML获取或替换html内容,本文通过实例代码)

网站优化优采云 发表了文章 • 0 个评论 • 120 次浏览 • 2021-10-05 22:20 • 来自相关话题

  js提取指定网站内容(
javascript中innerHTML获取或替换html内容,本文通过实例代码)
  javascript中innerHTML获取或替换html内容的实现代码
  更新时间:2020年3月17日09:43:47 作者:大灰牛博客
  本文文章主要介绍javascript中innerHTML对html内容的获取或替换。本文通过示例代码为您详细介绍,对您的学习或工作有一定的参考价值。有需要的朋友可以参考
  innerHTML 属性用于获取或替换 HTML 元素的内容,语法为 Object.innerHTML
  其中1.Object为获取的元素对象,如通过document.getElementById("ID")获取的元素;2. 注意书写,innerHTML 区分大小写。
  我们通过 id="light"
  元素,并输出元素的内容和改变元素的内容,代码如下:
  


innerHTML属性



你好,黑夜20200317



var mystr=document.getElementById('cshi');
mystr.innerHTML="DOM操作";
// document.write(mystr);


  通过id获取h2标签元素并赋值给变量mychar,然后使用innerHTML属性将获取到的h2标签内容修改为“Hello world!”
  
innerHTML
javascript
<p> JavaScript是一种基于对象、事件驱动的简单脚本语言,嵌入在HTML文档中,由浏览器负责解释和执行,在网页上产生动态的显示效果并实现与用户交互功能。
var mychar= document.getElementById('icon'); ;
document.write("原标题:"+mychar.innerHTML+"
"); //输出原h2标签内容
mychar.innerHTML="Hello world!";
document.write("修改后的标题:"+mychar.innerHTML); //输出修改后h2标签内容
</p>
  总结
  这是文章关于在javascript中获取或替换innerHTML中的html内容的介绍。更多替换html内容的js相关内容,请搜索脚本之家之前的文章或继续浏览下方相关文章希望大家以后多多支持Scripthome! 查看全部

  js提取指定网站内容(
javascript中innerHTML获取或替换html内容,本文通过实例代码)
  javascript中innerHTML获取或替换html内容的实现代码
  更新时间:2020年3月17日09:43:47 作者:大灰牛博客
  本文文章主要介绍javascript中innerHTML对html内容的获取或替换。本文通过示例代码为您详细介绍,对您的学习或工作有一定的参考价值。有需要的朋友可以参考
  innerHTML 属性用于获取或替换 HTML 元素的内容,语法为 Object.innerHTML
  其中1.Object为获取的元素对象,如通过document.getElementById("ID")获取的元素;2. 注意书写,innerHTML 区分大小写。
  我们通过 id="light"
  元素,并输出元素的内容和改变元素的内容,代码如下:
  


innerHTML属性



你好,黑夜20200317



var mystr=document.getElementById('cshi');
mystr.innerHTML="DOM操作";
// document.write(mystr);


  通过id获取h2标签元素并赋值给变量mychar,然后使用innerHTML属性将获取到的h2标签内容修改为“Hello world!”
  
innerHTML
javascript
<p> JavaScript是一种基于对象、事件驱动的简单脚本语言,嵌入在HTML文档中,由浏览器负责解释和执行,在网页上产生动态的显示效果并实现与用户交互功能。
var mychar= document.getElementById('icon'); ;
document.write("原标题:"+mychar.innerHTML+"
"); //输出原h2标签内容
mychar.innerHTML="Hello world!";
document.write("修改后的标题:"+mychar.innerHTML); //输出修改后h2标签内容
</p>
  总结
  这是文章关于在javascript中获取或替换innerHTML中的html内容的介绍。更多替换html内容的js相关内容,请搜索脚本之家之前的文章或继续浏览下方相关文章希望大家以后多多支持Scripthome!

js提取指定网站内容(js提取指定网站内容主要有如下下4个命令)

网站优化优采云 发表了文章 • 0 个评论 • 131 次浏览 • 2021-09-29 06:02 • 来自相关话题

  js提取指定网站内容(js提取指定网站内容主要有如下下4个命令)
  js提取指定网站内容主要有如下4个命令:navigator.find(albumid):如果目标网站与访问者同一个网站,就返回目标网站的albumid网站内容,网站资源cookie不推荐提取,
  因为你需要get一个到文件的地址。如果是http提交,
  大神给个建议,
  navigator.find(‘get’,'*/*')或navigator.find(‘get’,'*/*')都可以
  find(albumid)//很多网站一直都是这么做的find(pageid)//通过统计pageid找到页面打包的位置
  navigator.find(albumid)//很久以前的一个版本了,现在userdata提取的cookie要前置header,
  使用navigator.find()可以清晰地发现目标网站,简单、方便,同时因为这个方法并没有退出,有时也可以引入一些更复杂的功能,比如点击效果控件、intellijidea、eclipse等等。其他的方法大多用js取得网站url,然后提取资源内容,这样做应该可以吧。 查看全部

  js提取指定网站内容(js提取指定网站内容主要有如下下4个命令)
  js提取指定网站内容主要有如下4个命令:navigator.find(albumid):如果目标网站与访问者同一个网站,就返回目标网站的albumid网站内容,网站资源cookie不推荐提取,
  因为你需要get一个到文件的地址。如果是http提交,
  大神给个建议,
  navigator.find(‘get’,'*/*')或navigator.find(‘get’,'*/*')都可以
  find(albumid)//很多网站一直都是这么做的find(pageid)//通过统计pageid找到页面打包的位置
  navigator.find(albumid)//很久以前的一个版本了,现在userdata提取的cookie要前置header,
  使用navigator.find()可以清晰地发现目标网站,简单、方便,同时因为这个方法并没有退出,有时也可以引入一些更复杂的功能,比如点击效果控件、intellijidea、eclipse等等。其他的方法大多用js取得网站url,然后提取资源内容,这样做应该可以吧。

js提取指定网站内容(js提取指定网站内容重点是使用搜索引擎的软件)

网站优化优采云 发表了文章 • 0 个评论 • 77 次浏览 • 2021-09-27 12:01 • 来自相关话题

  js提取指定网站内容(js提取指定网站内容重点是使用搜索引擎的软件)
  js提取指定网站内容重点是使用搜索引擎。不同搜索引擎有不同的提取算法,可以查阅自己的网站是否适合这个算法。可以通过友链交换,付费购买购买。也可以使用seo软件。
  先说提取,提取应该不是你指定的词,你应该指定一个事件或者事件中的关键词。而提取代码是提取后代码一样的url提取出新的内容或代码。在做外链之前可以先搜集几个收录都比较多,排名也比较好的网站,把收录量提高,排名提高。在用外链的时候只需要点击收录的网站网页,然后按收录量排序就可以提取好几个网站的代码。
  1.每天看新闻。2.买书或看书评。3.交一些大网站朋友,让它们给你爬虫带。4.找一些专业的爬虫购买。
  先学一点点编程。
  多去dolphin,sugarcases,美容feed找内容。一开始不知道有没有用,看到好的就不错了。
  想到我一个朋友的经历,听说大家比较热衷于这样爬虫,我就想试试,就学习了点爬虫。起初我想着能够爬取一些好医院的时候,就去百度几家好的医院。就自己慢慢的去爬,积累了第一桶金。然后我又想接着拓展一下,于是开始去爬取一些做微商的,或者身边做微商的。但那时候,我都是先是看到过别人做的,就发现好像有人会这样做,就自己去做,因为这样比较简单。
  然后再慢慢学习别人的,现在学到一定程度,就开始做上一些大的行业,如微商等。这样一步步做着做着,就发现自己能够全面发展,然后自己感觉收入应该不错。总之最重要的是分清自己的优势。还有一点很重要,你要去一个自己可以做的领域去发展。不要多。 查看全部

  js提取指定网站内容(js提取指定网站内容重点是使用搜索引擎的软件)
  js提取指定网站内容重点是使用搜索引擎。不同搜索引擎有不同的提取算法,可以查阅自己的网站是否适合这个算法。可以通过友链交换,付费购买购买。也可以使用seo软件。
  先说提取,提取应该不是你指定的词,你应该指定一个事件或者事件中的关键词。而提取代码是提取后代码一样的url提取出新的内容或代码。在做外链之前可以先搜集几个收录都比较多,排名也比较好的网站,把收录量提高,排名提高。在用外链的时候只需要点击收录的网站网页,然后按收录量排序就可以提取好几个网站的代码。
  1.每天看新闻。2.买书或看书评。3.交一些大网站朋友,让它们给你爬虫带。4.找一些专业的爬虫购买。
  先学一点点编程。
  多去dolphin,sugarcases,美容feed找内容。一开始不知道有没有用,看到好的就不错了。
  想到我一个朋友的经历,听说大家比较热衷于这样爬虫,我就想试试,就学习了点爬虫。起初我想着能够爬取一些好医院的时候,就去百度几家好的医院。就自己慢慢的去爬,积累了第一桶金。然后我又想接着拓展一下,于是开始去爬取一些做微商的,或者身边做微商的。但那时候,我都是先是看到过别人做的,就发现好像有人会这样做,就自己去做,因为这样比较简单。
  然后再慢慢学习别人的,现在学到一定程度,就开始做上一些大的行业,如微商等。这样一步步做着做着,就发现自己能够全面发展,然后自己感觉收入应该不错。总之最重要的是分清自己的优势。还有一点很重要,你要去一个自己可以做的领域去发展。不要多。

js提取指定网站内容(IT共享者获取妹纸图上的图片链接功能大揭秘(组图))

网站优化优采云 发表了文章 • 0 个评论 • 91 次浏览 • 2021-09-27 03:18 • 来自相关话题

  js提取指定网站内容(IT共享者获取妹纸图上的图片链接功能大揭秘(组图))
  前言
  大家好,我是IT分享者,我叫皮皮。
  妹纸地图网站大家一定很熟悉了,老司机的天堂。小编第一次说身体在逐渐变空,一定要克制自己,远离这种正能量网站。话不多说,今天就带大家去获取妹子纸质地图上的图片链接。然后大家就明白了。
  一、项目准备
  360浏览器,仅此而已
  二、项目目的
  获取页面上的所有美女图片
  三、项目步骤1. 打开浏览器,搜索图片。我们以美女图片为例:
  
  画面太美了,不忍直视。
  2.打开浏览器控制台
  F12,可以打开浏览器控制台。今天我们要做的就是获取所有图片链接,顺便查看图片。如下所示:
  
  今天我们将在这里获取所有图片链接。相信没接触过前端的人一定对它一无所知,但是编辑讲完之后,你还是什么都不知道,那是你的错。NS。
  3.控制台功能的启示
  你可能觉得这个地方没啥用,没啥用,不如Element Network有用;确实前两个确实很有用,可以用来分析网页结构和网页请求,但我想说的是控制台的功能。永远不要低估它,因为它可以让您在开发过程中快速查看效果图。例如,您编写了一段代码,但您想看看它现在是否可以运行。一般的做法是写HTML+CSS,然后Embedding JavaScript进去,显然太麻烦,修改后要在浏览器中刷新才能看到效果。最终,浏览器和编辑器频繁切换,影响开发速度和效率,甚至占用过多的系统资源。于是,控制台应运而生,它让我们可以轻松使用 JavaScript 代码,无需匹配 HTML 和 CSS 即可运行,一个 Console 就搞定了,这就是我们刚才所说的控制台。我们可以先来看看它的功能:
  
  可以看到,它有自动提示功能,而且比任何第三方IDE都要全面,因为它是和浏览器结合使用的,其他IDE没有这么齐全,所以你可以看到,如果你想用某种方法,它不会提示,只有一个原因,就是你用错了。
  1)。更改其编辑状态
  控制台输入:
  ![4](4.jpgdocument.body.contentEditable=true
  
  在编辑状态下,我们的点击操作没有效果,也就是说只能修改。如果要恢复,请刷新浏览器。
  2)。针对特定元素
  这里我们可以先查看我们想要查看的浏览器图片元素的信息,可以先把所有图片打印出来。这里我们使用一个特殊符号:
  
  我们可以看到,通过这个语法糖,可以打印当前页面的所有图片信息。显示70,表示该页面有70张图片。当编辑器再次滚动鼠标时,图片数量增加了,变成了136张图片。,这表明它是由Ajax加载的。
  除了这种获取图片的方式,还可以这样做:
  document.images
  得到的结果和上面的完全一样。随着这些知识点的积累,我们现在可以轻松获取所有图片链接。
  4.获取图片链接和图片名称
  这里需要将获取到的图片加入到数组中,遍历完成后将所有图片打印出来。
  1)。创建一个数组来存储所有图片
  ab=document.images #获取当前页面所有图片
var aa=[] #建立数组
for(const y of ab){ #建立const变量使得无法修改
aa.push(y); #把图片装进数组
}
  
  2)。遍历数组并打印图像链接
  这里可以用到的方法有很多,我一一介绍。
  1)).对于...in
  for(const a in aa){
console.log(aa[a])
}
  
  2)).For...of
  for(const a of aa){
console.log(a)
}
  
  3)).ForEach
  aa.forEach(function(val,item,array){
console.log(val)
});
  
  4)).地图
  ![10](10.jpgaa.map(function(val,item,array){
console.log(val)
});
  
  可以看到,第四种方法与第三种方法类似,但还是有区别的。前者没有返回值,后者有,后者支持修改返回值。虽然我们把图片链接打印出来了,但是没有打印图片的名字,所以编辑开始找图片的名字:
  
  发现是在Div标签中,于是编辑器开始寻找符合条件的Div:
  document.querySelectorAll(&#39;div.img_tit&#39;)#精确找到所有类名为img_tit的Div
document.getElementsByClassName(&#39;img_tit&#39;)#找到所有类名为img_tit
  然后我们先输出图片名再输出图片链接,这样我们就可以用循环再判断了,如下图:
<p>var a=0;
do{
a++;
if(a%2==0){
console.log(aa[a])
}
else{
console.log(ac[a])
}
}
while(a 查看全部

  js提取指定网站内容(IT共享者获取妹纸图上的图片链接功能大揭秘(组图))
  前言
  大家好,我是IT分享者,我叫皮皮。
  妹纸地图网站大家一定很熟悉了,老司机的天堂。小编第一次说身体在逐渐变空,一定要克制自己,远离这种正能量网站。话不多说,今天就带大家去获取妹子纸质地图上的图片链接。然后大家就明白了。
  一、项目准备
  360浏览器,仅此而已
  二、项目目的
  获取页面上的所有美女图片
  三、项目步骤1. 打开浏览器,搜索图片。我们以美女图片为例:
  
  画面太美了,不忍直视。
  2.打开浏览器控制台
  F12,可以打开浏览器控制台。今天我们要做的就是获取所有图片链接,顺便查看图片。如下所示:
  
  今天我们将在这里获取所有图片链接。相信没接触过前端的人一定对它一无所知,但是编辑讲完之后,你还是什么都不知道,那是你的错。NS。
  3.控制台功能的启示
  你可能觉得这个地方没啥用,没啥用,不如Element Network有用;确实前两个确实很有用,可以用来分析网页结构和网页请求,但我想说的是控制台的功能。永远不要低估它,因为它可以让您在开发过程中快速查看效果图。例如,您编写了一段代码,但您想看看它现在是否可以运行。一般的做法是写HTML+CSS,然后Embedding JavaScript进去,显然太麻烦,修改后要在浏览器中刷新才能看到效果。最终,浏览器和编辑器频繁切换,影响开发速度和效率,甚至占用过多的系统资源。于是,控制台应运而生,它让我们可以轻松使用 JavaScript 代码,无需匹配 HTML 和 CSS 即可运行,一个 Console 就搞定了,这就是我们刚才所说的控制台。我们可以先来看看它的功能:
  
  可以看到,它有自动提示功能,而且比任何第三方IDE都要全面,因为它是和浏览器结合使用的,其他IDE没有这么齐全,所以你可以看到,如果你想用某种方法,它不会提示,只有一个原因,就是你用错了。
  1)。更改其编辑状态
  控制台输入:
  ![4](4.jpgdocument.body.contentEditable=true
  
  在编辑状态下,我们的点击操作没有效果,也就是说只能修改。如果要恢复,请刷新浏览器。
  2)。针对特定元素
  这里我们可以先查看我们想要查看的浏览器图片元素的信息,可以先把所有图片打印出来。这里我们使用一个特殊符号:
  
  我们可以看到,通过这个语法糖,可以打印当前页面的所有图片信息。显示70,表示该页面有70张图片。当编辑器再次滚动鼠标时,图片数量增加了,变成了136张图片。,这表明它是由Ajax加载的。
  除了这种获取图片的方式,还可以这样做:
  document.images
  得到的结果和上面的完全一样。随着这些知识点的积累,我们现在可以轻松获取所有图片链接。
  4.获取图片链接和图片名称
  这里需要将获取到的图片加入到数组中,遍历完成后将所有图片打印出来。
  1)。创建一个数组来存储所有图片
  ab=document.images #获取当前页面所有图片
var aa=[] #建立数组
for(const y of ab){ #建立const变量使得无法修改
aa.push(y); #把图片装进数组
}
  
  2)。遍历数组并打印图像链接
  这里可以用到的方法有很多,我一一介绍。
  1)).对于...in
  for(const a in aa){
console.log(aa[a])
}
  
  2)).For...of
  for(const a of aa){
console.log(a)
}
  
  3)).ForEach
  aa.forEach(function(val,item,array){
console.log(val)
});
  
  4)).地图
  ![10](10.jpgaa.map(function(val,item,array){
console.log(val)
});
  
  可以看到,第四种方法与第三种方法类似,但还是有区别的。前者没有返回值,后者有,后者支持修改返回值。虽然我们把图片链接打印出来了,但是没有打印图片的名字,所以编辑开始找图片的名字:
  
  发现是在Div标签中,于是编辑器开始寻找符合条件的Div:
  document.querySelectorAll(&#39;div.img_tit&#39;)#精确找到所有类名为img_tit的Div
document.getElementsByClassName(&#39;img_tit&#39;)#找到所有类名为img_tit
  然后我们先输出图片名再输出图片链接,这样我们就可以用循环再判断了,如下图:
<p>var a=0;
do{
a++;
if(a%2==0){
console.log(aa[a])
}
else{
console.log(ac[a])
}
}
while(a

js提取指定网站内容( 即可如果想要设置标签中的内容,包括标签、空格、文本、换行等。 )

网站优化优采云 发表了文章 • 0 个评论 • 232 次浏览 • 2021-09-24 11:18 • 来自相关话题

  js提取指定网站内容(
即可如果想要设置标签中的内容,包括标签、空格、文本、换行等。
)
  JS获取标签内容的方法
   测试代码
DOCTYPE html>



Title



这有个 第一个p

这有个第二个p
这是个

span


这有个a标签





  1.innerHTML
  该方法可以获取标签中的所有内容,包括标签、空格、文本、换行符等。
  清除标签内容,innerHTML = "";
  如果要设置标签的内容,innerHTML = "填写你要设置的标签和内容"; 设置内容时,将覆盖所有原创内容。
  JS代码和效果图如下:
  
var box = document.getElementById('box');
// 获取标签的内容
var box1 = box.innerHTML;
var box2 = document.getElementById('box').innerHTML;
console.log(box1);

  
  
//替换标签内容
var box = document.getElementById('box');
box.innerHTML = '你们被我h3替换啦!!!';
console.log(box);

  
  2.内文
  该方法获取标签中的所有文本(及其子标签),但不获取标签(或者它可以过滤掉所有标签)。如果有多个空格或换行符,会被解析为一个空格。
  如果要清除标签内容,innerText = "";
  如果要设置标签的内容,innerText = "填写要设置的标签和内容"; 设置内容时,将覆盖所有原创内容。但是标签不会被解析,会直接以文本的形式打印在页面上。
  
//获取标签机器子标签的所有文本内容
var box = document.getElementById('box');
var box2 = box.innerText;
console.log(box2);

  
  
//修改标签文本内容,内容中包含的标签不会被解析,会文本输出
var box = document.getElementById('box');
box.innerText = '<p>这里有个p,来看一下'
</p>
  
  3.texContent
  textContent 获取标签中的内容。但是,当 textContent 过滤掉标签时,它会保留标签结构。
  针对innerText兼容性问题的JS代码:
  
// 处理innerText的浏览器兼容性问题
function getInnerText(element) {
if (typeof element.innerText === 'string') {
return element.innerText;
} else {
return element.textContent;
}
} 查看全部

  js提取指定网站内容(
即可如果想要设置标签中的内容,包括标签、空格、文本、换行等。
)
  JS获取标签内容的方法
   测试代码
DOCTYPE html>



Title



这有个 第一个p

这有个第二个p
这是个

span


这有个a标签





  1.innerHTML
  该方法可以获取标签中的所有内容,包括标签、空格、文本、换行符等。
  清除标签内容,innerHTML = "";
  如果要设置标签的内容,innerHTML = "填写你要设置的标签和内容"; 设置内容时,将覆盖所有原创内容。
  JS代码和效果图如下:
  
var box = document.getElementById('box');
// 获取标签的内容
var box1 = box.innerHTML;
var box2 = document.getElementById('box').innerHTML;
console.log(box1);

  
  
//替换标签内容
var box = document.getElementById('box');
box.innerHTML = '你们被我h3替换啦!!!';
console.log(box);

  
  2.内文
  该方法获取标签中的所有文本(及其子标签),但不获取标签(或者它可以过滤掉所有标签)。如果有多个空格或换行符,会被解析为一个空格。
  如果要清除标签内容,innerText = "";
  如果要设置标签的内容,innerText = "填写要设置的标签和内容"; 设置内容时,将覆盖所有原创内容。但是标签不会被解析,会直接以文本的形式打印在页面上。
  
//获取标签机器子标签的所有文本内容
var box = document.getElementById('box');
var box2 = box.innerText;
console.log(box2);

  
  
//修改标签文本内容,内容中包含的标签不会被解析,会文本输出
var box = document.getElementById('box');
box.innerText = '<p>这里有个p,来看一下'
</p>
  
  3.texContent
  textContent 获取标签中的内容。但是,当 textContent 过滤掉标签时,它会保留标签结构。
  针对innerText兼容性问题的JS代码:
  
// 处理innerText的浏览器兼容性问题
function getInnerText(element) {
if (typeof element.innerText === 'string') {
return element.innerText;
} else {
return element.textContent;
}
}

js提取指定网站内容(js提取指定网站内容你可以使用一些提取特定网站的插件)

网站优化优采云 发表了文章 • 0 个评论 • 70 次浏览 • 2021-09-23 20:04 • 来自相关话题

  js提取指定网站内容(js提取指定网站内容你可以使用一些提取特定网站的插件)
  js提取指定网站内容
  你可以使用一些提取特定网站内容的插件,例如我比较喜欢用thmahi,它是按照url地址抓取网页,同时提取网页指定区域的文字,
  使用爬虫插件,
  免费导出到excel的编程语言有很多,用python,java,javascript等语言都可以实现。当然,如果这个网站支持oauth(@/)的话,还可以把url地址提供给爬虫,让爬虫自己去爬数据。
  oauth
  python的话我不知道,写网站js的php,mysql,perl都有专门写js,urls的库的。
  ps||ppt||css||js||vba||php||mysql||c#||java||python||php||png||其实php做个爬虫就好了,
  任何语言都可以,百度一下,知乎就有好多技术大牛写的爬虫,可以参考。
  python+django或者python+twitter+thunder
  vba/office文档脚本语言
  你可以打个支持bmap的爬虫,并命名为bmap.xxx,将抓取到的数据命名为urls.xxx.xxx,然后导出为xml格式。
  任何语言都可以,我用java实现的jsoup(就是一个加载的文档).我就在代码中写了这么一句:即能抓取源文件又能抓取提取数据. 查看全部

  js提取指定网站内容(js提取指定网站内容你可以使用一些提取特定网站的插件)
  js提取指定网站内容
  你可以使用一些提取特定网站内容的插件,例如我比较喜欢用thmahi,它是按照url地址抓取网页,同时提取网页指定区域的文字,
  使用爬虫插件,
  免费导出到excel的编程语言有很多,用python,java,javascript等语言都可以实现。当然,如果这个网站支持oauth(@/)的话,还可以把url地址提供给爬虫,让爬虫自己去爬数据。
  oauth
  python的话我不知道,写网站js的php,mysql,perl都有专门写js,urls的库的。
  ps||ppt||css||js||vba||php||mysql||c#||java||python||php||png||其实php做个爬虫就好了,
  任何语言都可以,百度一下,知乎就有好多技术大牛写的爬虫,可以参考。
  python+django或者python+twitter+thunder
  vba/office文档脚本语言
  你可以打个支持bmap的爬虫,并命名为bmap.xxx,将抓取到的数据命名为urls.xxx.xxx,然后导出为xml格式。
  任何语言都可以,我用java实现的jsoup(就是一个加载的文档).我就在代码中写了这么一句:即能抓取源文件又能抓取提取数据.

js提取指定网站内容( 全网智能段落搜集如何提高B2B网站排名(图))

网站优化优采云 发表了文章 • 0 个评论 • 94 次浏览 • 2021-09-17 09:06 • 来自相关话题

  js提取指定网站内容(
全网智能段落搜集如何提高B2B网站排名(图))
  
  
  运行中B2B网站在此过程中,对排名效果影响最大的是用户发布的供求内容和文章内容
  操作B2B网站收录的重量和推广极度依赖于供需信息和专业知识文章. 从事垂直行业的朋友都知道,他们的会员用户通常不知道该写什么。对于有重量的构件B2B网站,丰富的信息通常可以点击更多的关键词排名,获得更多的流量和查询
  B2B行业网站遇到的大多数情况可能是:
  到目前为止,百度一直在打击低质量的内容网站,其中大部分内容都已开始打雷B2B网站,但也由于上述因素,导致了许多问题B2B网站供需内容信息质量差,无法满足百度搜索引擎网页质量的原因
  由于网站内容质量差,重量会不稳定,或者当重量达到一定瓶颈时,无法突破
  供使用B2B网站对于推广产品的用户来说,B2B成员每天、每天、长时间地发布大量产品,以满足原创内容的要求,并使产品页面收录,这是一个巨大的挑战@
  大多数用户是自营职业者,可能正在经历:
  5118开发团队提供了帮助B2B网站制作内容的效率和质量使得搜索引擎愿意@收录为您的客户提供更高质量的内容,提高您会员的查询效果
  
  只需通过一个简单的JS将智能原创功能集成到后台,即可解决B2B用户快速制作内容和提高效率的需求B2B网站用户满意度,激发用户生产能力
  全网络智能段落采集
  如何改进B2B网站排名
  每个人都应该体验到,在创作文章之前搜索创作灵感材料是一件非常耗时的事情,而且在花时间逐一搜索之后,可能不是你想要的内容
  利用全网的智能段落集合,用户只需提供一段原创主题,超级大脑会自动分析内容的核心词,并使用高智能算法高效获取最新的高度相关的文章内容,大大节省了用户在搜索引擎中搜索文章的时间,加快了内容制作速度
  
  用户可以根据内容需求直接插入编辑器文章中,并将关键词内容与精英段落内容进行整合,从而大大提高点击关键词的概率。p>
  智能原创
  如何改进B2B网站@收录
  在挖掘了他们喜爱的内容后,搜索引擎的重复检查算法也让大多数用户感到困惑,导致许多用户花费了大量的时间和精力,但网站仍然没有@收录问题
  使用智能原创代替人力可以大大减少人工干预的时间成本。通过NLP高智能算法,像人一样阅读和理解整个文章内容。句子不是简单的一串单词,而是相互关联的真实事物,从而接近人类的写作模式
  
  通过高效的智能原创,人工修改,细化内容,从而降低文本相似度,绕过重复检查算法,快速创建高质量的唯一文章,大大提高网站@收录
  
  核心特征
  70亿+:70亿关键词语料库支持智能语义替换算法,能够准确理解每个单词的语义
  500万+:每天更新500多万个新词,使人工智能能够正确理解互联网并生成新词
  1000亿+:1000亿官方账户,标题,知乎文章段落,整个网络搜索中最相关的段落集中在文章上@
  100000+:100000用户同时使用,不断提出改进需求,使功能越来越智能化
  100+:100多台服务器支持智能原创API系统的稳定运行保证了JS后台集成后服务的稳定可靠
  JS集成模式,简单在线,包括功能性JS集成案例
  行业知名网站用户集成智能原创(个性化风格可定制)
  
  如何获得
  有关JS代码,请联系5118客户服务
  与JS集成智能原创,B2B网站内容制作不再是问题。让您的客户享受立即制作内容的乐趣
  插件支持的智能原创系统
  cms内容管理系统:帝国DEDE织梦、WordPress、Phpcms、Z-Blog、Drupal、Discuz
  新媒体平台:微信公众号、100个家庭号码、标题
  编辑:kindeditor,ueeditor 查看全部

  js提取指定网站内容(
全网智能段落搜集如何提高B2B网站排名(图))
  
  
  运行中B2B网站在此过程中,对排名效果影响最大的是用户发布的供求内容和文章内容
  操作B2B网站收录的重量和推广极度依赖于供需信息和专业知识文章. 从事垂直行业的朋友都知道,他们的会员用户通常不知道该写什么。对于有重量的构件B2B网站,丰富的信息通常可以点击更多的关键词排名,获得更多的流量和查询
  B2B行业网站遇到的大多数情况可能是:
  到目前为止,百度一直在打击低质量的内容网站,其中大部分内容都已开始打雷B2B网站,但也由于上述因素,导致了许多问题B2B网站供需内容信息质量差,无法满足百度搜索引擎网页质量的原因
  由于网站内容质量差,重量会不稳定,或者当重量达到一定瓶颈时,无法突破
  供使用B2B网站对于推广产品的用户来说,B2B成员每天、每天、长时间地发布大量产品,以满足原创内容的要求,并使产品页面收录,这是一个巨大的挑战@
  大多数用户是自营职业者,可能正在经历:
  5118开发团队提供了帮助B2B网站制作内容的效率和质量使得搜索引擎愿意@收录为您的客户提供更高质量的内容,提高您会员的查询效果
  
  只需通过一个简单的JS将智能原创功能集成到后台,即可解决B2B用户快速制作内容和提高效率的需求B2B网站用户满意度,激发用户生产能力
  全网络智能段落采集
  如何改进B2B网站排名
  每个人都应该体验到,在创作文章之前搜索创作灵感材料是一件非常耗时的事情,而且在花时间逐一搜索之后,可能不是你想要的内容
  利用全网的智能段落集合,用户只需提供一段原创主题,超级大脑会自动分析内容的核心词,并使用高智能算法高效获取最新的高度相关的文章内容,大大节省了用户在搜索引擎中搜索文章的时间,加快了内容制作速度
  
  用户可以根据内容需求直接插入编辑器文章中,并将关键词内容与精英段落内容进行整合,从而大大提高点击关键词的概率。p>
  智能原创
  如何改进B2B网站@收录
  在挖掘了他们喜爱的内容后,搜索引擎的重复检查算法也让大多数用户感到困惑,导致许多用户花费了大量的时间和精力,但网站仍然没有@收录问题
  使用智能原创代替人力可以大大减少人工干预的时间成本。通过NLP高智能算法,像人一样阅读和理解整个文章内容。句子不是简单的一串单词,而是相互关联的真实事物,从而接近人类的写作模式
  
  通过高效的智能原创,人工修改,细化内容,从而降低文本相似度,绕过重复检查算法,快速创建高质量的唯一文章,大大提高网站@收录
  
  核心特征
  70亿+:70亿关键词语料库支持智能语义替换算法,能够准确理解每个单词的语义
  500万+:每天更新500多万个新词,使人工智能能够正确理解互联网并生成新词
  1000亿+:1000亿官方账户,标题,知乎文章段落,整个网络搜索中最相关的段落集中在文章上@
  100000+:100000用户同时使用,不断提出改进需求,使功能越来越智能化
  100+:100多台服务器支持智能原创API系统的稳定运行保证了JS后台集成后服务的稳定可靠
  JS集成模式,简单在线,包括功能性JS集成案例
  行业知名网站用户集成智能原创(个性化风格可定制)
  
  如何获得
  有关JS代码,请联系5118客户服务
  与JS集成智能原创,B2B网站内容制作不再是问题。让您的客户享受立即制作内容的乐趣
  插件支持的智能原创系统
  cms内容管理系统:帝国DEDE织梦、WordPress、Phpcms、Z-Blog、Drupal、Discuz
  新媒体平台:微信公众号、100个家庭号码、标题
  编辑:kindeditor,ueeditor

js提取指定网站内容(1.异步并发的get请求/querylist安装)

网站优化优采云 发表了文章 • 0 个评论 • 140 次浏览 • 2021-09-16 08:21 • 来自相关话题

  js提取指定网站内容(1.异步并发的get请求/querylist安装)
  编写爬虫程序时,使用guzzle的异步和并发get请求非常容易,可以快速爬虫。在时间上,PHP不是多线程的,但它可以使用协作进程来实现异步并发——用户状态下的多线程。有时,请求地址返回的页面需要执行大量JavaScript代码,并且需要动态呈现数据。这里有一个简单的方法
  即使您使用querylist,您也不能再依赖PHP的DOM解析工具simpledom并拥有自己的远程访问功能
  1.安装
  安装querylist
  作曲家需要jaeger/querylist
  安装phantomjs
  Composer需要Jaeger/querylist phantomjs//PHP版本必须为&gt=7.0
  下载对应于计算机系统的phantomjs二进制文件,并将其放在计算机上的任何路径中。下面将使用此路径。下载页面直接转到:
  2.use
  以下是Linux的一个示例:
  use QL\QueryList;
use QL\Ext\PhantomJs;
$ql = QueryList::getInstance();
// 安装时需要设置PhantomJS二进制文件路径
$ql->use(PhantomJs::class,'/usr/local/bin/phantomjs');
//or Custom function name
$ql->use(PhantomJs::class,'/usr/local/bin/phantomjs','browser');
  下面是windows的示例:
  $ql->use(PhantomJs::class,'C:/phantomjs/bin/phantomjs.exe');
$html = $ql->browser('https://m.toutiao.com')->getHtml();
print_r($html);
  相关文件:
  https://doc.querylist.cc/
  例如:
  在百度搜索图书排行榜,直接发送get请求获取无数据的HTML,因为搜索结果页面是通过异步JavaScript获取的
<p> 查看全部

  js提取指定网站内容(1.异步并发的get请求/querylist安装)
  编写爬虫程序时,使用guzzle的异步和并发get请求非常容易,可以快速爬虫。在时间上,PHP不是多线程的,但它可以使用协作进程来实现异步并发——用户状态下的多线程。有时,请求地址返回的页面需要执行大量JavaScript代码,并且需要动态呈现数据。这里有一个简单的方法
  即使您使用querylist,您也不能再依赖PHP的DOM解析工具simpledom并拥有自己的远程访问功能
  1.安装
  安装querylist
  作曲家需要jaeger/querylist
  安装phantomjs
  Composer需要Jaeger/querylist phantomjs//PHP版本必须为&gt=7.0
  下载对应于计算机系统的phantomjs二进制文件,并将其放在计算机上的任何路径中。下面将使用此路径。下载页面直接转到:
  2.use
  以下是Linux的一个示例:
  use QL\QueryList;
use QL\Ext\PhantomJs;
$ql = QueryList::getInstance();
// 安装时需要设置PhantomJS二进制文件路径
$ql->use(PhantomJs::class,'/usr/local/bin/phantomjs');
//or Custom function name
$ql->use(PhantomJs::class,'/usr/local/bin/phantomjs','browser');
  下面是windows的示例:
  $ql->use(PhantomJs::class,'C:/phantomjs/bin/phantomjs.exe');
$html = $ql->browser('https://m.toutiao.com')->getHtml();
print_r($html);
  相关文件:
  https://doc.querylist.cc/
  例如:
  在百度搜索图书排行榜,直接发送get请求获取无数据的HTML,因为搜索结果页面是通过异步JavaScript获取的
<p>

js提取指定网站内容(文章删除指定或匹配的元素和节点!你知道吗?)

网站优化优采云 发表了文章 • 0 个评论 • 90 次浏览 • 2021-09-15 15:23 • 来自相关话题

  js提取指定网站内容(文章删除指定或匹配的元素和节点!你知道吗?)
  如前几篇文章中文章detail所述,我们可以使用jQuery中的detach()方法和jQuery中的remove()方法删除指定或匹配的元素,或者使用removeclass()方法和removeattr()方法删除指定或匹配元素的类或属性。今天,让我们讨论使用jQuery删除指定或匹配元素中的子元素和节点
  jquery中empty()方法的说明
  jQuery中的Empty()方法:这些方法可以清空/删除指定元素下的所有子节点或内容
  语法:
  $(selector).empty()
  举个大“例子”
  在jQuery中使用empty()方法删除Div中的所有内容
  
  HTML代码
  
    <p>这里是P标签内容
    
  这里是第二个P标签的内容
</p>
  JQ代码
  $(&#39;#button&#39;).click(function(){
    $("#mochu").empty();
})
  结果图
  审计源代码如下图所示
  
  通过上图,我们可以发现ID为Mochu的div标签已经删除了p标签和内容
  作者有话要说
  在写这篇文章时,我查阅了三份文件。其中一位说empty()函数应该理解为清除指定元素下的子节点,而不是删除指定元素下的子节点。让我们看看并理解这一点。我个人认为空的比较合适 查看全部

  js提取指定网站内容(文章删除指定或匹配的元素和节点!你知道吗?)
  如前几篇文章中文章detail所述,我们可以使用jQuery中的detach()方法和jQuery中的remove()方法删除指定或匹配的元素,或者使用removeclass()方法和removeattr()方法删除指定或匹配元素的类或属性。今天,让我们讨论使用jQuery删除指定或匹配元素中的子元素和节点
  jquery中empty()方法的说明
  jQuery中的Empty()方法:这些方法可以清空/删除指定元素下的所有子节点或内容
  语法:
  $(selector).empty()
  举个大“例子”
  在jQuery中使用empty()方法删除Div中的所有内容
  
  HTML代码
  
    <p>这里是P标签内容
    
  这里是第二个P标签的内容
</p>
  JQ代码
  $(&#39;#button&#39;).click(function(){
    $("#mochu").empty();
})
  结果图
  审计源代码如下图所示
  
  通过上图,我们可以发现ID为Mochu的div标签已经删除了p标签和内容
  作者有话要说
  在写这篇文章时,我查阅了三份文件。其中一位说empty()函数应该理解为清除指定元素下的子节点,而不是删除指定元素下的子节点。让我们看看并理解这一点。我个人认为空的比较合适

js提取指定网站内容(9,849Pdf文件中嵌入Javasript脚本的利用方式分析)

网站优化优采云 发表了文章 • 0 个评论 • 620 次浏览 • 2021-09-15 15:22 • 来自相关话题

  js提取指定网站内容(9,849Pdf文件中嵌入Javasript脚本的利用方式分析)
  阅读:9849
  Pdf文件是一种广泛使用的文件格式,至今仍在开发2.0版本,其功能也不断丰富,许多鲜为人知的功能可能被用来进行恶意行为。本文将简要介绍如何在PDF文件中嵌入JavaScript脚本
  一、PDF中的JavaScript利用率
  Pdf是可移植文档格式的缩写。它是一种广泛应用于各种场合的文件格式。它是根据postscript语言修改的文件标准,并被ISO组织接受。目前已发展到2.0版本(iso32000)-2).目前广泛使用的是1.7版本,该版本的PDF功能已经相当丰富,可以显示3D模型、播放多媒体音频和视频、执行JavaScript脚本等功能
  Adobe reader的许多CVE漏洞都是通过PDF文件中的某些结构触发的,触发过程需要提前执行嵌入PDF文件中的JavaScript脚本。例如,CVE-2017-11254 Adobe Acrobat and reader中的addannot use after free漏洞通过调用addan来触发该漏洞JavaScript代码不起作用;cve-2018-4901 for PDF中的跟踪器结构中的ID字段的溢出漏洞也会通过文件中的JavaScript调用docid触发
  PDF文件中的JavaScript内容是一种非常有用且广泛使用的攻击手段
  然而,在PDF的JavaScript函数引用规范中,对PDF中可以引用的函数有严格的限制,可以执行的操作相对有限
  通过研究发现,目前针对攻击面的攻击主要分为以下三种方式:
  二、pdf中的JavaScript规范
  将JavaScript插入PDF的介绍主要在JavaScript_api_reference.PDF中介绍。在文档中介绍函数时,将通过四元组描述函数:
  
  第一列表示方法的启用版本以及是否仍在使用中,第二列表示方法引起的更改是否会影响文件,第三列表示方法的实现需要特殊设置,第四列表示方法的可用性
  PDF中的JavaScript根据影响范围分为以下几类:文件夹级脚本、文档级脚本、页面级脚本、域级脚本和批处理级脚本。所有类型的脚本都是事件驱动的,即在相应事件发生时响应和执行
  1、文件夹级脚本
  它收录可能影响acrobat的变量声明和函数定义。它通常用于添加影响acrobat的函数,例如菜单或菜单项,包括应用程序和用户
  这些脚本通常放在相应的文件夹中,并在acrobat启动时加载。它们通常与事件实体的应用程序初始化事件关联
  2、文档级脚本
  它收录变量声明和函数定义,这些变量声明和函数定义可能会影响给定的文件,并且不能在文件外部应用。此级别脚本可以通过acrobat创建并嵌入到PDF文件中。除此类型的脚本外,还有文档级别的操作脚本,其触发操作包括:关闭文件之前,请保存文件前、保存文件后、打印文件前和打印文件后
  3、页面级脚本
  打开或关闭页面时会执行此类型的脚本。打开事件是指页面完成绘制或随时查看新页面时发生的事件。关闭事件是指用户查看的页面不再是当前页面时发生的事件
  4、域级脚本
  域级别脚本绑定到acrobat中的表字段。当用户直接或间接与相应区域交互时,会触发相应的域事件,并且级别脚本存储在PDF文件中
  三、潜在可用内容
  在PDF阅读器支持的所有JavaScript函数中,以下函数在实际应用中仍然会给用户带来一些问题:
  app.launchURL()、app.media.getURLdata()、app.alert()、app.execDialog()、doc.getURL
  1、app.launchURL()函数用于访问远程URL
  此函数的四边形如下所示:
  
  该函数收录两个参数,curl(用于指定文件路径)和bnewframe(用于指定是否在新页面中显示文件)
  打开收录此功能的PDF文件时,将弹出一个窗口,提醒用户建立远程链接,然后使用默认浏览器打开远程连接
  2、app.media.getURLdata函数()打开URL指定的多媒体文件
  四边形如下:
  
  该函数收录两个参数,curl(用于指定文件的路径)和cmimetype(可选,用于指定文件的MIME类型)
  当打开收录此功能的PDF文件时,会弹出一个窗口提醒用户建立远程链接,然后根据版本和应用可能会有安全提示,用户需要手动选择信任,最后使用系统默认播放器播放URL指定的文件
  
  
  
  3、app.alert()功能是弹出一个警告对话框
  四元函数如下所示:
  
  该函数收录多个参数,即:cmsg(用于指定对话框内容)、Nicon(可选,用于指定对话框图标)、ntype(可选,用于指定按钮类型)、ctitle(可选,用于指定对话框标题)、odoc(可选,用于指定与警告相关的文档结构),ocheckbox(可选,在对话框中放置复选框,并指定相关内容、初始值和结束值)
  打开收录此函数的PDF文件时,会弹出相应的对话框,但标题处会出现提示:“警告:Javascript窗口”,如下所示:
  
  
  4、app.execDialog()函数为创建一个对话框
  其四边形如下:
  
  该功能通过设置相关参数,可以实现高度定制的对话框,如下图:
  
  但是,该对话框收录“JavaScript窗口”标题和红色警告文本
  5、doc.getURL函数是通过get方法获取指向文件的URL
  其四边形如下:
  
  此函数收录两个参数:curl(目标文件的地址)和bappend(如果为true,则将运行结果附加到当前文件;当文件在浏览器中运行时,建议为false)。函数运行后,仍然会出现安全提示,如下所示:
  
  但是,此函数的另一个功能是它可以运行本地文件。同时,为了防止执行任意文件,它还可以在注册表项中运行\local\u machine\software\policies\Adobe\Acrobat Reader\11.0\featurelockdown\cdefaultlanchattachmentperms受到限制。系统功能安全当用户试图执行不在限制范围内的文件时,也会调用xecute。在ablefiletype判断该文件是否为可执行文件且不受两个方面的限制后,将出现以下两个弹出窗口:
  
  
  最后打开目标文件:
  
  不同版本的程序不同,在阅读器X中,默认浏览器用于打开上面的图形,而在AcROCAX-Pro中,记事本直接用来打开它/P>
  
  参考链接:
  / 查看全部

  js提取指定网站内容(9,849Pdf文件中嵌入Javasript脚本的利用方式分析)
  阅读:9849
  Pdf文件是一种广泛使用的文件格式,至今仍在开发2.0版本,其功能也不断丰富,许多鲜为人知的功能可能被用来进行恶意行为。本文将简要介绍如何在PDF文件中嵌入JavaScript脚本
  一、PDF中的JavaScript利用率
  Pdf是可移植文档格式的缩写。它是一种广泛应用于各种场合的文件格式。它是根据postscript语言修改的文件标准,并被ISO组织接受。目前已发展到2.0版本(iso32000)-2).目前广泛使用的是1.7版本,该版本的PDF功能已经相当丰富,可以显示3D模型、播放多媒体音频和视频、执行JavaScript脚本等功能
  Adobe reader的许多CVE漏洞都是通过PDF文件中的某些结构触发的,触发过程需要提前执行嵌入PDF文件中的JavaScript脚本。例如,CVE-2017-11254 Adobe Acrobat and reader中的addannot use after free漏洞通过调用addan来触发该漏洞JavaScript代码不起作用;cve-2018-4901 for PDF中的跟踪器结构中的ID字段的溢出漏洞也会通过文件中的JavaScript调用docid触发
  PDF文件中的JavaScript内容是一种非常有用且广泛使用的攻击手段
  然而,在PDF的JavaScript函数引用规范中,对PDF中可以引用的函数有严格的限制,可以执行的操作相对有限
  通过研究发现,目前针对攻击面的攻击主要分为以下三种方式:
  二、pdf中的JavaScript规范
  将JavaScript插入PDF的介绍主要在JavaScript_api_reference.PDF中介绍。在文档中介绍函数时,将通过四元组描述函数:
  
  第一列表示方法的启用版本以及是否仍在使用中,第二列表示方法引起的更改是否会影响文件,第三列表示方法的实现需要特殊设置,第四列表示方法的可用性
  PDF中的JavaScript根据影响范围分为以下几类:文件夹级脚本、文档级脚本、页面级脚本、域级脚本和批处理级脚本。所有类型的脚本都是事件驱动的,即在相应事件发生时响应和执行
  1、文件夹级脚本
  它收录可能影响acrobat的变量声明和函数定义。它通常用于添加影响acrobat的函数,例如菜单或菜单项,包括应用程序和用户
  这些脚本通常放在相应的文件夹中,并在acrobat启动时加载。它们通常与事件实体的应用程序初始化事件关联
  2、文档级脚本
  它收录变量声明和函数定义,这些变量声明和函数定义可能会影响给定的文件,并且不能在文件外部应用。此级别脚本可以通过acrobat创建并嵌入到PDF文件中。除此类型的脚本外,还有文档级别的操作脚本,其触发操作包括:关闭文件之前,请保存文件前、保存文件后、打印文件前和打印文件后
  3、页面级脚本
  打开或关闭页面时会执行此类型的脚本。打开事件是指页面完成绘制或随时查看新页面时发生的事件。关闭事件是指用户查看的页面不再是当前页面时发生的事件
  4、域级脚本
  域级别脚本绑定到acrobat中的表字段。当用户直接或间接与相应区域交互时,会触发相应的域事件,并且级别脚本存储在PDF文件中
  三、潜在可用内容
  在PDF阅读器支持的所有JavaScript函数中,以下函数在实际应用中仍然会给用户带来一些问题:
  app.launchURL()、app.media.getURLdata()、app.alert()、app.execDialog()、doc.getURL
  1、app.launchURL()函数用于访问远程URL
  此函数的四边形如下所示:
  http://blog.nsfocus.net/wp-con ... 4.png 300w" />
  该函数收录两个参数,curl(用于指定文件路径)和bnewframe(用于指定是否在新页面中显示文件)
  打开收录此功能的PDF文件时,将弹出一个窗口,提醒用户建立远程链接,然后使用默认浏览器打开远程连接
  2、app.media.getURLdata函数()打开URL指定的多媒体文件
  四边形如下:
  http://blog.nsfocus.net/wp-con ... 6.png 300w" />
  该函数收录两个参数,curl(用于指定文件的路径)和cmimetype(可选,用于指定文件的MIME类型)
  当打开收录此功能的PDF文件时,会弹出一个窗口提醒用户建立远程链接,然后根据版本和应用可能会有安全提示,用户需要手动选择信任,最后使用系统默认播放器播放URL指定的文件
  http://blog.nsfocus.net/wp-con ... 6.png 300w, http://blog.nsfocus.net/wp-con ... 1.png 768w, http://blog.nsfocus.net/wp-con ... 2.png 600w" />
  http://blog.nsfocus.net/wp-con ... 6.png 300w, http://blog.nsfocus.net/wp-con ... 7.png 768w, http://blog.nsfocus.net/wp-con ... 2.png 600w" />
  http://blog.nsfocus.net/wp-con ... 8.png 300w, http://blog.nsfocus.net/wp-con ... 0.png 768w, http://blog.nsfocus.net/wp-con ... 5.png 600w" />
  3、app.alert()功能是弹出一个警告对话框
  四元函数如下所示:
  http://blog.nsfocus.net/wp-con ... 7.png 300w" />
  该函数收录多个参数,即:cmsg(用于指定对话框内容)、Nicon(可选,用于指定对话框图标)、ntype(可选,用于指定按钮类型)、ctitle(可选,用于指定对话框标题)、odoc(可选,用于指定与警告相关的文档结构),ocheckbox(可选,在对话框中放置复选框,并指定相关内容、初始值和结束值)
  打开收录此函数的PDF文件时,会弹出相应的对话框,但标题处会出现提示:“警告:Javascript窗口”,如下所示:
  http://blog.nsfocus.net/wp-con ... 5.png 300w, http://blog.nsfocus.net/wp-con ... 1.png 600w" />
  http://blog.nsfocus.net/wp-con ... 3.png 300w, http://blog.nsfocus.net/wp-con ... 7.png 600w" />
  4、app.execDialog()函数为创建一个对话框
  其四边形如下:
  http://blog.nsfocus.net/wp-con ... 2.png 300w" />
  该功能通过设置相关参数,可以实现高度定制的对话框,如下图:
  http://blog.nsfocus.net/wp-con ... 5.png 300w, http://blog.nsfocus.net/wp-con ... 0.png 600w" />
  但是,该对话框收录“JavaScript窗口”标题和红色警告文本
  5、doc.getURL函数是通过get方法获取指向文件的URL
  其四边形如下:
  http://blog.nsfocus.net/wp-con ... 2.png 300w" />
  此函数收录两个参数:curl(目标文件的地址)和bappend(如果为true,则将运行结果附加到当前文件;当文件在浏览器中运行时,建议为false)。函数运行后,仍然会出现安全提示,如下所示:
  http://blog.nsfocus.net/wp-con ... 4.png 300w, http://blog.nsfocus.net/wp-con ... 8.png 600w" />
  但是,此函数的另一个功能是它可以运行本地文件。同时,为了防止执行任意文件,它还可以在注册表项中运行\local\u machine\software\policies\Adobe\Acrobat Reader\11.0\featurelockdown\cdefaultlanchattachmentperms受到限制。系统功能安全当用户试图执行不在限制范围内的文件时,也会调用xecute。在ablefiletype判断该文件是否为可执行文件且不受两个方面的限制后,将出现以下两个弹出窗口:
  http://blog.nsfocus.net/wp-con ... 3.png 300w, http://blog.nsfocus.net/wp-con ... 0.png 768w, http://blog.nsfocus.net/wp-con ... 6.png 600w" />
  http://blog.nsfocus.net/wp-con ... 3.png 300w" />
  最后打开目标文件:
  http://blog.nsfocus.net/wp-con ... 6.png 300w, http://blog.nsfocus.net/wp-con ... 3.png 768w, http://blog.nsfocus.net/wp-con ... 1.png 600w" />
  不同版本的程序不同,在阅读器X中,默认浏览器用于打开上面的图形,而在AcROCAX-Pro中,记事本直接用来打开它/P>
  http://blog.nsfocus.net/wp-con ... 5.png 300w, http://blog.nsfocus.net/wp-con ... 0.png 768w, http://blog.nsfocus.net/wp-con ... 1.png 600w" />
  参考链接:
  /

js提取指定网站内容(大部分分享)

网站优化优采云 发表了文章 • 0 个评论 • 75 次浏览 • 2021-09-13 07:13 • 来自相关话题

  js提取指定网站内容(大部分分享)
  小编将与大家分享如何使用Node.js抓取任何网络资源,并将PDF文件输出到本地。相信大部分人还不太了解,所以分享这个文章供大家参考,希望大家看完这个文章,学到很多东西,一起来看看吧!
  要求:
  如果你是技术人员,那可以看我下一个文章,否则请直接移到我的github仓库看文档直接使用
  仓库地址:附文件和源代码
  此需求中使用的技术:Node.js 和 puppeteer
  做个小测试,爬取京东资源
  const puppeteer = require(&#39;puppeteer&#39;); // 引入依赖 
(async () => { //使用async函数完美异步 
const browser = await puppeteer.launch(); //打开新的浏览器
const page = await browser.newPage(); // 打开新的网页 
await page.goto(&#39;https://www.jd.com/&#39;); //前往里面 &#39;url&#39; 的网页
const result = await page.evaluate(() => { //这个result数组包含所有的图片src地址
let arr = []; //这个箭头函数内部写处理的逻辑 
const imgs = document.querySelectorAll(&#39;img&#39;);
imgs.forEach(function (item) {
arr.push(item.src)
})
return arr 
});
// &#39;此时的result就是得到的爬虫数据,可以通过&#39;fs&#39;模块保存&#39;
})()
  复制过去。使用命令行命令`node file name`运行获取爬虫数据。这个 puppeteer 包实际上为我们打开了另一个浏览器,重新打开了网页,并获取了他们的数据。
  注意,以上所有逻辑都是puppeteer包帮我们在不可见的地方打开另一个浏览器,然后处理逻辑,所以最后我们必须调用browser.close()方法关闭那个浏览器。
  此时,我们优化了上一篇文章中的代码,抓取了相应的资源。
  const puppeteer = require(&#39;puppeteer&#39;);
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(&#39;https://www.jd.com/&#39;);
const hrefArr = await page.evaluate(() => {
let arr = [];
const aNodes = document.querySelectorAll(&#39;.cate_menu_lk&#39;);
aNodes.forEach(function (item) {
arr.push(item.href)
})
return arr
});
let arr = [];
for (let i = 0; i  { //这个方法内部console.log无效 
return $(&#39;title&#39;).text(); //返回每个界面的title文字内容
});
arr.push(result) //每次循环给数组中添加对应的值
}
console.log(arr) //得到对应的数据 可以通过Node.js的 fs 模块保存到本地
await browser.close()
})()
  上面有个天坑。 page.evaluate函数内部的console.log无法打印,内部无法获取外部变量,只能返回return。
  使用的选择器在使用前必须先到对应界面的控制台测试是否可以选择DOM。比如京东就不能使用querySelector。因为
  京东的子接口全部使用jQuery,所以我们可以使用jQuery。简而言之,我们可以使用他们开发的所有可以使用的选择器,否则我们无法使用。
  接下来直接爬取Node.js的官网首页,直接生成PDF
  无论您是否了解 Node.js 和 puppeteer 爬虫,您都可以做到。请仔细阅读本文档并按顺序执行每一步
  本项目的实现需求:给我们一个网页地址,抓取他的网页内容,然后输出成我们想要的PDF格式文档。请注意这是一个高质量的PDF文档
  TIPS:本项目的设计思路是一个网页和一个PDF文件,所以每次抓取单个页面时,请复制index.pdf,然后继续更改url地址,继续抓取,并生成一个新的 PDF 文件。当然,您也可以通过循环编译等方式一次性抓取多个网页生成多个PDF文件。
  对应京东首页等图片懒加载的网页,部分爬取的内容处于加载状态。对于有一些反爬虫机制的网页,爬虫也会有问题,但是绝大多数网站Its all可能
  const puppeteer = require(&#39;puppeteer&#39;);
const url = require(&#39;./url&#39;);
(async () => {
const browser = await puppeteer.launch({ headless: true })
const page = await browser.newPage()
//选择要打开的网页 
await page.goto(url, { waitUntil: &#39;networkidle0&#39; })
//选择你要输出的那个PDF文件路径,把爬取到的内容输出到PDF中,必须是存在的PDF,可以是空内容,如果不是空的内容PDF,那么会覆盖内容
let pdfFilePath = &#39;./index.pdf&#39;;
//根据你的配置选项,我们这里选择A4纸的规格输出PDF,方便打印
await page.pdf({
path: pdfFilePath,
format: &#39;A4&#39;,
scale: 1,
printBackground: true,
landscape: false,
displayHeaderFooter: false
});
await browser.close()
})()
  文件解构设计
  
  数据在这个时代非常宝贵。根据网页的设计逻辑,通过选择特定href的地址,可以先直接获取对应的资源,也可以再次使用page.goto方法进入,然后调用page.evaluate()处理逻辑,或者输出对应的PDF文件,当然也可以一次输出多个PDF文件~
  以上是《如何使用Node.js抓取任何网络资源并将PDF文件输出到本地》文章的全部内容,感谢阅读!相信大家都有一定的了解,希望分享的内容对大家有所帮助。想了解更多,请关注一宿云行业资讯频道! 查看全部

  js提取指定网站内容(大部分分享)
  小编将与大家分享如何使用Node.js抓取任何网络资源,并将PDF文件输出到本地。相信大部分人还不太了解,所以分享这个文章供大家参考,希望大家看完这个文章,学到很多东西,一起来看看吧!
  要求:
  如果你是技术人员,那可以看我下一个文章,否则请直接移到我的github仓库看文档直接使用
  仓库地址:附文件和源代码
  此需求中使用的技术:Node.js 和 puppeteer
  做个小测试,爬取京东资源
  const puppeteer = require(&#39;puppeteer&#39;); // 引入依赖 
(async () => { //使用async函数完美异步 
const browser = await puppeteer.launch(); //打开新的浏览器
const page = await browser.newPage(); // 打开新的网页 
await page.goto(&#39;https://www.jd.com/&#39;); //前往里面 &#39;url&#39; 的网页
const result = await page.evaluate(() => { //这个result数组包含所有的图片src地址
let arr = []; //这个箭头函数内部写处理的逻辑 
const imgs = document.querySelectorAll(&#39;img&#39;);
imgs.forEach(function (item) {
arr.push(item.src)
})
return arr 
});
// &#39;此时的result就是得到的爬虫数据,可以通过&#39;fs&#39;模块保存&#39;
})()
  复制过去。使用命令行命令`node file name`运行获取爬虫数据。这个 puppeteer 包实际上为我们打开了另一个浏览器,重新打开了网页,并获取了他们的数据。
  注意,以上所有逻辑都是puppeteer包帮我们在不可见的地方打开另一个浏览器,然后处理逻辑,所以最后我们必须调用browser.close()方法关闭那个浏览器。
  此时,我们优化了上一篇文章中的代码,抓取了相应的资源。
  const puppeteer = require(&#39;puppeteer&#39;);
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(&#39;https://www.jd.com/&#39;);
const hrefArr = await page.evaluate(() => {
let arr = [];
const aNodes = document.querySelectorAll(&#39;.cate_menu_lk&#39;);
aNodes.forEach(function (item) {
arr.push(item.href)
})
return arr
});
let arr = [];
for (let i = 0; i  { //这个方法内部console.log无效 
return $(&#39;title&#39;).text(); //返回每个界面的title文字内容
});
arr.push(result) //每次循环给数组中添加对应的值
}
console.log(arr) //得到对应的数据 可以通过Node.js的 fs 模块保存到本地
await browser.close()
})()
  上面有个天坑。 page.evaluate函数内部的console.log无法打印,内部无法获取外部变量,只能返回return。
  使用的选择器在使用前必须先到对应界面的控制台测试是否可以选择DOM。比如京东就不能使用querySelector。因为
  京东的子接口全部使用jQuery,所以我们可以使用jQuery。简而言之,我们可以使用他们开发的所有可以使用的选择器,否则我们无法使用。
  接下来直接爬取Node.js的官网首页,直接生成PDF
  无论您是否了解 Node.js 和 puppeteer 爬虫,您都可以做到。请仔细阅读本文档并按顺序执行每一步
  本项目的实现需求:给我们一个网页地址,抓取他的网页内容,然后输出成我们想要的PDF格式文档。请注意这是一个高质量的PDF文档
  TIPS:本项目的设计思路是一个网页和一个PDF文件,所以每次抓取单个页面时,请复制index.pdf,然后继续更改url地址,继续抓取,并生成一个新的 PDF 文件。当然,您也可以通过循环编译等方式一次性抓取多个网页生成多个PDF文件。
  对应京东首页等图片懒加载的网页,部分爬取的内容处于加载状态。对于有一些反爬虫机制的网页,爬虫也会有问题,但是绝大多数网站Its all可能
  const puppeteer = require(&#39;puppeteer&#39;);
const url = require(&#39;./url&#39;);
(async () => {
const browser = await puppeteer.launch({ headless: true })
const page = await browser.newPage()
//选择要打开的网页 
await page.goto(url, { waitUntil: &#39;networkidle0&#39; })
//选择你要输出的那个PDF文件路径,把爬取到的内容输出到PDF中,必须是存在的PDF,可以是空内容,如果不是空的内容PDF,那么会覆盖内容
let pdfFilePath = &#39;./index.pdf&#39;;
//根据你的配置选项,我们这里选择A4纸的规格输出PDF,方便打印
await page.pdf({
path: pdfFilePath,
format: &#39;A4&#39;,
scale: 1,
printBackground: true,
landscape: false,
displayHeaderFooter: false
});
await browser.close()
})()
  文件解构设计
  
  数据在这个时代非常宝贵。根据网页的设计逻辑,通过选择特定href的地址,可以先直接获取对应的资源,也可以再次使用page.goto方法进入,然后调用page.evaluate()处理逻辑,或者输出对应的PDF文件,当然也可以一次输出多个PDF文件~
  以上是《如何使用Node.js抓取任何网络资源并将PDF文件输出到本地》文章的全部内容,感谢阅读!相信大家都有一定的了解,希望分享的内容对大家有所帮助。想了解更多,请关注一宿云行业资讯频道!

js提取指定网站内容(【知识点】HTML文档的域有关(一)示例)

网站优化优采云 发表了文章 • 0 个评论 • 73 次浏览 • 2021-09-13 07:12 • 来自相关话题

  js提取指定网站内容(【知识点】HTML文档的域有关(一)示例)
  同源政策
  页面中的Javascript只能读取和访问同域的网页。这里需要注意的是,Javascript本身的域定义与其所在的网站无关,只是Javascript代码中嵌入的文档的域。如以下示例代码:
  

This is a webpage came from http://localhost:8000

123

console.log($('#test').text());

  HTML 文档来自:8000,表示它的域是:8000(域和端口也是相关的)。虽然页面中的jquery是从加载的,但是JQuery的域只和它所在的HTML文档一样,域是相关的,这样就可以访问到HTML文档的属性,所以上面的代码就可以运行了正常。
  附件:使用上述代码的原因是开发者将常用的Javascript库(如JQuery)的地址指向同一个公共URL。用户加载一次JS后,所有后续加载都会被浏览器缓存,从而加快页面加载速度。
  从这个角度看问题,如果提问者已知的远程站点引用了互联网上的任何页面,那么就无法实现你所期望的功能;如果远程站点指的是您可以控制的网站,请参阅下面的放宽同源策略;
<p>放宽同源 policyDocument.domain:用于子域的情况。对于多个窗口(一个页面上有多个iframe),Javascript可以通过将document.domain的值设置为同一个域来访问外部窗口;跨域资源共享:添加Access-Control- 查看全部

  js提取指定网站内容(【知识点】HTML文档的域有关(一)示例)
  同源政策
  页面中的Javascript只能读取和访问同域的网页。这里需要注意的是,Javascript本身的域定义与其所在的网站无关,只是Javascript代码中嵌入的文档的域。如以下示例代码:
  

This is a webpage came from http://localhost:8000

123

console.log($('#test').text());

  HTML 文档来自:8000,表示它的域是:8000(域和端口也是相关的)。虽然页面中的jquery是从加载的,但是JQuery的域只和它所在的HTML文档一样,域是相关的,这样就可以访问到HTML文档的属性,所以上面的代码就可以运行了正常。
  附件:使用上述代码的原因是开发者将常用的Javascript库(如JQuery)的地址指向同一个公共URL。用户加载一次JS后,所有后续加载都会被浏览器缓存,从而加快页面加载速度。
  从这个角度看问题,如果提问者已知的远程站点引用了互联网上的任何页面,那么就无法实现你所期望的功能;如果远程站点指的是您可以控制的网站,请参阅下面的放宽同源策略;
<p>放宽同源 policyDocument.domain:用于子域的情况。对于多个窗口(一个页面上有多个iframe),Javascript可以通过将document.domain的值设置为同一个域来访问外部窗口;跨域资源共享:添加Access-Control-

js提取指定网站内容( 本文适合无论是否有爬虫以及Node.js基础的朋友观看)

网站优化优采云 发表了文章 • 0 个评论 • 162 次浏览 • 2021-09-13 07:11 • 来自相关话题

  js提取指定网站内容(
本文适合无论是否有爬虫以及Node.js基础的朋友观看)
  
  本文适合有无爬虫的朋友和基于Node.js的朋友~ 要求:如果你是技术人员,那可以看我下一个文章,否则请直接移步我的github仓库,就查看文档并使用它。仓库地址:附文档和源代码,别忘了给个star。本次需求使用的技术:Node.js和puppeteer尝试使用,爬取京东资源
  const puppeteer = require('puppeteer'); // 引入依赖
(async () => { //使用async函数完美异步
const browser = await puppeteer.launch(); //打开新的浏览器
const page = await browser.newPage(); // 打开新的网页
await page.goto('https://www.jd.com/'); //前往里面 'url' 的网页
const result = await page.evaluate(() => { //这个result数组包含所有的图片src地址
let arr = []; //这个箭头函数内部写处理的逻辑
const imgs = document.querySelectorAll('img');
imgs.forEach(function (item) {
arr.push(item.src)
})
return arr
});
// '此时的result就是得到的爬虫数据,可以通过'fs'模块保存'
})()
复制过去 使用命令行命令 ` node 文件名 ` 就可以运行获取爬虫数据了
这个 puppeteer 的包 ,其实是替我们开启了另一个浏览器,重新去开启网页,获取它们的数据。
  跳转网页中所有标签对应的所有标题的文字内容
  最终被放入一个数组中。
  browser.newPage()、browser.close() 是固定的书写方式。
  调用这个方法。
  也就是说我们可以先进入京东网页,处理完逻辑,再调用page.goto函数,
  注意,以上所有逻辑都是puppeteer包帮我们在不可见的地方再打开一个
  然后浏览器处理逻辑,所以最后必须调用 browser.close() 方法来关闭浏览器。
  此时,我们优化了上一篇文章中的代码,抓取了相应的资源。
   const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.jd.com/');
const hrefArr = await page.evaluate(() => {
let arr = [];
const aNodes = document.querySelectorAll('.cate_menu_lk');
aNodes.forEach(function (item) {
arr.push(item.href)
})
return arr
});
let arr = [];
for (let i = 0; i < hrefArr.length; i++) {
const url = hrefArr[i];
console.log(url) //这里可以打印
await page.goto(url);
const result = await page.evaluate(() => { //这个方法内部console.log无效

return $('title').text(); //返回每个界面的title文字内容
});
arr.push(result) //每次循环给数组中添加对应的值
}
console.log(arr) //得到对应的数据 可以通过Node.js的 fs 模块保存到本地
await browser.close()
})()
  上面有个天坑。 page.evaluate函数内部的console.log无法打印,内部无法获取外部变量,只能返回return。
  使用的选择器在使用前必须先到对应界面的控制台测试是否可以选择DOM。比如京东就不能使用querySelector。因为
  京东的子接口全部使用jQuery,所以我们可以使用jQuery。简而言之,我们可以使用他们开发的所有可以使用的选择器,否则我们不能。接下来直接爬取Node.js官网首页,直接生成PDF。不管你是否了解 Node.js 和 puppeteer 爬虫,你都可以做到。请仔细阅读本文档并按顺序执行此项目的每个步骤。实现需求:给我们一个网页地址,抓取他的网页内容,输出成我们想要的PDF格式文档。请注意是高质量的PDF文档TIPS:本项目的设计思路是一个网页和一个PDF文件,所以每次爬取一个页面后,请复制index.pdf,然后继续修改url地址,继续爬取,生成新的PDF文件。当然,您也可以通过循环编译等方式一次抓取多个。网页生成多个PDF文件。
  对应京东首页等图片懒加载的网页,部分爬取的内容处于加载状态。对于有一些反爬虫机制的网页,爬虫也会有问题,但是绝大多数网站Its all可能
  文件解构设计
  
  数据在这个时代非常宝贵。根据网页的设计逻辑,通过选择特定href的地址,可以先直接获取对应的资源,也可以再次使用page.goto方法进入,然后调用page.evaluate()处理逻辑,或者输出对应的PDF文件,当然也可以一次输出多个PDF文件~
  这里就不过多介绍了。毕竟,Node.js 可以上天堂,也许以后真的可以做到一切。这么高质量的短教程,请采集
  或者转发给你的朋友,谢谢。 查看全部

  js提取指定网站内容(
本文适合无论是否有爬虫以及Node.js基础的朋友观看)
  
  本文适合有无爬虫的朋友和基于Node.js的朋友~ 要求:如果你是技术人员,那可以看我下一个文章,否则请直接移步我的github仓库,就查看文档并使用它。仓库地址:附文档和源代码,别忘了给个star。本次需求使用的技术:Node.js和puppeteer尝试使用,爬取京东资源
  const puppeteer = require('puppeteer'); // 引入依赖
(async () => { //使用async函数完美异步
const browser = await puppeteer.launch(); //打开新的浏览器
const page = await browser.newPage(); // 打开新的网页
await page.goto('https://www.jd.com/'); //前往里面 'url' 的网页
const result = await page.evaluate(() => { //这个result数组包含所有的图片src地址
let arr = []; //这个箭头函数内部写处理的逻辑
const imgs = document.querySelectorAll('img');
imgs.forEach(function (item) {
arr.push(item.src)
})
return arr
});
// '此时的result就是得到的爬虫数据,可以通过'fs'模块保存'
})()
复制过去 使用命令行命令 ` node 文件名 ` 就可以运行获取爬虫数据了
这个 puppeteer 的包 ,其实是替我们开启了另一个浏览器,重新去开启网页,获取它们的数据。
  跳转网页中所有标签对应的所有标题的文字内容
  最终被放入一个数组中。
  browser.newPage()、browser.close() 是固定的书写方式。
  调用这个方法。
  也就是说我们可以先进入京东网页,处理完逻辑,再调用page.goto函数,
  注意,以上所有逻辑都是puppeteer包帮我们在不可见的地方再打开一个
  然后浏览器处理逻辑,所以最后必须调用 browser.close() 方法来关闭浏览器。
  此时,我们优化了上一篇文章中的代码,抓取了相应的资源。
   const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.jd.com/');
const hrefArr = await page.evaluate(() => {
let arr = [];
const aNodes = document.querySelectorAll('.cate_menu_lk');
aNodes.forEach(function (item) {
arr.push(item.href)
})
return arr
});
let arr = [];
for (let i = 0; i < hrefArr.length; i++) {
const url = hrefArr[i];
console.log(url) //这里可以打印
await page.goto(url);
const result = await page.evaluate(() => { //这个方法内部console.log无效

return $('title').text(); //返回每个界面的title文字内容
});
arr.push(result) //每次循环给数组中添加对应的值
}
console.log(arr) //得到对应的数据 可以通过Node.js的 fs 模块保存到本地
await browser.close()
})()
  上面有个天坑。 page.evaluate函数内部的console.log无法打印,内部无法获取外部变量,只能返回return。
  使用的选择器在使用前必须先到对应界面的控制台测试是否可以选择DOM。比如京东就不能使用querySelector。因为
  京东的子接口全部使用jQuery,所以我们可以使用jQuery。简而言之,我们可以使用他们开发的所有可以使用的选择器,否则我们不能。接下来直接爬取Node.js官网首页,直接生成PDF。不管你是否了解 Node.js 和 puppeteer 爬虫,你都可以做到。请仔细阅读本文档并按顺序执行此项目的每个步骤。实现需求:给我们一个网页地址,抓取他的网页内容,输出成我们想要的PDF格式文档。请注意是高质量的PDF文档TIPS:本项目的设计思路是一个网页和一个PDF文件,所以每次爬取一个页面后,请复制index.pdf,然后继续修改url地址,继续爬取,生成新的PDF文件。当然,您也可以通过循环编译等方式一次抓取多个。网页生成多个PDF文件。
  对应京东首页等图片懒加载的网页,部分爬取的内容处于加载状态。对于有一些反爬虫机制的网页,爬虫也会有问题,但是绝大多数网站Its all可能
  文件解构设计
  
  数据在这个时代非常宝贵。根据网页的设计逻辑,通过选择特定href的地址,可以先直接获取对应的资源,也可以再次使用page.goto方法进入,然后调用page.evaluate()处理逻辑,或者输出对应的PDF文件,当然也可以一次输出多个PDF文件~
  这里就不过多介绍了。毕竟,Node.js 可以上天堂,也许以后真的可以做到一切。这么高质量的短教程,请采集
  或者转发给你的朋友,谢谢。

js提取指定网站内容(不是Web的运作原理及运作流程(一)Web)

网站优化优采云 发表了文章 • 0 个评论 • 66 次浏览 • 2021-09-11 02:11 • 来自相关话题

  js提取指定网站内容(不是Web的运作原理及运作流程(一)Web)
  AJAX 不是 JavaScript 规范,它只是一个哥们“发明”的缩写:Asynchronous JavaScript and XML,意思是使用 JavaScript 来执行异步网络请求。
  如果你仔细观察一个Form的提交,你会发现一旦用户点击了“Submit”按钮,表单开始提交,浏览器会刷新页面,然后在新页面告诉你是否操作成功或失败。如果不幸网络太慢或其他原因,您将获得404页面。
  Web 是这样工作的:一个 HTTP 请求对应一个页面。
  如果您希望用户停留在当前页面并同时发出新的 HTTP 请求,则必须使用 JavaScript 发送此新请求。收到数据后,使用 JavaScript 更新页面。这样用户感觉还是卡在了当前页面,但是数据可以不断更新。
  最早大规模使用AJAX的是Gmail。 Gmail 页面第一次加载后,剩下的所有数据都依赖 AJAX 来更新。
  用 JavaScript 编写完整的 AJAX 代码并不复杂,但需要注意:AJAX 请求是异步执行的,即通过回调函数获取响应。
  在现代浏览器上编写 AJAX 主要依赖于 XMLHttpRequest 对象:
  'use strict';
----
function success(text) {
var textarea = document.getElementById('test-response-text');
textarea.value = text;
}
function fail(code) {
var textarea = document.getElementById('test-response-text');
textarea.value = 'Error code: ' + code;
}
var request = new XMLHttpRequest(); // 新建XMLHttpRequest对象
request.onreadystatechange = function () { // 状态发生变化时,函数被回调
if (request.readyState === 4) { // 成功完成
// 判断响应结果:
if (request.status === 200) {
// 成功,通过responseText拿到响应的文本:
return success(request.responseText);
} else {
// 失败,根据响应码判断失败原因:
return fail(request.status);
}
} else {
// HTTP请求还在继续...
}
}
// 发送请求:
request.open('GET', '/api/categories');
request.send();
alert('请求已发送,请等待响应...');
  对于低版本的IE,需要改成ActiveXObject对象:
  'use strict';
----
function success(text) {
var textarea = document.getElementById('test-ie-response-text');
textarea.value = text;
}
function fail(code) {
var textarea = document.getElementById('test-ie-response-text');
textarea.value = 'Error code: ' + code;
}
var request = new ActiveXObject('Microsoft.XMLHTTP'); // 新建Microsoft.XMLHTTP对象
request.onreadystatechange = function () { // 状态发生变化时,函数被回调
if (request.readyState === 4) { // 成功完成
// 判断响应结果:
if (request.status === 200) {
// 成功,通过responseText拿到响应的文本:
return success(request.responseText);
} else {
// 失败,根据响应码判断失败原因:
return fail(request.status);
}
} else {
// HTTP请求还在继续...
}
}
// 发送请求:
request.open('GET', '/api/categories');
request.send();
alert('请求已发送,请等待响应...');
  如果你想把标准写法和IE写法混在一起,可以这样写:
  var request;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else {
request = new ActiveXObject('Microsoft.XMLHTTP');
}
  通过检查window对象是否有XMLHttpRequest属性来判断浏览器是否支持标准的XMLHttpRequest。注意,不要使用浏览器的 navigator.userAgent 来检测浏览器是否支持某个 JavaScript 功能。一是字符串本身可以伪造,二是通过IE版本判断JavaScript特性会很复杂。
  创建XMLHttpRequest对象时,必须先设置onreadystatechange的回调函数。在回调函数中,通常我们只需要通过readyState === 4判断请求是否完成,如果完成则根据status === 200判断是否响应成功。
  XMLHttpRequest 对象的 open() 方法有 3 个参数。第一个参数指定是GET还是POST,第二个参数指定URL地址,第三个参数指定是否使用异步。默认为true,不需要写。
  注意,第三个参数不要指定false,否则浏览器会停止响应,直到AJAX请求完成。如果这个请求需要10秒,那么在10秒内你会发现浏览器处于“假死”状态。
  最后调用send()方法实际发送请求。 GET 请求不需要参数,POST 请求需要将 body 部分作为字符串或 FormData 对象传入。
  安全限制
  上面代码中的 URL 使用了相对路径。如果改成“再运行,肯定会报错。在Chrome控制台中,也可以看到错误信息。
  这是由浏览器的同源策略引起的。默认情况下,JavaScript 发送 AJAX 请求时,URL 的域名必须与当前页面完全相同。
  完全协议是指域名必须相同(和不同),协议必须相同(http和https不同),端口号必须相同(默认为:端口80,即不同于:8080)。一些浏览器有更宽松的开口并允许不同的端口。大多数浏览器都严格遵守此限制。
  是不是因为JavaScript无法请求外部域(即其他网站)URL的URL?方法还是有的,大概就这么几个:
  一是通过Flash插件发送HTTP请求。这种方法可以绕过浏览器的安全限制,但必须安装Flash并与Flash交互。不过Flash使用起来比较麻烦,现在用的越来越少了。
  二是通过设置同源域名下的代理服务器进行转发,JavaScript负责将请求发送到代理服务器:
  '/proxy?url=http://www.sina.com.cn'
  然后代理服务器返回结果,使其符合浏览器的同源策略。这种方法的问题在于它需要在服务器端进行额外的开发。
  第三种方法称为JSONP。它有一个限制。它只能使用 GET 请求并且需要返回 JavaScript。这种跨域的方式其实就是利用浏览器来允许跨域引用JavaScript资源:
  

...
...
  JSONP 通常以函数调用的形式返回,例如返回的 JavaScript 内容如下:
  foo('data');
  这样的话,如果我们先在页面中准备好foo()函数,然后动态的给页面添加一个
  function refreshPrice(data) {
var p = document.getElementById('test-jsonp');
p.innerHTML = '当前价格:' +
data['0000001'].name +': ' +
data['0000001'].price + ';' +
data['1399001'].name + ': ' +
data['1399001'].price;
}
  当前价格:
  刷新
  最后用 getPrice() 函数触发:
  function getPrice() {
var
js = document.createElement('script'),
head = document.getElementsByTagName('head')[0];
js.src = 'http://api.money.126.net/data/feed/0000001,1399001?callback=refreshPrice';
head.appendChild(js);
}
  跨域数据加载完成。
  CORS
  如果浏览器支持 HTML5,那么您可以使用新的跨域策略:CORS 一劳永逸。
  CORS 代表跨域资源共享,即 HTML5 规范定义的跨域访问资源的方式。
  在了解CORS之前,我们先来了解一下概念:
  Origin 表示这个域,即浏览器当前页面的域。当 JavaScript 向外部域(例如)发起请求时,浏览器收到响应后,首先检查 Access-Control-Allow-Origin 是否收录该域。如果是,则跨域请求成功。如果不是,则请求失败。 JavaScript 将无法获得任何响应数据。
  用图片表示:
  
  假设域为本地域,域为外域,只要响应头Access-Control-Allow-Origin为*或为*,本次请求即可成功。
  可见,跨域成功与否取决于对方的服务器是否愿意为你设置正确的Access-Control-Allow-Origin,决定权始终掌握在对方手中.
  这种跨域请求称为“简单请求”。简单的请求包括 GET、HEAD 和 POST(POST 的 Content-Type 仅限于 application/x-www-form-urlencoded、multipart/form-data 和 text/plain),并且没有自定义标头(例如,X-定制:12345),通常可以满足90%的需求。
  无论是否需要使用 JavaScript 跨 CORS 请求资源,都必须了解 CORS 的原理。最新的浏览器完全支持 HTML5。引用国外资源时,除了JavaScript和CSS之外,还必须验证CORS。例如,当您引用第三方 CDN 上的字体文件时:
  /* CSS */
@font-face {
font-family: 'FontAwesome';
src: url('http://cdn.com/fonts/fontawesome.ttf') format('truetype');
}
  如果CDN服务商没有正确设置Access-Control-Allow-Origin,浏览器将无法加载字体资源。
  对于PUT、DELETE以及application/json等其他类型的POST请求,在发送AJAX请求之前,浏览器会先向这个URL发送一个OPTIONS请求(称为预检请求),询问目标服务器是否接受:
  OPTIONS /path/to/resource HTTP/1.1
Host: bar.com
Origin: http://my.com
Access-Control-Request-Method: POST
  服务器必须响应并明确指出允许的方法:
  HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://my.com
Access-Control-Allow-Methods: POST, GET, PUT, OPTIONS
Access-Control-Max-Age: 86400
  浏览器确认服务器响应的Access-Control-Allow-Methods头中确实收录要发送的AJAX请求的Method,然后继续发送AJAX,否则会抛出错误。
  由于 REST 中通过 POST 和 PUT 以 JSON 格式传输数据是很常见的,为了正确处理跨域的 POST 和 PUT 请求,服务器必须正确响应 OPTIONS 请求。
  需要深入了解CORS的童鞋请参考W3C文档。 查看全部

  js提取指定网站内容(不是Web的运作原理及运作流程(一)Web)
  AJAX 不是 JavaScript 规范,它只是一个哥们“发明”的缩写:Asynchronous JavaScript and XML,意思是使用 JavaScript 来执行异步网络请求。
  如果你仔细观察一个Form的提交,你会发现一旦用户点击了“Submit”按钮,表单开始提交,浏览器会刷新页面,然后在新页面告诉你是否操作成功或失败。如果不幸网络太慢或其他原因,您将获得404页面。
  Web 是这样工作的:一个 HTTP 请求对应一个页面。
  如果您希望用户停留在当前页面并同时发出新的 HTTP 请求,则必须使用 JavaScript 发送此新请求。收到数据后,使用 JavaScript 更新页面。这样用户感觉还是卡在了当前页面,但是数据可以不断更新。
  最早大规模使用AJAX的是Gmail。 Gmail 页面第一次加载后,剩下的所有数据都依赖 AJAX 来更新。
  用 JavaScript 编写完整的 AJAX 代码并不复杂,但需要注意:AJAX 请求是异步执行的,即通过回调函数获取响应。
  在现代浏览器上编写 AJAX 主要依赖于 XMLHttpRequest 对象:
  'use strict';
----
function success(text) {
var textarea = document.getElementById('test-response-text');
textarea.value = text;
}
function fail(code) {
var textarea = document.getElementById('test-response-text');
textarea.value = 'Error code: ' + code;
}
var request = new XMLHttpRequest(); // 新建XMLHttpRequest对象
request.onreadystatechange = function () { // 状态发生变化时,函数被回调
if (request.readyState === 4) { // 成功完成
// 判断响应结果:
if (request.status === 200) {
// 成功,通过responseText拿到响应的文本:
return success(request.responseText);
} else {
// 失败,根据响应码判断失败原因:
return fail(request.status);
}
} else {
// HTTP请求还在继续...
}
}
// 发送请求:
request.open('GET', '/api/categories');
request.send();
alert('请求已发送,请等待响应...');
  对于低版本的IE,需要改成ActiveXObject对象:
  'use strict';
----
function success(text) {
var textarea = document.getElementById('test-ie-response-text');
textarea.value = text;
}
function fail(code) {
var textarea = document.getElementById('test-ie-response-text');
textarea.value = 'Error code: ' + code;
}
var request = new ActiveXObject('Microsoft.XMLHTTP'); // 新建Microsoft.XMLHTTP对象
request.onreadystatechange = function () { // 状态发生变化时,函数被回调
if (request.readyState === 4) { // 成功完成
// 判断响应结果:
if (request.status === 200) {
// 成功,通过responseText拿到响应的文本:
return success(request.responseText);
} else {
// 失败,根据响应码判断失败原因:
return fail(request.status);
}
} else {
// HTTP请求还在继续...
}
}
// 发送请求:
request.open('GET', '/api/categories');
request.send();
alert('请求已发送,请等待响应...');
  如果你想把标准写法和IE写法混在一起,可以这样写:
  var request;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else {
request = new ActiveXObject('Microsoft.XMLHTTP');
}
  通过检查window对象是否有XMLHttpRequest属性来判断浏览器是否支持标准的XMLHttpRequest。注意,不要使用浏览器的 navigator.userAgent 来检测浏览器是否支持某个 JavaScript 功能。一是字符串本身可以伪造,二是通过IE版本判断JavaScript特性会很复杂。
  创建XMLHttpRequest对象时,必须先设置onreadystatechange的回调函数。在回调函数中,通常我们只需要通过readyState === 4判断请求是否完成,如果完成则根据status === 200判断是否响应成功。
  XMLHttpRequest 对象的 open() 方法有 3 个参数。第一个参数指定是GET还是POST,第二个参数指定URL地址,第三个参数指定是否使用异步。默认为true,不需要写。
  注意,第三个参数不要指定false,否则浏览器会停止响应,直到AJAX请求完成。如果这个请求需要10秒,那么在10秒内你会发现浏览器处于“假死”状态。
  最后调用send()方法实际发送请求。 GET 请求不需要参数,POST 请求需要将 body 部分作为字符串或 FormData 对象传入。
  安全限制
  上面代码中的 URL 使用了相对路径。如果改成“再运行,肯定会报错。在Chrome控制台中,也可以看到错误信息。
  这是由浏览器的同源策略引起的。默认情况下,JavaScript 发送 AJAX 请求时,URL 的域名必须与当前页面完全相同。
  完全协议是指域名必须相同(和不同),协议必须相同(http和https不同),端口号必须相同(默认为:端口80,即不同于:8080)。一些浏览器有更宽松的开口并允许不同的端口。大多数浏览器都严格遵守此限制。
  是不是因为JavaScript无法请求外部域(即其他网站)URL的URL?方法还是有的,大概就这么几个:
  一是通过Flash插件发送HTTP请求。这种方法可以绕过浏览器的安全限制,但必须安装Flash并与Flash交互。不过Flash使用起来比较麻烦,现在用的越来越少了。
  二是通过设置同源域名下的代理服务器进行转发,JavaScript负责将请求发送到代理服务器:
  '/proxy?url=http://www.sina.com.cn'
  然后代理服务器返回结果,使其符合浏览器的同源策略。这种方法的问题在于它需要在服务器端进行额外的开发。
  第三种方法称为JSONP。它有一个限制。它只能使用 GET 请求并且需要返回 JavaScript。这种跨域的方式其实就是利用浏览器来允许跨域引用JavaScript资源:
  

...
...
  JSONP 通常以函数调用的形式返回,例如返回的 JavaScript 内容如下:
  foo('data');
  这样的话,如果我们先在页面中准备好foo()函数,然后动态的给页面添加一个
  function refreshPrice(data) {
var p = document.getElementById('test-jsonp');
p.innerHTML = '当前价格:' +
data['0000001'].name +': ' +
data['0000001'].price + ';' +
data['1399001'].name + ': ' +
data['1399001'].price;
}
  当前价格:
  刷新
  最后用 getPrice() 函数触发:
  function getPrice() {
var
js = document.createElement('script'),
head = document.getElementsByTagName('head')[0];
js.src = 'http://api.money.126.net/data/feed/0000001,1399001?callback=refreshPrice';
head.appendChild(js);
}
  跨域数据加载完成。
  CORS
  如果浏览器支持 HTML5,那么您可以使用新的跨域策略:CORS 一劳永逸。
  CORS 代表跨域资源共享,即 HTML5 规范定义的跨域访问资源的方式。
  在了解CORS之前,我们先来了解一下概念:
  Origin 表示这个域,即浏览器当前页面的域。当 JavaScript 向外部域(例如)发起请求时,浏览器收到响应后,首先检查 Access-Control-Allow-Origin 是否收录该域。如果是,则跨域请求成功。如果不是,则请求失败。 JavaScript 将无法获得任何响应数据。
  用图片表示:
  
  假设域为本地域,域为外域,只要响应头Access-Control-Allow-Origin为*或为*,本次请求即可成功。
  可见,跨域成功与否取决于对方的服务器是否愿意为你设置正确的Access-Control-Allow-Origin,决定权始终掌握在对方手中.
  这种跨域请求称为“简单请求”。简单的请求包括 GET、HEAD 和 POST(POST 的 Content-Type 仅限于 application/x-www-form-urlencoded、multipart/form-data 和 text/plain),并且没有自定义标头(例如,X-定制:12345),通常可以满足90%的需求。
  无论是否需要使用 JavaScript 跨 CORS 请求资源,都必须了解 CORS 的原理。最新的浏览器完全支持 HTML5。引用国外资源时,除了JavaScript和CSS之外,还必须验证CORS。例如,当您引用第三方 CDN 上的字体文件时:
  /* CSS */
@font-face {
font-family: 'FontAwesome';
src: url('http://cdn.com/fonts/fontawesome.ttf') format('truetype');
}
  如果CDN服务商没有正确设置Access-Control-Allow-Origin,浏览器将无法加载字体资源。
  对于PUT、DELETE以及application/json等其他类型的POST请求,在发送AJAX请求之前,浏览器会先向这个URL发送一个OPTIONS请求(称为预检请求),询问目标服务器是否接受:
  OPTIONS /path/to/resource HTTP/1.1
Host: bar.com
Origin: http://my.com
Access-Control-Request-Method: POST
  服务器必须响应并明确指出允许的方法:
  HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://my.com
Access-Control-Allow-Methods: POST, GET, PUT, OPTIONS
Access-Control-Max-Age: 86400
  浏览器确认服务器响应的Access-Control-Allow-Methods头中确实收录要发送的AJAX请求的Method,然后继续发送AJAX,否则会抛出错误。
  由于 REST 中通过 POST 和 PUT 以 JSON 格式传输数据是很常见的,为了正确处理跨域的 POST 和 PUT 请求,服务器必须正确响应 OPTIONS 请求。
  需要深入了解CORS的童鞋请参考W3C文档。

js提取指定网站内容(如何模拟请求和如何解析HTML的链接和标题?(一))

网站优化优采云 发表了文章 • 0 个评论 • 75 次浏览 • 2021-09-07 06:17 • 来自相关话题

  js提取指定网站内容(如何模拟请求和如何解析HTML的链接和标题?(一))
  虽然这已经是很久以前的事了,但题目似乎已经解决了这个问题。但是看到很多答案的方法有点太重了,这里提供一个效率更高,消耗资源更少的方法。由于主题没有指定需要什么,这里的示例采用主页上所有帖子的链接和标题。
  首先请记住浏览器环境对内存和CPU的消耗非常严重,尽量避免模拟浏览器环境的爬虫代码。请记住,对于一些前端渲染的网页,虽然我们需要的数据在HTML源代码中是看不到的,但更有可能是通过另一个请求(最有可能是JSON格式)得到纯数据。我们不仅不需要模拟浏览器,还可以节省解析HTML的消耗。
<p>接下来,我打开北京帖子论坛的首页,发现首页的HTML源代码中确实没有文章页面显示的内容。那么,很有可能这是通过JS异步加载到页面的。通过浏览器开发工具(OS X下Chrome浏览器通过command+option+i或者Win/Linux下通过F12)加载首页分析请求,很容易找到,如下图的请求: 查看全部

  js提取指定网站内容(如何模拟请求和如何解析HTML的链接和标题?(一))
  虽然这已经是很久以前的事了,但题目似乎已经解决了这个问题。但是看到很多答案的方法有点太重了,这里提供一个效率更高,消耗资源更少的方法。由于主题没有指定需要什么,这里的示例采用主页上所有帖子的链接和标题。
  首先请记住浏览器环境对内存和CPU的消耗非常严重,尽量避免模拟浏览器环境的爬虫代码。请记住,对于一些前端渲染的网页,虽然我们需要的数据在HTML源代码中是看不到的,但更有可能是通过另一个请求(最有可能是JSON格式)得到纯数据。我们不仅不需要模拟浏览器,还可以节省解析HTML的消耗。
<p>接下来,我打开北京帖子论坛的首页,发现首页的HTML源代码中确实没有文章页面显示的内容。那么,很有可能这是通过JS异步加载到页面的。通过浏览器开发工具(OS X下Chrome浏览器通过command+option+i或者Win/Linux下通过F12)加载首页分析请求,很容易找到,如下图的请求:

官方客服QQ群

微信人工客服

QQ人工客服


线