php可以抓取网页数据吗(是想要搜索引擎抓取是吧?搜索引擎一般只会抓取title和meta)
优采云 发布时间: 2022-01-03 16:01php可以抓取网页数据吗(是想要搜索引擎抓取是吧?搜索引擎一般只会抓取title和meta)
我想被搜索引擎抓取,对吗?
搜索引擎一般只抓取标题和元内容、h1、描述等内容
不会运行js。
只会抓取您图片 1 中的内容(不会加载其中的任何其他链接)。
一般需要实现这些,可以使用vue服务端渲染。
如果您对现有项目进行更改。这个工作量的变化会比较大。
一般来说,如果你想改变一个现有的项目,它可以被搜索引擎抓取。还有一种方法。
既然搜索引擎抓取只会抓取标题,那么我会在后台渲染这些,其他的就保持原样。
如何实现?
您需要在前端更改一些内容:
1、路由不能使用#的模式(因为链接#好,服务器获取不到)
2、需要被搜索引擎抓取的列表必须修改为后端渲染,比如产品列表页面,跳转方法必须有指定的标签链接,搜索引擎可以爬下来
(可以很简单,比如:可以加一个下一页,一个标签,放在id="app"里面(这是后端的内容),前端可以改最多在加载vue之前隐藏)
3、 以商品详情为例,(good-info:表示商品详情,12345:表示商品详情编号)后台根据这些数据渲染模板。你也可以用吗? /good-info?id=12345 的形式。
后端所需的更改:
1、因为路由方式改变了,后端需要支持前端路由。 (例如:访问/web/????不管后面是什么,只要没有匹配到的静态资源,就会返回到后端渲染模板。这个需要一个小改动,就是改变index.html文件给一个名字,因为如果/web/这样的话,默认是index.html,静态资源匹配。),如果前端没有路由,这个方法会返回这个模板,并且前端需要指定404页面什么的,也可以使用其他方法,比如:根据前端路由匹配模板,给别人返回404。
2、获取对应数据的链接较多,如:/good-info/12345,需要获取商品详情编号:12345的数据,渲染模板,返回。
后端代码
<br />
<br />
const express = require('express');<br />
const router = express.Router();<br />
const path = require('path')<br />
<br />
// 开放静态文件<br />
router.use(express.static(path.join(__dirname, 'view'),{<br />
maxage: '2h' // 缓存<br />
}));<br />
<br />
// 商品详情 -- 可以添加更多其他的<br />
router.use('/good-info/:id', (req, res, next) => {<br />
// 根据链接参数,从数据库请求数据<br />
const obj = {<br />
22222: {title: '22222title', h1: '标题22222'},<br />
12345: {title: '12345title', h1: '标题12345'},<br />
}<br />
const id = req.params.id<br />
req.data = obj[id]<br />
next()<br />
})<br />
<br />
router.use('/', async (req, res, next) => {<br />
// 渲染好,返回<br />
res.render(path.join(__dirname, 'view/dome'), req.data); // req.data: {title: '我是后端渲染title', h1: '我是标题h1'}<br />
})<br />
<br />
module.exports = router;<br />
模板代码
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
还有很多其他的方法。例如,前端和后端不需要更改。原理就像一个代理。服务器用于先渲染页面,然后返回页面。
我没有专门找过,有需要的可以自己找。
希望这些能帮到你。