摘要:用搜索关键词构建百度搜索URL(查询收录的时候搜索词就是待查页面URL)本次脚本跟之前最大的不同就是进行了封装,每次使用只要import一下即可(我对发送邮件也做了封装);当然,也是为了方便其他百度查询,比如百度排名,百度site值;
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放在一个文件里,然后运行程序就会看到结果,现在的脚本只能算是一个小引擎百度收录查询 命令,需要投入使用还需要自己配置;不过剩下的工作也不多了,而且自己配置下更能满足自己的需求。