功能描述

百度站长后台的普通收录的方式有3种,分别是API提交、sitemap地址还有手动添加,其中sitemap的响应时间有时候会比较长,使用API推送是更理想的一种方式。本代码使用的前提是网站已经有支持百度sitemap格式的xml文件页面,首先使用requests.get()方法抓取文件内容,用正则提取出url并转化成字符串之后,通过requests.post()方法向推送接口发送POST请求。
百度sitemap的标准格式
image.png
百度站长后台的推送接口
image.png

代码

requests属于第三方库,没有安装的话在terminal使用pip install requests命令安装,这里不做赘述。
类构造函数中的headers的字典,在百度站长平台的后台有相关示例,不确定每个人都一样
image.png

  1. import re
  2. import requests
  3. class api_send:
  4. def __init__(self):
  5. # 此处填写要提交的sitemap的url
  6. self.web_url = "https://yourdomain/sitemap.xml"
  7. # 此处填写百度的推送接口
  8. self.api = "http://data.zz.baidu.com/urls?site=https://yourdomain&token=yourtoken"
  9. # 此处复制百度的推送示例
  10. self.headers = {
  11. 'User-Agent': 'curl/7.12.1',
  12. 'Host': 'data.zz.baidu.com',
  13. 'Content - Type': 'text / plain',
  14. 'Content - Length': '83'
  15. }
  16. # 这里填写正则表达式的规则,如果是其他形式的sitemap,是需要做调整的
  17. self.url_reg = re.compile("<loc>(.*)</loc>")
  18. def web_request(self):
  19. headers = {
  20. "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"
  21. }
  22. self.content = requests.get(url=self.web_url,headers=headers).text
  23. def get_urls(self):
  24. li_urls = re.findall(self.url_reg, self.content)
  25. self.urls = ""
  26. for url in li_urls:
  27. self.urls += "\n"+url
  28. def send_post(self):
  29. response = requests.post(
  30. self.api,
  31. headers = self.headers,
  32. data = self.urls,
  33. timeout = 20
  34. ).text
  35. return response
  36. if __name__ == '__main__':
  37. obj = api_send()
  38. obj.web_request()
  39. obj.get_urls()
  40. result = obj.send_post()
  41. print(result)

运行结果

正常情况下,代码会打印一个字典作为结果,如:{“remain”:98904,”success”:1096},这样就表示代码运行成功了