一、 事件的缘起
因为懒,所以一直没有搞这个百度站长平台的API提交功能,最近新弄了一个网站,还是弄一个看看有没有效果。
(一)为什么要使用API推送功能?
1.及时发现:可以缩短百度爬虫发现您站点新链接的时间,使新发布的页面可以在第一时间被百度收录
2.保护原创:对于网站的最新原创内容,使用API推送功能可以快速通知到百度,使内容可以在转发之前被百度发现
(二)API推送可以推多少条链接?
答:API推送可提交的链接数量上限是根据您提交的新产生有价值链接数量而决定的,百度会根据您提交数量的情况不定期对上限额进行调整,提交的新产生有价值链接数量越多,可提交链接的上限越高。
二、目标
(一)程序每天检测网站首页(或者目录页)所有文章的url,将文章url与服务器上储存的url列表对比,如果是新的url,就将这个url提交给百度站长平台API,如果是已经提交过的url,则略过,并将百度站长平台返回的结果写入到日志文件。
(二)当网站当天发布了文章之后,下一分钟执行这个脚本,第一时间将当天新发布文章的URL推送给百度站长平台的API。
三、成果展示
四、代码
#! -*- coding:utf-8 -*- __author__="snailtoday.com" import requests import re from my_logging import Mylogging mylog = Mylogging() url = 'http://data.zz.baidu.com/urls?site=www.xxx.com.cn&token=your token' def push_urls(url, urls): '''根据百度站长提供的API推送链接 url = = 'http://data.zz.baidu.com/urls?site=你的网址&token=you token' urls = '网站需要推送的地址,多个可用 \n 链接' ''' headers = { 'User-Agent': 'curl/7.12.1', 'Host': 'data.zz.baidu.com', 'Content - Type': 'text / plain', 'Content - Length': '83' } try: html = requests.post(url, headers=headers, data=urls, timeout=5).text return html except: return "{'error':404,'message':'请求超时,接口地址错误!'}" def get_list(url): #攻取网站的urls html=requests.get(url).text pat = '<h2 class="entry-title"><a href="(.*?)" target="_blank">.*?</a></h2>' result = re.findall(pat,html)#返回一个包含HTML文档h2标题url的列表 return result category_url = "http://www.xxx.com.cn/category/%e5%86%a5%e6%83%b3" today_urls = get_list(category_url) # today_urls = [today_urls[2]] f = open("posted.txt","r") #保存已经发布过的urls urls = f.read() for single_url in today_urls: if single_url not in urls: open('posted.txt','a+').write(single_url+'\n') print("正在递交{}给百度产长平台api.".format(single_url)) result = push_urls(url,single_url) mylog.write_log(result) mylog.write_log("*"*80) else: print("No url posted") mylog.write_log("*"*80) f.close() mylog.remove_logging(3)
五、通过宝塔计划任务执行
通过crontab来弄还是有点麻烦,发现还是用宝塔的计划任务比较简单
不过刚开始弄的时候,报错:
f = open("posted.txt","r") #保存已经发布过的urls
FileNotFoundError: [Errno 2] No such file or directory: 'posted.txt'
后来加上了一行cd到当前目录的代码,终于成功了。
cd /home/wwwroot/www.xxx.com.cn/baidu_api/ python3 /home/wwwroot/www.xxx.com.cn/baidu_api/baidu_post.py
唉,总共下来,花了我2小时的时间。