前言
其實(shí)Beautiful Soup 模塊除了能夠搜索和導(dǎo)航之外,還能夠修改 HTML/XML 文檔的內(nèi)容。這就意味著能夠添加或刪除標(biāo)簽、修改標(biāo)簽名稱、改變標(biāo)簽屬性值和修改文本內(nèi)容等等。這篇文章非常詳細(xì)的給大家介紹了Python利用Beautiful Soup模塊修改內(nèi)容的方法,下面話不多說,來看看詳細(xì)的介紹吧。
修改標(biāo)簽
使用的示例 HTML 文檔還是如下:
html_markup=""" <div class="ecopyramid"> <ul id="producers"> <li class="producerlist"> <div class="name">plants</div> <div class="number">100000</div> </li> <li class="producerlist"> <div class="name">algae</div> <div class="number">100000</div> </li> </ul> </div> """
修改標(biāo)簽名稱
soup = BeautifulSoup(html_markup,'lxml')producer_entries = soup.ulprint producer_entries.nameproducer_entries.name = "div"print producer_entries.prettify()
修改標(biāo)簽屬性值
# 修改標(biāo)簽屬性# 更新標(biāo)簽現(xiàn)有的屬性值producer_entries['id'] = "producers_new_value"print producer_entries.prettify()# 標(biāo)簽添加新的屬性值producer_entries['class'] = "newclass"print producer_entries.prettify()# 刪除標(biāo)簽屬性值del producer_entries['class']print producer_entries.prettify()
添加新的標(biāo)簽
我們可以使用 new_tag 方法來生成一個(gè)新的標(biāo)簽,然后使用 append() 、insert() 、insert_after() 、insert_before()方法來將標(biāo)簽添加到 HTML 樹中。
例如在上述的 HTML 文檔的 ul 標(biāo)簽中添加一個(gè) li 標(biāo)簽 。首先要生成新的 li 標(biāo)簽,然后將其插入到 HTML 樹結(jié)構(gòu)中 。并在 li 標(biāo)簽中插入相應(yīng)的 div 標(biāo)簽。
# 添加新的標(biāo)簽# new_tag 生成一個(gè) tag 對(duì)象new_li_tag = soup.new_tag("li")# 標(biāo)簽對(duì)象添加屬性的方法new_atag = soup.new_tag("a",href="www.example.com" rel="external nofollow" )new_li_tag.attrs = {'class':'producerlist'}soup = BeautifulSoup(html_markup,'lxml')producer_entries = soup.ul# 使用 append() 方法添加到末尾producer_entries.append(new_li_tag)print producer_entries.prettify()# 生成兩個(gè) div 標(biāo)簽,將其插入到 li 標(biāo)簽中new_div_name_tag = soup.new_tag("div")new_div_name_tag['class'] = "name"new_div_number_tag = soup.new_tag("div")new_div_number_tag["class"] = "number"# 使用 insert() 方法指定位置插入new_li_tag.insert(0,new_div_name_tag)new_li_tag.insert(1,new_div_number_tag)print new_li_tag.prettify()修改字符串內(nèi)容
修改字符串內(nèi)容可以使用 new_string() 、append() 、insert() 方法。
# 修改字符串內(nèi)容# 使用 .string 屬性修改字符串內(nèi)容new_div_name_tag.string = 'new_div_name'# 使用 .append() 方法添加字符串內(nèi)容new_div_name_tag.append("producer")# 使用 soup 對(duì)象的 new_string() 方法生成字符串new_string_toappend = soup.new_string("producer")new_div_name_tag.append(new_string_toappend)# 使用insert() 方法插入new_string_toinsert = soup.new_string("10000")new_div_number_tag.insert(0,new_string_toinsert)print producer_entries.prettify()刪除標(biāo)簽節(jié)點(diǎn)
Beautiful Soup 模塊提供了 decompose() 和 extract() 方法來刪除節(jié)點(diǎn)。
decompose() 方法刪除節(jié)點(diǎn),不僅會(huì)刪除當(dāng)前節(jié)點(diǎn),還會(huì)把其子節(jié)點(diǎn)一塊刪除了。
extract() 方法用來從 HTML 樹中刪除節(jié)點(diǎn)或者字符串內(nèi)容。
# 刪除節(jié)點(diǎn)third_producer = soup.find_all("li")[2]# 使用 decompose() 方法刪除 div 節(jié)點(diǎn)div_name = third_producer.divdiv_name.decompose()print third_producer.prettify()# 使用 extract() 方法刪除節(jié)點(diǎn)third_producer_removed = third_producer.extract()print soup.prettify()刪除標(biāo)簽內(nèi)容
標(biāo)簽可能有 NavigableString 對(duì)象或者 Tag 對(duì)象作為它的子節(jié)點(diǎn),移除所有的這些子節(jié)點(diǎn)可以使用 clear() 方法。這將會(huì)移除標(biāo)簽的所有的 .content。
修改內(nèi)容的其他方法
除了上面說到的方法,還有其他方法用來修改內(nèi)容。
insert_after() 和 insert_before() 方法
上面的兩個(gè)方法能夠在標(biāo)簽或者字符串的前面或者后面插入一個(gè)標(biāo)簽或者字符串。方法只能接收一個(gè)參數(shù),要么是 NavigableString 對(duì)象要么是 Tag 對(duì)象。
replace_with() 方法
該方法是用一個(gè)新的標(biāo)簽或字符串內(nèi)容替代原來的標(biāo)簽或者字符串,能夠接收一個(gè)標(biāo)簽或者字符串作為輸入。
wrap() 和 unwrap() 方法
wrap() 方法是用另一個(gè)標(biāo)簽來包裹一個(gè)標(biāo)簽或者字符串。
unwrap() 方法則和 wrap() 方法相反。
# wrap()方法li_tags = soup.find_all('li')for li in li_tags: new_div_tag = soup.new_tag('div') li.wrap(new_div_tag)print soup.prettify()# unwrap()方法li_tags = soup.find_all("li")for li in li_tags: li.div.unwrap()print soup.prettify()總結(jié)
以上就是關(guān)于Python使用Beautiful Soup 模塊修改內(nèi)容的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用python能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)武林網(wǎng)的支持。
新聞熱點(diǎn)
疑難解答
圖片精選