1.一个前端非侵入式骨架屏自动生成方案
2.为什么爬虫抓取的码解页面和浏览器看到不一致?
3.用爬虫抓取网页得到的源代码和浏览器中看到的不一样运用了什么技术?
4.ç©è½¬Puppeteer
5.爬虫为什么抓不到网页源码
6.开源分享 | 在线编辑器,支持PSD解析、码解AI抠图等,码解基于Puppeteer生成
一个前端非侵入式骨架屏自动生成方案
性能优化、码解减少页面加载时间、码解提升用户体验是码解要不要给朋友源码前端领域永恒话题。面对前后端分离与异步渲染的码解普遍应用,页面在用户访问时不可避免出现短暂白屏。码解目前的码解解决方案多样,服务端同步渲染效果最佳,码解但成本高,码解需大量投入服务器部署与运维;页面loading通用性强,码解成本低,码解但信息传递量少;首屏骨架屏能预先提供大量信息,码解聚焦用户关注点,码解过渡自然,但成本稍高。
综合分析,骨架屏是解决白屏问题的优质方案。现有骨架屏方案大致分为三种:侵入业务式手写代码、非侵入业务式手写代码以及非侵入式骨架屏代码自动生成。侵入式方案对业务代码有较大侵入性,后续维护成本略高;非侵入式方案使骨架屏代码与业务代码解耦,花椒引流源码维护成本降低,但有配置成本;自动生成方案无需手写骨架屏代码,使用成本低。
考虑现有方案优劣,我们选择非侵入式骨架屏自动生成方案。基于饿了么骨架屏方案设计思路,结合优化思路,设计出一种新方案。设计原则包括:高效、灵活、美观、兼容性好。方案分为骨架屏生成和注入项目源码两个环节,骨架屏生成阶段产出base或HTML+样式代码,base注入为背景图,HTML源码则根据需求选择。
优化点包括:利用Puppeteer进行页面操作,设置waitUntil参数确保页面充分加载;文本块处理采用linear-gradient背景;块处理将img标签src设为1x1px灰色base;a标签href设为javascript:void(0)防止误点;自定义属性设置调整骨架屏美观;首屏HTML与样式处理移除非首屏节点。
生成的骨架屏在实际业务中展现出优化加载时间、提升用户体验的效果。通过代码实现,我们优化了骨架屏生成与注入流程,源码加密是降低开发成本,提高效率。
参考资料包括:社区现有骨架屏方案、CSS-Tricks教程、SegmentFault文章等,这些资源提供了设计与实现骨架屏的理论基础。
业务实践证明,该方案在实际应用中能有效减少白屏现象,提升页面加载体验,具备较高的实用价值。
效果演示与业务实践成果已通过链接提供,详细信息请查看。
为什么爬虫抓取的页面和浏览器看到不一致?
有可能是因为网页采用了动态网页技术,如AJAX、JavaScript等,导致浏览器中看到的网页内容与通过爬虫抓取的网页源代码不同。
动态网页技术可以使网页在加载后通过JavaScript代码动态地修改或添加页面内容,而这些修改和添加的内容是在浏览器中执行的,而不是在服务器端。因此,如果使用传统的爬虫工具,只能获取到最初加载的ws源码架设网页源代码,而无法获取动态生成的内容。
解决这个问题的方法是使用支持JavaScript渲染的爬虫工具,例如Selenium和Puppeteer。这些工具可以模拟浏览器行为,实现动态网页的加载和渲染,从而获取完整的网页内容。
另外,有些网站也可能采用反爬虫技术,例如IP封禁、验证码、限制访问频率等,这些技术也可能导致爬虫抓取的网页源代码与浏览器中看到的不一样。针对这些反爬虫技术,需要使用相应的反反爬虫策略。
用爬虫抓取网页得到的源代码和浏览器中看到的不一样运用了什么技术?
网页源代码和浏览器中看到的不一样是因为网站采用了动态网页技术(如AJAX、JavaScript等)来更新网页内容。这些技术可以在用户与网站进行交互时,通过异步加载数据、动态更新页面内容,实现更加流畅、快速的用户体验。而这些动态内容无法通过简单的python ai 源码网页源代码获取,需要通过浏览器进行渲染后才能看到。
当使用爬虫抓取网页时,一般只能获取到网页源代码,而无法获取到经过浏览器渲染后的页面内容。如果要获取经过浏览器渲染后的内容,需要使用一个浏览器渲染引擎(如Selenium)来模拟浏览器行为,从而获取到完整的页面内容。
另外,网站为了防止爬虫抓取数据,可能会采用一些反爬虫技术,如设置验证码、限制IP访问频率等。这些技术也会导致爬虫获取到的页面内容与浏览器中看到的不一样。
ç©è½¬Puppeteer
1 ç®ä»Puppeteer æ¯ä¸ä¸ª Node åºï¼å®æä¾äºä¸ä¸ªé«çº§ API æ¥éè¿ DevTools åè®®æ§å¶ Chromium æ Chromeã
Puppeteer é»è®¤ä»¥æ 头模å¼ï¼headlessï¼è¿è¡ï¼ä¹å°±æ¯è¿è¡ä¸ä¸ªæ çé¢ç Chrome æµè§å¨ã
2 åºç¨åºæ¯
2.1 页é¢çæ PDF
Puppeteer æä¾äºé¡µé¢çæ PDF çæ¹æ³ï¼æ们å¯ä»¥å©ç¨è¿ä¸ªæ¹æ³æ¥å°é¡µé¢å¯¼åºä¸º PDF ï¼å¯¼åºç PDF ææå Chrome æµè§å¨æå°åè½å¯¼åºç PDF ä¸è´ã
å ·ä½çåºç¨åºæ¯æï¼
2.2 页é¢æªå¾
Puppeteer æä¾äºæªå¾çæ¹æ³ï¼æ们å¯ä»¥å©ç¨è¿ä¸ªæ¹æ³æ¥å°é¡µé¢çæå®åºå导åºä¸º jpeg æ png å¾çã
å ·ä½çåºç¨åºæ¯æï¼
2.3 æå¡ç«¯æ¸²æ
å页åºç¨ï¼SPAï¼ç主è¦å 容æ¯å¨ JavaScript åæå¡ç«¯è¯·æ±æ°æ®å渲æçï¼åå¨ç¬è«é¾ä»¥æå主è¦å 容ãé¦å±å è½½æ ¢çé®é¢ï¼èä½¿ç¨ Next.jsãNuxt.js çæå¡ç«¯æ¸²ææ¡æ¶æ¹é çææ¬è¾é«ã
å¦æåªæ¯ä¸ºäºæç´¢å¼æä¼åï¼æ们å¯ä»¥èèå©ç¨ Puppeteer æ¥å®ç°ãæ们å¯ä»¥å¨ç½å ³å±å¤æ请æ±çæ¥æºï¼å¦ææ¯ç¬è«ï¼ç´æ¥è¿åç± Puppeteer æå¡ç«¯æ¸²æç html æ件ã
2.4 èªå¨åUIæµè¯
ä½¿ç¨ Puppeteer å¯ä»¥æ¨¡æ Chrome æµè§å¨ç¯å¢ï¼ç»å JavaScript æµè¯æ¡æ¶ï¼å¦ Jestï¼å¯ä»¥å®ç°èªå¨å UI æµè¯ã
Puppeteer æä¾äº Mouse ç±»æ¥æ¨¡æé¼ æ æä½ï¼æä¾äº Keyboard ç±»æ¥æ¨¡æé®çæä½ï¼æä¾äº Touchscreen ç±»æ¥æ¨¡æ触å±æä½ï¼å¹¶ä¸ Puppeteer æä¾ç Page ç±»éæå¾å¤æ¹æ³å¯ä»¥ç¨æ¥æä½å ç´ ï¼æ¯å¦ç¹å»å ç´ ãèç¦å ç´ çæä½ã
2.5 页é¢æ£æµåæ
ä½¿ç¨ Puppeteer æä¾ç page.tracing ç³»åæ¹æ³æè·ç½ç«ç timeline trace æ¥å¯¹é¡µé¢è¿è¡æ§è½åæã
ä½¿ç¨ Puppeteer æä¾ç page.coverage ç³»åæ¹æ³æ¥è·å JavaScript å CSS è¦ççã
ä½¿ç¨ Puppeteer æä¾ç page.metrics() æ¹æ³æ¥è·åæ个æ¶é´ç¹é¡µé¢çææ æ°æ®ï¼å æ¬é¡µé¢ç documents æ°éãiframe æ°éãjs äºä»¶æ°éãdom èç¹æ°éãå¸å±æ°éãæ ·å¼éæ°è®¡ç®æ°éãå¸å±æ¶é´ãæ ·å¼éæ°è®¡ç®æ»æ¶é´ãjs 代ç æ§è¡æ»æ¶é´ãä»»å¡æ§è¡æ»æ¶é´ãå ç¨å å å大å°ãæ»çå å å大å°ã
ä½¿ç¨ Puppeteer æä¾ç Request ç±»å Response ç±»æ¥çæ§é¡µé¢åéç请æ±åæ¥åçååºã
3 åºç¡æ¦å¿µ
Puppeteer API æ¯åå±æ¬¡çï¼åæ äºæµè§å¨ç»æã
Puppeteer ä½¿ç¨ DevTools åè®®ä¸æµè§å¨è¿è¡éä¿¡ã
Browser æ¯æµè§å¨å®ä¾ï¼å¯ä»¥æå¤ä¸ªæµè§å¨ä¸ä¸æã
BrowserContext æ¯æµè§å¨ä¸ä¸æå®ä¾ï¼å®ä¹äºä¸ä¸ªæµè§ä¼è¯å¹¶å¯æ¥æå¤ä¸ªé¡µé¢ã
Page æ¯é¡µé¢å®ä¾ï¼è³å°æ¥æä¸ä¸ªæ¡æ¶ï¼ä¸»æ¡æ¶mainFrameï¼ï¼å¯è½è¿æç± iframe å建çå ¶ä»æ¡æ¶ã
Frame æ¯æ¡æ¶å®ä¾ï¼è³å°æä¸ä¸ªé»è®¤ç JavaScript æ§è¡ä¸ä¸æãå¯è½è¿æä¸æ©å±æä»¶å ³èçæ§è¡ä¸ä¸æã
Worker 表示ä¸ä¸ªWebWorkerï¼å ·æåä¸æ§è¡ä¸ä¸æã
4 å¿«éä¸æ
4.1 å®è£ puppeteer-core
npm i puppeteer-core
puppeteer-core æ¯ä¸ä¸ªè½»é级ç Puppeteer çæ¬ï¼èª 1.7.0 çæ¬ä»¥æ¥ï¼å®æ¹é½ä¼åå¸ä¸ä¸ª puppeteer-core å ï¼å®è£ è¿ä¸ªå æ¶ï¼é»è®¤ä¸ä¼ä¸è½½ Chromiumã
4.2 ä¸è½½ Chromium
Puppeteer å®ç½ï¼ .vuejs.org/v2/guide/index.html ï¼ãä½¿ç¨ Chrome æµè§å¨çæå°åè½ï¼å¨æå°é¢è§ä¸æ们å¯ä»¥çå°æå°ææåå®é ç½é¡µçå 容并ä¸ä¸è´ãè¿æ¯å 为 vue2 çå®æ¹ææ¡£ç½é¡µæ·»å äºä¸äºæå°æ ·å¼ã访é®æå°æ ·å¼æå¨çæä»¶ï¼ .vuejs.org/css/page.css ï¼å¹¶æç´¢ @media print å°±è½æç½ä¸ºä»ä¹å¨æå°é¢è§ä¸ä¸äºå ç´ ï¼å¦é¡¶æ ã侧边æ çï¼è¢«éèæè æ ·å¼ä¸åäºã
æ¥ä¸æ¥è¿å ¥æ£é¢ï¼è®©æä»¬ä½¿ç¨ Puppeteer æ¥å®ç°åæ ·çæå°ï¼å¯¼åº PDFï¼åè½ã
å¨ example ç®å½ä¸æ°å»º exportPdf.js æ件ã
pdf æ¹æ³ä¼è¿å PDF æ件ç Buffer æ°æ®ï¼ä»¥ä¾¿åç»å¤çãè¿éæ们åªæ¯æ¼ç¤ºä¸ä¸è¿ä¸ªåè½ï¼ä¼ å ¥ path åæ°å°±è½è®© pdf æ¹æ³å° PDF æ件åå°æå®è·¯å¾äºã
ä½¿ç¨ node è¿è¡è¿ä¸ª js æ件ã
node ./src/example/exportPdf.js
è¿è¡å®æ¯åï¼example ç®å½ä¸åºç°äº exportPdf.pdf æ件ãæå¼è¿ä¸ªæ件便è½çå° vue2 å®æ¹ææ¡£äºã
5.2 ç½é¡µæªå¾
å¨è¿ä¸é¨åï¼æ们æ¼ç¤ºä¸ä¸æ´ä¸ªç½é¡µæªå¾çåè½ã
å¨ example ç®å½ä¸æ°å»º exportImg.js æ件ã
ä½¿ç¨ node è¿è¡è¿ä¸ª js æ件ã
node ./src/example/exportImg.js
è¿è¡å®æ¯åï¼example ç®å½ä¸åºç°äº exportImg.png æ件ãæå¼è¿ä¸ªæ件便è½çå° vue2 å®æ¹ææ¡£äºã
爬虫为什么抓不到网页源码
有可能是因为网页采用了动态网页技术,如AJAX、JavaScript等,导致浏览器中看到的网页内容与通过爬虫抓取的网页源代码不同。
动态网页技术可以使网页在加载后通过JavaScript代码动态地修改或添加页面内容,而这些修改和添加的内容是在浏览器中执行的,而不是在服务器端。因此,如果使用传统的爬虫工具,只能获取到最初加载的网页源代码,而无法获取动态生成的内容。
解决这个问题的方法是使用支持JavaScript渲染的爬虫工具,例如Selenium和Puppeteer。这些工具可以模拟浏览器行为,实现动态网页的加载和渲染,从而获取完整的网页内容。
另外,有些网站也可能采用反爬虫技术,例如IP封禁、验证码、限制访问频率等,这些技术也可能导致爬虫抓取的网页源代码与浏览器中看到的不一样。针对这些反爬虫技术,需要使用相应的反反爬虫策略。
开源分享 | 在线编辑器,支持PSD解析、AI抠图等,基于Puppeteer生成
分享开源项目——迅排设计,一款在线编辑器,具备PSD解析、AI抠图等功能,基于Puppeteer生成。项目于最近完成更新并开源,短短一天内收获上百个Star。
迅排设计提供前端界面与生成服务,运行于与端口,通过本地启动的Chrome浏览器实例合成。功能包括上传PSD模板、AI抠图、编辑与设计快捷键文字、调整大小、裁剪、拖动至容器显示以及图层管理。
上传PSD模板至“我的”-“资源管理”界面,解析后可编辑模板,调整完毕后上传至个人作品集。AI抠图功能允许用户上传需要背景去除的,自动执行抠图过程。画布中双击可编辑文字,使用吸色器修改颜色,支持拖拽缩放大小、裁剪以及放置容器内显示。图层面板提供快速层级调整,图层锁定后元素不可移动,解锁后可自由调整。
标尺辅助线可通过拖拽创建并随时删除。项目架构包括Vue3、Vite2、Vuex、ElementPlus等前端技术,Puppeteer、Express用于生成,Node.js作为服务端技术。组件库地址位于github.com/palxiao/fron...
开源感受深刻,项目受到广泛关注,曾有用户提出购买源码或商业化需求。通过开源,将项目价值传递给更多需要的人,促进了技术交流与学习。开源项目让他人避免走弯路,节省时间,专注于个人技术追求和产出。当前项目仍在不断完善,代码可能存在不足之处,但开源的初衷在于贡献,期待更多的支持和反馈。
迅排设计的开源地址为github.com/palxiao/post...
在线Demo:design.palxp.com/
文档网站:xp.palxp.com/
PSD解析上传界面:design.palxp.com/psd
AI抠图在线体验:design.palxp.com/home?...
教你写爬虫用Java爬虫爬取百度搜索结果!可爬w+条!
教你写爬虫用Java爬取百度搜索结果的实战指南
在本文中,我们将学习如何利用Java编写爬虫,实现对百度搜索结果的抓取,最高可达万条数据。首先,目标是获取搜索结果中的五个关键信息:标题、原文链接、链接来源、简介和发布时间。 实现这一目标的关键技术栈包括Puppeteer(网页自动化工具)、Jsoup(浏览器元素解析器)以及Mybatis-Plus(数据存储库)。在爬取过程中,我们首先分析百度搜索结果的网页结构,通过控制台查看,发现包含所需信息的元素位于class为"result c-container xpath-log new-pmd"的div标签中。 爬虫的核心步骤包括:1)初始化浏览器并打开百度搜索页面;2)模拟用户输入搜索关键词并点击搜索;3)使用代码解析页面,获取每个搜索结果的详细信息;4)重复此过程,处理多个关键词和额外的逻辑,如随机等待、数据保存等。通过这样的通用方法,我们实现了高效的数据抓取。 总结来说,爬虫的核心就是模仿人类操作,获取网络上的数据。Puppeteer通过模拟人工点击获取信息,而我们的目标是更有效地获取并处理数据。如果你对完整源码感兴趣,可以在公众号获取包含爬虫代码、数据库脚本和网页结构分析的案例资料。