当前位置: 首页 > 后端技术 > PHP

针对搜索引擎爬虫的SpoofedSSR

时间:2023-03-29 17:07:40 PHP

玩过Google的站长们可能都遇到过这种情况。我开发的应用程序使用Vue/React。写完之后,我用FetchasGoogle来爬取。我傻眼了,什么也爬不出来。在网上搜索解决方案,都出来了一堆额外的SSR框架。如果要上node,好像太麻烦了。做完的项目,为了让搜索引擎爬虫爬几个页面,改前端代码,改后端语言,着实郁闷。闪电般快速的解决方案:确定查看者是人还是爬虫a。如果是人,直接进入正常的html+javascript渲染流程b。如果是爬虫,去[2]缓存文件夹找到渲染后的html文件a。如果存在,则将渲染后的html文件直接丢给爬虫b。如果不存在,则到[3]服务器打开命令行浏览器访问同一个地址,将渲染页面生成的字符串丢给爬虫,并将该字符串作为html文件存放在缓存文件夹中.这样用户还是按照原来的方式访问应用,爬虫爬取到已经渲染好的页面,这样爬虫就不会出现空白页面了。当然,实现这个方案有两个关键点:关于命令行浏览器。HeadlessBrowser有很多,但并不是所有的都能用。很多地方都说用PhantomJs来做,其实这个浏览器是不靠谱的。首先,你需要额外编写一个setTimeout脚本来等待页面渲染完成。第二,目前的浏览器不支持ES6。如果javascript中存在不受支持的语法,则渲染将失败。如果你用的是chrome浏览器,语法支持没问题,只需要一行代码就可以修复google-chrome--headless--disable-gpu--dump-dom--no-sandbox--window-size=1280,1696关于生成的字符串。dumpdom生成的string不能直接使用,因为string中还包含客户端渲染的javascript代码,爬虫爬完后会尝试执行,然后出来一个空页面。对于渲染出来的字符串,需要使用正则或者DOM去掉javascript代码,这样爬虫才能正常解析PHP实现,包括缓存策略在内一共50行代码