<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近有個小專案,需要爬取頁面上相應的資源資料後,儲存到本地,然後將原始的HTML原始檔儲存下來,對HTML頁面的內容進行修改將某些標籤整個給替換掉。
對於這類需要對HTML進行操作的需求,最方便的莫過於 BeautifulSoup4 的庫了。
樣例的HTML程式碼如下:
<html> <body> <a class="videoslide" href="https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202205/1381824922cj2dsv3zv3a.JPG" rel="external nofollow" rel="external nofollow" > <img src="https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202205/1381824922_zy_compress3mqjst0oef0.JPG" data-zy-media-id="zy_location_201310151613422786"/> </a> <a href="https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202205/第一張_1381824798dkiytf5rwvm.JPG" rel="external nofollow" rel="external nofollow" > <img data-zy-media-id="zy_image_201310151613169945" src="https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202205/第一張_1381824798_zy_compresswtgrmnmp154.JPG"/></a> <a href="https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202205/第二張_1381824796sl0ihsmeing.jpg" rel="external nofollow" rel="external nofollow" > <img data-zy-media-id="zy_image_201310151613163009" src="https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202205/第二張_1381824796_zy_compressygyaowigzr2.jpg"/> </a> <a href="https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202205/第三張kdllz40lz1j.jpg" rel="external nofollow" rel="external nofollow" > <img data-zy-media-id="zy_image_201312311838584446" src="https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202205/第ä¸å¼µ_zy_compressljqije2hldv.jpg"/> </a> </body> </html>
這裡主要包括了 <a >
標籤, <a >
標籤裡面嵌入了 <img >
標籤,其中有 <a class="videoslide">
的標識該標籤實際是可以播放動畫的。需要根據 class="videoslide"
來判斷將整個 <a >
標籤換成播放器的 <video >
標籤,將沒有 class="videoslide"
的 <a >
標籤換成 <figure>
標籤。
也就是將帶有的 <a class="videoslide" ...><img ... /></a>
標籤換成
<div class="video"> <video controls width="100%" poster="視訊連結的圖片地址.jpg"> <source src="視訊檔的靜態地址.mp4" type="video/mp4" /> 您的瀏覽器不支援H5視訊,請使用Chrome/Firefox/Edge瀏覽器。 </video> </div>
將 <a ....><img .../></a>
標籤換成
<figure> < img src="圖片地址_compressed.jpg" data-zy-media-id="圖片地址.jpg"> <figcaption>文字說明(如果有)</figcaption> </figure>
這裡通過BeautifulSoup4 的select()方法找到標籤,通過get()方法獲取標籤及標籤屬性值,通過replaceWith來替換標籤,具體程式碼如下:
首先安裝BeautifulSoup4的庫,BeautifulSoup4庫依賴於lxml庫,所以也需要安裝lxml庫。
pip install bs4 pip install lxml
具體程式碼實現如下:
import os from bs4 import BeautifulSoup htmlstr='<html><body>' '<a class="videoslide" href="https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202205/1381824922cj2dsv3zv3a.JPG" rel="external nofollow" rel="external nofollow" >' '<img src="https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202205/1381824922_zy_compress3mqjst0oef0.JPG" data-zy-media-id="zy_location_201310151613422786"/></a>' '<a href="https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202205/第一張_1381824798dkiytf5rwvm.JPG" rel="external nofollow" rel="external nofollow" >' '<img data-zy-media-id="zy_image_201310151613169945" src="https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202205/第一張_1381824798_zy_compresswtgrmnmp154.JPG"/></a>' '<a href="https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202205/第二張_1381824796sl0ihsmeing.jpg" rel="external nofollow" rel="external nofollow" >' '<img data-zy-media-id="zy_image_201310151613163009" src="https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202205/第二張_1381824796_zy_compressygyaowigzr2.jpg"/></a>' '<a href="https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202205/第三張kdllz40lz1j.jpg" rel="external nofollow" rel="external nofollow" >' '<img data-zy-media-id="zy_image_201312311838584446" src="https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202205/第ä¸å¼µ_zy_compressljqije2hldv.jpg"/></a>' '</body></html>' def procHtml(htmlstr): soup = BeautifulSoup(htmlstr, 'lxml') a_tags=soup.select('a') for a_tag in a_tags: a_tag_src = a_tag.get('href') a_tag_filename = os.path.basename(a_tag_src) a_tag_path = os.path.join('src', a_tag_filename) a_tag['href']=a_tag_path next_tag=a_tag.next #判斷是視訊還是圖片,如果a標籤帶了class="videoslide" 是視訊否則是圖片 if a_tag.get('class') and 'videoslide'==a_tag.get('class')[0]: # 處理視訊檔 media_id = next_tag.get('data-zy-media-id') if media_id: media_url = 'http://www.test.com/travel/show_media/' + str(media_id)+'.mp4' media_filename = os.path.basename(media_url) media_path = os.path.join('src', media_filename) # 將div.video標籤替換a標籤 video_html = '<div class="video"><video controls width = "100%" poster = "' + a_tag_path + '" ><source src = "' + media_path + '" type = "video/mp4" /> 您的瀏覽器不支援H5視訊,請使用Chrome / Firefox / Edge瀏覽器。 </video></div>' video_soup = BeautifulSoup(video_html, 'lxml') a_tag.replaceWith(video_soup.div) else: #獲取圖片資訊 if 'img'==next_tag.name: img_src=next_tag.get('src') # 判斷是否路徑是否為本地資源 data:image和file: if img_src.find('data:image') == -1 and img_src.find('file:') == -1: img_filename = os.path.basename(img_src) img_path = os.path.join('src', img_filename) # 將<figure><img>標籤替換a標籤 figcaption='' figure_html='<figure><img src="'+img_path+'" data-zy-media-id="'+a_tag_path+'"><figcaption>'+figcaption+'</figcaption></figure>' figure_soup = BeautifulSoup(figure_html, 'lxml') a_tag.replaceWith(figure_soup.figure) html_content = soup.contents[0] return html_content if __name__ == '__main__': pro_html_str=procHtml(htmlstr) print(pro_html_str)
結果:
<html> <body> <div class="video"> <video controls="" poster="src1381824922.JPG" width="100%"> <source src="srczy_location_201310151613422786.mp4" type="video/mp4"/> 您的瀏覽器不支援H5視訊,請使用Chrome / Firefox / Edge瀏覽器。 </video> </div> <figure> <img data-zy-media-id="src第一張_1381824798.JPG" src="src第一張_1381824798_zy_compress.JPG"/> <figcaption></figcaption> </figure> <figure> <img data-zy-media-id="src第二張_1381824796.jpg" src="src第二張_1381824796_zy_compress.jpg"/> <figcaption></figcaption></figure> <figure> <img data-zy-media-id="src第三張.jpg" src="src第三張_zy_compress.jpg"/> <figcaption></figcaption> </figure> </body> </html>
總結
到此這篇關於Python使用BeautifulSoup4修改網頁內容的文章就介紹到這了,更多相關Python BeautifulSoup4修改網頁內容內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45