banner
肥皂的小屋

肥皂的小屋

github
steam
bilibili
douban
tg_channel

Python--百度站長平台主動推送

起因#

這是一篇網站折騰介紹

soapffz已經寫了40+文章了:

image

經常和別人介紹自己的網站,別人總是會問 “訪問量有多少?”

soapffz只能回答:“由於沒向百度推送,所以百度搜不到”

於是,這篇文章將捋一捋為什麼沒向百度推送以及解決方案

分為兩個部分,sitemap生成和向百度推送

sitemap 生成#

前期挖的坑#

剛建設完網站時,在每篇文章寫完之後鏈接中會存在一個index.php

為了把這個index.php去掉,變成這些鏈接:

https://soapffz.com/sec/247.html
https://soapffz.com/python/245.html
https://soapffz.com/tools/239.html
https://soapffz.com/sec/233.html

我在後台做了如下操作:

image

這也導致我使用一些sitemap自動生成插件的時候,會變成這樣:

image

折騰#

這其中除了sitemap生成插件我也使用過在線網站,比如這個

image

可以看到花了八分半,爬了 124 條鏈接,點擊View Sitemap Details查看詳情

點擊Other Downloads處所示按鈕下載所有格式的文件:

image

可以看到爬取的鏈接都是正常的,但是問題也來了,

這樣生成sitemap也太費勁了吧,後面也嘗試過使用Python去爬取網站所有 url

但是想想實在沒必要,就一個url格式問題而已

最終解決方案#

於是最終決定放棄在url中包含目錄字段:

image

然後使用前面介紹的八雲醬的插件即可生成sitemap

image

然後嘗試向百度提交:

image

可以看到鏈接提交成功了

向百度主動推送#

sitemap處理完了還不夠,我們可以使用主動推送和sitemap結合起來使得百度收錄更快

百度的主動推送方式:

image

大概就是意思就是把url.txt帶上自己的token傳輸給百度資源平台

我用Python參考網上的文章寫了一個腳本

邏輯就是解析網站當前的sitemap.xml然後獲取urls帶上自己的token和網站名稱

使用request庫的post方式提交一下然後查看返回狀態即可

全碼如下:

# -*- coding: utf-8 -*-
'''
@author: soapffz
@fucntion: 從網站的sitemap.xml抓取url並向百度站長平台主動推送
@time: 2019-07-25
'''

import requests
import xmltodict


class BaiduLinkSubmit(object):
    def __init__(self, site_domain, sitemap_url, baidu_token):
        self.site_domain = site_domain
        self.sitemap_url = sitemap_url
        self.baidu_token = baidu_token
        self.urls_l = []  # 存儲需要爬取的url
        self.parse_sitemap()

    def parse_sitemap(self):
        # 解析網站的sitemap.xml獲取所有urls
        try:
            data = xmltodict.parse(requests.get(self.sitemap_url).text)
            self.urls_l = [t["loc"] for t in data["urlset"]["url"]]
        except Exception as e:
            print("爬取sitemap.xml報錯:", e)
            return
        self.push()

    def push(self):
        url = "http://data.zz.baidu.com/urls?site={}&token={}".format(
            self.site_domain, self.baidu_token)
        headers = {"Content-Type": "text/plain"}
        r = requests.post(url, headers=headers, data="\n".join(self.urls_l))
        data = r.json()
        print("成功推送{}條url到百度搜索資源平台".format(data.get("success", 0)))
        print("今天還剩余的可推送條數:", data.get('remain', 0))
        not_same_site = data.get('not_same_site', [])
        not_valid = data.get("no_valid", [])
        if len(not_same_site) > 0:
            print("由於不是本站url而未處理的url有{}條:".format(len(not_same_site)))
            for t in not_same_site:
                print(t)
        if len(not_valid) > 0:
            print("不合法的url有{}條:".format(len(not_valid)))
            for t in not_valid:
                print(t)


if __name__ == "__main__":
    site_domain = "https://soapffz.com"  # 在這裡填寫你的网站
    sitemap_url = "https://soapffz.com/sitemap.xml"  # 在這裡填寫你的 sitemap.xml 完整鏈接
    baidu_token = ""  # 填寫你的百度token
    BaiduLinkSubmit(site_domain, sitemap_url, baidu_token)

我這裡測試了三次,分別對應正常情況、我關掉sitemap插件和我亂寫sitemap的情況

效果如下:

image

MIP&AMP 網頁加速#

百度站長平台是這麼介紹的:

  1. MIP (Mobile Instant Page - 移動網頁加速器),是一套應用於移動網頁的開放性技術標準。通過提供 MIP-HTML 規範、MIP-JS 運行環境以及 MIP-Cache 頁面緩存系統,實現移動網頁加速。
  2. AMP(Accelerated Mobile Pages)是谷歌的一項開放源代碼計劃,可在移動設備上快速加載的輕便型網頁,旨在使網頁在移動設備上快速加載並且看起來非常美觀。百度目前可支持 AMP 提交。

反正就是針對移動端的加速,肯定對SEO有好處

這裡使用的插件是Holmesian大佬的工具Typecho-AMP

插件後台界面如圖所示:

image

可以看到還支持百家號,但是我這裡不需要 @(滑稽),所以只要設置接口就可以了,

然後在控制台的下拉菜單中可以看到有個推送AMP/MIP到百度按鈕:

image

點進去如圖所示:

image

嘗試推送一下:

image

發現推送不了,折騰了一會主機也沒弄好,看了下主動推送規則發現非常有趣

和基礎鏈接提交就在鏈接後面加了個mip/amp,返回的參數變為success_mip/success_amp

所以把上面的代碼改一下,就把推送url和推送給mip/amp的代碼放在一起同時推送:

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。