美文网首页Python Web开发学习
Django Signals(信号)实现推送链接到百度资源搜索平

Django Signals(信号)实现推送链接到百度资源搜索平

作者: 吾星喵 | 来源:发表于2019-05-31 20:33 被阅读1次

    更多内容请点击 我的博客 查看,欢迎来访。

    Django Signals(信号)实现推送链接到百度资源搜索平台

    使用说明

    1. 链接提交工具是网站主动向百度搜索推送数据的工具,本工具可缩短爬虫发现网站链接时间,网站时效性内容建议使用链接提交工具,实时向搜索推送数据。本工具可加快爬虫抓取速度,无法解决网站内容是否收录问题
    2. 百度搜索资源平台为站长提供链接提交通道,您可以提交想被百度收录的链接,百度搜索引擎会按照标准处理,但不保证一定能够收录您提交的链接。

    百度添加自己的站点

    https://ziyuan.baidu.com/linksubmit/index

    访问上面的链接,添加自己的站点,会得到推送接口

    BLOG_20190531_203121_76

    这儿会提供创建、更新、删除数据时的接口调用接口,之后会用到。

    Python实现百度接口调用

    # baidu_link_submit.py
    
    
    import requests
    
    token = '???'  # 百度链接推送提供的token
    site = 'blog.starmeow.cn'  # 自己的域名
    
    create_link_url = 'http://data.zz.baidu.com/urls?site={}&token={}&type=original'.format(site, token)  # 推送
    update_link_url = 'http://data.zz.baidu.com/update?site={}&token={}'.format(site, token)  # 更新
    delete_link_url = 'http://data.zz.baidu.com/del?site={}&token={}'.format(site, token)  # 删除
    
    
    def push_urls(url, urls):
        """
        根据百度站长提供的API推送链接
        :param url: 百度提供的推送、更新、删除接口
        :param urls:
        :return:
        """
        headers = {
            'User-Agent': 'curl/7.12.1',
            'Host': 'data.zz.baidu.com',
            'Content - Type': 'text / plain',
            'Content - Length': '83'
        }
    
        try:
            r = requests.post(url, headers=headers, data='\n'.join(urls), timeout=5).text
            print('blog signals.py中调用百度链接提交结果:', r)
            return r
        except BaseException as e:
            print('blog signals.py中调用百度链接提交失败:', str(e))
            return str(e)
    
    
    if __name__ == '__main__':
        #测试
        urls = [
            'https://blog.starmeow.cn/detail/82161242827b703e6acf9c726942a1e/',
            'https://blog.starmeow.cn/detail/96da2f590cd7246bbde0051047b0d6f/',
        ]
        result = push_urls(create_link_url, urls)
        print(result)  # {"remain":4999988,"success":2}  # 当天剩余的可推送url条数;成功推送的url条数
    
    """
    {
        "remain":4999998,  当天剩余的可推送url条数
        "success":2,  成功推送的url条数
        "not_same_site":[],  由于不是本站url而未处理的url列表
        "not_valid":[]  不合法的url列表
    }
    """
    

    使用Signal实现链接推送

    当创建、更新、删除文章时,利用Django的信号来实现链接推送。

    from django.db.models.signals import post_save, post_init, pre_delete
    from django.dispatch import receiver
    from django_hosts.resolvers import reverse
    from .tools.baidu_link_submit import create_link_url, update_link_url, delete_link_url, push_urls
    
    
    @receiver(post_save, sender=Article)
    def blog_save_handler(sender, instance=None, created=False, **kwargs):
        """
        推送创建或修改文章后,该文章的url给百度
        :param sender:
        :param instance: 创建的对象
        :param created:
        :param kwargs:
        :return:
        """
        if created:
            # 其他操作
    
            # 创建后推送百度链接
            instance_url = reverse('detail', args=(instance.ecpid,), host='blog_v0_2')
            instance_url = 'https:' + instance_url
            push_urls(create_link_url, [instance_url, ])
    
            # 其他操作
        else:
            # print('更新时,博客ecpid:', instance.ecpid)
    
            # 更新后,或者是被访问,只要该models发生变化,推送百度更新
            instance_url = reverse('detail', args=(instance.ecpid,), host='blog_v0_2')
            instance_url = 'https:' + instance_url
            push_urls(update_link_url, [instance_url, ])
    
            # 其他操作
    
    
    @receiver(pre_delete, sender=Article)
    def blog_pre_delete(sender, instance, **kwargs):
        """
        推送删除文章后,该文章的url给百度
        :param sender:
        :param instance: 删除的对象
        :param kwargs:
        :return:
        """
        print('正在删除实例:', instance)
    
        instance_url = reverse('detail', args=(instance.ecpid,), host='blog_v0_2')
        instance_url = 'https:' + instance_url
        push_urls(delete_link_url, [instance_url, ])
    

    发现的问题

    在这个例子中我使用update_link_urldelete_link_url都会显示{"error":400,"message":"over quota"},不知道什么原因了,难道是没提交过的链接做更新和删除操作?具体等后面测试,因为一条连接都还没推送出去。

    添加自动推送

    自动推送是百度搜索资源平台为提高站点新增网页发现速度推出的工具,安装自动推送JS代码的网页,在页面被访问时,页面URL将立即被推送给百度。

    添加代码到页面中

        <script>
            (function () {
                var bp = document.createElement('script');
                var curProtocol = window.location.protocol.split(':')[0];
                if (curProtocol === 'https') {
                    bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
                }
                else {
                    bp.src = 'http://push.zhanzhang.baidu.com/push.js';
                }
                var s = document.getElementsByTagName("script")[0];
                s.parentNode.insertBefore(bp, s);
            })();
        </script>  <!--百度链接主动推送-->
    

    推送成功

    经过几天,终于在百度搜索资源平台看到提交的数量了

    BLOG_20190531_203054_63

    相关文章

      网友评论

        本文标题:Django Signals(信号)实现推送链接到百度资源搜索平

        本文链接:https://www.haomeiwen.com/subject/tcfntctx.html