zoukankan      html  css  js  c++  java
  • 百度收集自动推送脚本——python版

    做网站的过程中,网站做出来容易,把网站推广出去就难了,其中第一步就是需要各大搜索引擎,如百度,谷歌,360和搜狗等对我们的网站进行收录,链接提交方面,其实各大网站斗差不多,基本上都有sitemap提交,但百度网站收录除了sitemap提交之外,还提供了主动推送和自动推送。

    所谓的自动推送实际上就一被动技能,在每个网站上写入特定的JS代码,当有人访问网页时,JS代码就将当前未被收录的网页推送到百度服务器,完成收录,其脚本如下:

    <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>

    将这段JS代码复制到每个网页,就可以实现自动推送的功能了。

    而主动推送比较有意思,目前百度只提供了curl, php, ruby程序示例,没有Python版本。主动推送每天最多可以推送10万条url

    按照百度提供的信息,其实python版本也相对容易编写。

    首先登陆百度搜索资源平台,然后在链接提交里找到自动推送接口,如我的网站推送接口:

    接着就使用这个推送接口文件进行python程序编写,另外需要准备一个sitemap文件,网站所有的url都从sitemap中读取,当然如果有url列表也可以直接从url列表中读取。

    # base on python 3.7
    
    import requests
    import re
    import time
    
    def push_urls(urls):
    
        url = "你的百度推送接口"
        
        headers = {
            'User-Agent': 'curl/7.12.1',
            'Host': 'data.zz.baidu.com',
            'Content - Type': 'text / plain',
            'Content - Length': '83',
            'charset':'gbk',
        }
        
        try:
            response = requests.post(url, headers=headers, data=urls, timeout=5).text
            return response
        except Exception as e:
            print(e)
        
        
    def auto_push_urls():
        remain_push_count = 100000
        push_count = 0
        start_number = 608006
       
        actual_push_url = 0
       
        # open a sitemap
        try:
            with open("sitemap.xml", "r", encoding="utf-8") as f:
                source_links = f.readlines()
                
        except Exception as e:
            
            print(e)
            
        else:
            for link in source_links[start_number]:
                
                url = re.findall('<loc>(.*?)</loc>', link)
                
                if url !=[]:
                    target_url = url[0].encode("utf-8")
                    response = push_urls(target_url)
    #                 print(url[0])
                    print(f"psuh a url:{target_url}, {response}")
                    
                    push_count += 1
                    actual_push_url += 1
                    
                    if push_count > remain_push_count:
                        break
                    
        return actual_push_url
    
    if __name__ =="__main__":
        
        print("start pushing urls ...")
        
        pushed_url_number = auto_push_urls()
        
        print(f"complete pushing urls: {pushed_url_number} ...")  

    推送成功后,接口返回一个字典列表,含剩余url数目"remain":99999,推送成功数目:"success":1

    {"remain":100000,"success":0,"not_same_site":["smwap.bodamn120.com/zt/zixun/"]}

    如失败,则返回具体失败原因:

  • 相关阅读:
    easymock
    MySQL同时执行多条SQL语句解决办法
    MOP
    织梦dedecmsV5.7联动类型无法显示的处理方法
    如何查看sublime安装了哪些插件
    漏洞安全防范
    本地如何使用phpstudy环境搭建多站点
    Sublime 安装、插件CoolFormat
    CSharp设计模式读书笔记(2):工厂方法模式(学习难度:★★☆☆☆,使用频率:★★★★★)
    解决Unable to locate theme engine in module_path: "pixmap"
  • 原文地址:https://www.cnblogs.com/romanticcrystal/p/13181200.html
Copyright © 2011-2022 走看看