Thinking——nodejs实现的SEO相关的库
SEO
SEO是为了网站在搜索引擎中的自然排名更靠前,引入更多的用户流量。SEO有很多技巧,譬如官网多发优质文章,文章的url做成静态化,文章多出现一些搜索相关的关键字,自建站群等等。
百度收录
百度定期会对优质文章进行收录(原创程度高),如何判断文章是否被收录呢?有个简单的方法:
直接在百度的搜索框输入文章的链接,如果有结果且结果里就有对应文章的链接,就说明这篇文章被收录。
代码实现
自己用nodejs封装了一个查询收录和计算文章原创度的库,已放置于Github上,这里对isURLIncluded接口梳理一下自己的思路,原理很简单,就是上文讲的方法,只是有些细节。
isURLIncluded
const baiduSearchUrl = 'https://www.baidu.com/s?wd='; async function isURLIncluded(url) { url = url.trim(); let urlParsed = URL.parse(url); let body = await sendRequest(baiduSearchUrl + url); let $ = cheerio.load(body); let firstBlock = $('#1'); let emptyBlock = $('#container .content_none'); if(firstBlock.length > 0) { let firstLinkText = firstBlock.find('.f13 > a > b').eq(0).text(); // 三个.和四个.都会有 firstLinkText = firstLinkText.split('...')[0].trim(); // 域名开头 // 带protocol if(url.substr(0, firstLinkText.length) === firstLinkText) { return true; } let protocol = urlParsed.protocol + "//"; let urlNoProtocol = url.substr(protocol.length); return urlNoProtocol.substr(0, firstLinkText.length) === firstLinkText } else if(emptyBlock.length > 0) { return false; } else { throw new Error('访问频率过快'); } }
思路
直接调用百度接口查询后,要考虑到情况如下:
├── 网络正常 |── 有查询结果 |── 无查询结果 |── 其他错误(如百度反爬虫策略) ├── 网络出错
有查询结果我是用html中id=1的元素(也就是第一个查询到的结果)判断的
无查询结果有两种情况(一种存在class=content_none元素,一种存在hit_top_new元素)
对于我有查询结果的情况,我把百度给我的链接和输入链接进行比对
百度给的链接(标绿色的部分)会有省略号(,三个点和四个点都有),所以我用了统一用三个点进行截断,取第一部分
firstLinkText = firstLinkText.split('...')[0].trim();
然后用这部分字符串和输入的链接进行比对(分两种,因为有时候百度给的结果有协议头,有时候没有)
带协议头比较
if(articleUrl.substr(0, firstLinkText.length) === firstLinkText) { return true; }
不带协议头比较
let protocol = urlParsed.protocol + "//"; let articleUrlNoProtocol = articleUrl.substr(protocol.length); return articleUrlNoProtocol.substr(0, firstLinkText.length) === firstLinkText
相关推荐
sskjsskj 2020-07-18
zhuakuang0 2020-06-10
yanweiqi 2020-06-01
chenluhan 2020-05-28
zhuakuang0 2020-05-02
dfhtgh 2020-04-14
山外的网络自留地 2020-04-09
成都胖子的个人 2020-03-05
李蓝箫 2020-03-08
李蓝箫 2020-03-06
zhuakuang0 2020-03-06
成人用品 2020-03-03
chenluhan 2020-03-01
haohong 2020-02-20
zhuakuang0 2020-02-17
chenluhan 2020-02-17
THEEYE 2020-01-18
zhuakuang0 2020-01-18
成人用品 2020-01-11