功能描述
百度站长后台的普通收录的方式有3种,分别是API提交、sitemap地址还有手动添加,其中sitemap的响应时间有时候会比较长,使用API推送是更理想的一种方式。本代码使用的前提是网站已经有支持百度sitemap格式的xml文件页面,首先使用requests.get()方法抓取文件内容,用正则提取出url并转化成字符串之后,通过requests.post()方法向推送接口发送POST请求。
百度sitemap的标准格式
百度站长后台的推送接口
代码
requests属于第三方库,没有安装的话在terminal使用pip install requests命令安装,这里不做赘述。
类构造函数中的headers的字典,在百度站长平台的后台有相关示例,不确定每个人都一样
import reimport requestsclass api_send:def __init__(self):# 此处填写要提交的sitemap的urlself.web_url = "https://yourdomain/sitemap.xml"# 此处填写百度的推送接口self.api = "http://data.zz.baidu.com/urls?site=https://yourdomain&token=yourtoken"# 此处复制百度的推送示例self.headers = {'User-Agent': 'curl/7.12.1','Host': 'data.zz.baidu.com','Content - Type': 'text / plain','Content - Length': '83'}# 这里填写正则表达式的规则,如果是其他形式的sitemap,是需要做调整的self.url_reg = re.compile("<loc>(.*)</loc>")def web_request(self):headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.42"}self.content = requests.get(url=self.web_url,headers=headers).textdef get_urls(self):li_urls = re.findall(self.url_reg, self.content)self.urls = ""for url in li_urls:self.urls += "\n"+urldef send_post(self):response = requests.post(self.api,headers = self.headers,data = self.urls,timeout = 20).textreturn responseif __name__ == '__main__':obj = api_send()obj.web_request()obj.get_urls()result = obj.send_post()print(result)
运行结果
正常情况下,代码会打印一个字典作为结果,如:{“remain”:98904,”success”:1096},这样就表示代码运行成功了
