2015-11-23 49 views
1

我想添加內部鏈接到某些關鍵字,如鏈接所有字index到我的網站的主頁。將鏈接添加到特定關鍵字

我打算使用BeautifulSoup4,但我不知道如何將標籤添加到元素中的某個單詞。

這就是我想要的。

<div>You can find the content from the index page</div> 

<div>You can find the content from the <a href='index.html'>index</a> page</div> 

具有挑戰性的部分在這裏簡單replace可能不能很好的工作在這裏,因爲如果這個詞是什麼index已經是一個鏈接?那麼它將被完全screwd成類似

<div>You can find the content from the <a href='index.html'><a href="index.html">index</a></a></div> 

我喜歡這種在Beautifulsoup實現與邏輯包括:如果單詞已經是一個內部鏈接或不

  • 如何

    1. 檢查提取該特定字詞並添加鏈接。

    謝謝!

  • 回答

    0

    下面我瀏覽所有div標籤,看看是否有alread是index.html的鏈接,如果沒有我檢查單詞「index」是否在它們中。如果是,我創建一個新的div,添加文本的第一部分,使用index.html鏈接添加一個新的a標記,然後添加其餘的文本,否則它只是通過。

    soup = BeautifulSoup("<div>You can find content from the current index page.</div><div>You can find content from the <a href='index.html'>index</a> page.</div><div>Just random text</div>") 
    print(soup) 
    div_data = soup.find_all("div") 
    newsoup = BeautifulSoup("<h1></h1>") 
    i = 1 
    for item in div_data: 
        if item.find("a", {"href":"index.html"}): 
         newitem = item 
        elif item.text.find("index") > -1: 
         newitem = newsoup.new_tag("div") 
         indexItem = newsoup.new_tag("a", href="index.html") 
         indexItem.string="index" 
         newitem.string = item.text.split("index")[0] 
         newitem.insert(1,indexItem) 
         newitem.insert(2,item.text.split("index")[1]) 
        else: 
         newitem = item 
        newsoup.body.insert(i,newitem) 
        i += 1 
    
    print(newsoup) 
    

    輸出是:

    <html><body><div>You can find content from the current index page.</div> 
    <div>You can find content from the <a href="index.html">index</a> page.</div> 
    <div>Just random text</div></body></html> 
    
    <html><body><h1></h1><div>You can find content from the current <a href="index.html">index</a> page.</div> 
    <div>You can find content from the <a href="index.html">index</a> page.</div> 
    <div>Just random text</div></body></html> 
    

    您可以通過檢查imporve它是否有字的多個occurances「指數」,但是這將讓你開始。