Python是一种非常适合SEO学习的语言,不仅语法简单,而且很多功能还能通过各种库来实现,可谓SEO居家必备的“良药”。

背景

作为SEO,每天都有一批数据需要记录,抓取方面,收录方面,流量方面等。

在收录方面,收录率是非常有意义的一个指标,可以直接反映整站或者某频道的收录情况。

我之前使用的是昆哥的软件,可以随机抽取一批页面查询,但后来觉得可以用python做得更自动化,更方便,于是就有了这个脚本。

思路

脚本的整体思路是这样的:

用搜索关键词构建百度搜索URL(查询收录的时候搜索词就是待查页面URL)

获取百度搜索结果页内容

提取百度搜索结果(这里是最终的真实URL)

收录判定

具体代码

#coding=utf-8

import requests

from bs4 import BeautifulSoup as bs

import re

headers = {

'User-Agent': 'Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+5.1;+Trident/4.0;+GTB7.1;+.NET+CLR+2.0.50727)'

} # 设置UA模拟用户,还可设置多个UA提高搜索成功率

def baidu_url(word): # 构建百度搜索URL;因为是查收录,所以只显示了前10个搜索结果,还可以通过rn参数来调整搜索结果的数量

'''

get baidu search url

'''

return 'https://www.baidu.com/s?wd=%s' % word

def baidu_cont(url): # 获取百度搜索结果页内容

r = requests.get(url, headers=headers)

return r.content

def serp_links(word): #获取百度搜索结果的最终URL

'''

get baidu serp links with the word

'''

b_url = baidu_url(word)

soup = bs(baidu_cont(b_url))

b_tags = soup.find_all('h3', {'class': 't'}) # 获取URL的特征值是通过class="t"

b_links = [tag.a['href'] for tag in b_tags]

real_links = []

for link in b_links: # 使用requests库获取了最终URL,而不是快照URL

try:

r = requests.get(link, headers=headers, timeout=120)

except Exception as e:

real_links.append('page404')

else:

real_links.append(r.url)

return real_links

def indexer(url): # 待查URL是否在百度搜索结果的URL列表中,如果在就表示收录,反之未收录

indexed_links = serp_links(url)

if url in indexed_links:

return True

else:

return False

特点

之前也写过python的收录脚本,但感觉不准确,于是这次算是改良版。本次的脚本也有一些优势和劣势。

优势:

准确率高。脚本中比对的是百度搜索结果中最终的真实的URL,而不是快照URL,所以完全不会出现偏差(注:百度在去年做了调整,将标题上链接改为baidu的跳转链接,而不是真实链接);

函数封装。本次脚本跟之前最大的不同就是进行了封装,每次使用只要import一下即可(我对发送邮件也做了封装);当然,也是为了方便其他百度查询,比如百度排名,百度site值;

容错处理。因为平常都是批量查询,并且结合crontab定时任务,所以没有容错很可能中断。我主要通过try和requests的timeout来处理,最主要是前者;

劣势:

速度慢。由于SERP每个结果都要返回最终URL,难免增加了很多次查询,这就导致速度很慢;但这也是目前较稳妥的处理方式,因为查询速度快会导致百度查询失败,弹出验证码;如果要高速查询也不是没有办法,可以通过多线程+更换host来实现;

需要自定义。之前的脚本就是傻瓜版,把URL放在一个文件里,然后运行程序就会看到结果,现在的脚本只能算是一个小引擎,需要投入使用还需要自己配置;不过剩下的工作也不多了,而且自己配置下更能满足自己的需求。

转自【张亚楠Blog】https://www.zhidaow.com/

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐