記一次百度主動推送(利用Python的Xpath爬蟲)

前言:

每個網站站長都有一顆想出名的心,我也不例外,今天我將自己網站 is-hash.com 的幾個網頁全部主動推送給了度娘(curl推送),一路上用到一些技巧,在這裏做個記錄。

 

 

 


推送過程

 

其實百度curl推送並不是個難事,就是將要提交的鏈接按照每行一條的格式寫入一個文本文件中,命名此文件爲urls.txt,然後進入該文件所在目錄,執行如下命令:

curl -H 'Content-Type:text/plain' --data-binary @urls.txt "http://data.zz.baidu.com………………"

就推送了,很簡單的一件事情,但是對於我卻不容易,因爲我已經寫了一百左右篇文章了,我想要全部推送,那將一百多個鏈接寫到txt文件中不免有些繁瑣,於是我就使用python結合Xpath模塊寫了一個爬蟲程序,將我的網站的主頁的幾個鏈接全部爬取並且保存。

 

python代碼奉上

import requests
import parsel

#返回頁面的全部代碼
def get_http(myurl):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
    }
    response=requests.get(myurl,headers=headers)
    data=response.text
    data.encode("UTF-8")
    return data

#通過xpath得到需要的url
def get_url(data):
    #存儲數據的列表
    dataList=[]
    urldata=parsel.Selector(data)
    #模糊匹配
    XpathSelect='//*[contains(@id,"post")]/header/h2'
    parse_list=urldata.xpath(XpathSelect)
    for h in parse_list:
        url=h.xpath("./a/@href").extract_first()
        dataList.append(url)
    return dataList

def download(list):
    with open('urls.txt','w') as f:
        for url in list:
            f.write(str(url)+"\n")


#當前文件爲啓動文件
if __name__=="__main__":
    #這個列表將會收集全部的網頁鏈接
    allUrl=[]
    for page in range(1,12):
        # 用{}預留一個接口,通過.format將頁數進行傳遞
        base_url = "https://www.is-hash.com/page/{}/".format(page)
        #得到這一網頁的源代碼
        http=get_http(base_url)
        #得到源代碼中的url
        urls=get_url(http)
        for url in urls:
            allUrl.append(str(url))
        #加個提示給控制檯
        print("已經爬取完第"+str(page)+"頁")
    #下載鏈接
    download(allUrl)

上面有些地方對我比較陌生,記錄一下

  • Xpath語法中的contains方法是一個模糊匹配的方法:匹配一個屬性值中包含的字符串
  • extract_first():這個方法返回的是一個string字符串,是list數組裏面的第一個字符串。
  • 我的網站目前共有11頁,url的變化規律是/page/1-11,所以外面用了個大循環。

經過一番猛幹,終於拿到結果

興奮的我趕緊將txt文件傳到服務器上,遠程執行了命令,結果返回了一個這:

{
   "remain":10000,
   "success":0,
   "not_same_site":[ ……一堆url……  ],
   "not_valid":[]
}

按照百度的說法就是:還可以提交10000個,提交成功0個,“一堆url”不是本站url而未處理。

 

 

???

 

我有點懵,經過一番搜索終於知道,原來是因爲url中的域名還要寫上www(看看百度給你的接口是不是也有www,那你應該也要寫了)。

 

一行一行手寫嗎?

如果你有VSCode,那麼就可以利用vsCode的“可視區塊操作”(我起的名,因爲這個類似vim的可視區塊),找到關鍵字,按下Ctrl+D,多行統一操作:

只能用 爽 來形容。

 

修改好文件之後再上傳,應該就不會有問題了。

 


留個言點個贊吧!

 

 

 

歡迎訪問我的網站:is-hash.com

商業轉載 請聯繫作者獲得授權,非商業轉載 請標明出處,謝謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章