发布时间:2023-06-16 15:30
最近有个小项目,需要爬取页面上相应的资源数据后,保存到本地,然后将原始的HTML源文件保存下来,对HTML页面的内容进行修改将某些标签整个给替换掉。
对于这类需要对HTML进行操作的需求,最方便的莫过于 BeautifulSoup4 的库了。
样例的HTML代码如下:
这里主要包括了 标签,
标签里面嵌入了
标签,其中有
的标识该标签实际是可以播放动画的。需要根据
class=\"videoslide\"
来判断将整个 标签换成播放器的
标签,将没有
class=\"videoslide\"
的 标签换成
标签。
这里通过BeautifulSoup4 的select()方法找到标签,通过get()方法获取标签及标签属性值,通过replaceWith来替换标签,具体代码如下:
首先安装BeautifulSoup4的库,BeautifulSoup4库依赖于lxml库,所以也需要安装lxml库。
pip install bs4 pip install lxml
具体代码实现如下:
import os from bs4 import BeautifulSoup htmlstr=\'\' \\ \'\' \\ \'\' \\ \'\' \\ \'\' \\ \'\' \\ \'\' \\ \'\' \\ \'\' \\ \'\' 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 = \'\' 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) # 将
结果:
总结
到此这篇关于Python使用BeautifulSoup4修改网页内容的文章就介绍到这了,更多相关Python BeautifulSoup4修改网页内容内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
Pytorch笔记:诡异的索引操作 + too many indices for tensor of dimension 1的一种解决方法
[Hacker News 周报] 浏览器中运行 Python;JSON 可视化神器;避免电脑休眠的网页
【Kubernetes 系列】K8S 进阶 容器和 Pod 分配内存资源
2022超级好用的接口自动化测试框架:基于python+requests+pytest+allure实现
ant design pro项目安装以及坑点和大部分可能出现问题总结
【SSM】Mybatis系列——mybatis的简介、环境搭建、CRUD操作
深度学习中模型计算量(FLOPs)和参数量(Params)的理解以及四种计算方法总结