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 'http://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放在一个文件里,然后运行程序就会看到结果,现在的脚本只能算是一个小引擎,需要投入使用还需要自己配置;不过剩下的工作也不多了,而且自己配置下更能满足自己的需求。
写在最后
- 最近一直想发出自己的声音,但忽然不知道写什么了。写自己的思想?还不够完善;写自己的SEO思路?感觉很空;还是写一些自己的脚本吧,这个脚本还是比较可靠的,目前基本上不会挂掉;另外也透露下,现在正在测试排名脚本,可以自动查询百度排名,计算排名质量分,如果完善之后,也许也会添加进来。
- 最后,昨天收到了谷歌的邀请,参加东京的杰出贡献者会议,虽说还有4,5个月,不过挺激动的。又想想自己好久没在谷歌社区里做贡献了,也有点惭愧。
- 附图来自quora.