网页数据的解析提取
lxml库安装:
pip install lxml
若报错,可能由于镜像源问题:
python -m pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple #清华大学开源软件镜像站
使用xpath对网页进行解析实例:
#导入lxml库的etree模块 from lxml import etree 声明一段html文本 text=""" <div class="col nav-sub"> <ul id="python"> <li class="cat-item"><a href="/python3/python3-tutorial.html">Python3 教程 <i class="fa fa-external-link" aria-hidden="true"></i></a></li> <li class="cat-item"><a href="/python/python-tutorial.html">Python2 教程 <i class="fa fa-external-link" aria-hidden="true"></i></a></li> </ul> <ul id="vue"> <li class="cat-item"><a href="/vue3/vue3-tutorial.html">Vue3 教程 <i class="fa fa-external-link" aria-hidden="true"></i></a></li> <li class="cat-item"><a href="/vue/vue-tutorial.html">vue2 教程 <i class="fa fa-external-link" aria-hidden="true"></i></a> </ul> <ul id="bootstrap"> <li class="cat-item"><a href="/bootstrap/bootstrap-tutorial.html">Bootstrap3 教程 <i class="fa fa-external-link" aria-hidden="true"></i></a></li> <li class="cat-item"><a href="/bootstrap4/bootstrap4-tutorial.html">Bootstrap4 教程 <i class="fa fa-external-link" aria-hidden="true"></i></a></li> <li class="cat-item"><a href="/bootstrap5/bootstrap5-tutorial.html">Bootstrap5 教程 <i class="fa fa-external-link" aria-hidden="true"></i></a></li> <li class="cat-item"><a href="/bootstrap/bootstrap-v2-tutorial.html">Bootstrap2 教程 <i class="fa fa-external-link" aria-hidden="true"></i></a> </ul> </div> """ html=etree.HTML(text)#调用HTML类进行初始化,text中有两个li节点未修复,自动修正HTML文本 re=etree.tostring(html)#调用tostring输出修正后HTML文本 e=re.decode("utf-8")#通过decode将bytes类型转str 打印结果为txt文本 with open("exe.txt","wb") as fs: fs.write(re) print("打印txt完毕!") #打印结果为html文本 with open("exe.html","wb") as f: f.write(re) print("打印html完毕!")</code></pre> 将以上text文件存为a.html,则: from lxml import etree html=etree.parse("./a.html",etree.HTMLParser()) re=etree.tostring(html) e=re.decode("utf-8") with open("a.txt","wb") as fs: fs.write(re) print("打印txt完毕!") 结果如下: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html><body><div class="col nav-sub"> <ul id="python"> <li class="cat-item"><a href="/python3/python3-tutorial.html">Python3 教程 <i class="fa fa-external-link" aria-hidden="true"/></a></li> <li class="cat-item"><a href="/python/python-tutorial.html">Python2 教程 <i class="fa fa-external-link" aria-hidden="true"/></a></li> </ul> <ul id="vue"> <li class="cat-item"><a href="/vue3/vue3-tutorial.html">Vue3 教程 <i class="fa fa-external-link" aria-hidden="true"/></a></li> <li class="cat-item"><a href="/vue/vue-tutorial.html">vue2 教程 <i class="fa fa-external-link" aria-hidden="true"/></a></li> </ul> <ul id="bootstrap"> <li class="cat-item"><a href="/bootstrap/bootstrap-tutorial.html">Bootstrap3 教程 <i class="fa fa-external-link" aria-hidden="true"/></a></li> <li class="cat-item"><a href="/bootstrap4/bootstrap4-tutorial.html">Bootstrap4 教程 <i class="fa fa-external-link" aria-hidden="true"/></a></li> <li class="cat-item"><a href="/bootstrap5/bootstrap5-tutorial.html">Bootstrap5 教程 <i class="fa fa-external-link" aria-hidden="true"/></a></li> <li class="cat-item"><a href="/bootstrap/bootstrap-v2-tutorial.html">Bootstrap2 教程 <i class="fa fa-external-link" aria-hidden="true"/></a></li> </ul> </div></body></html> #打印结果为html文本 with open("exe.html","wb") as f: f.write(re) print("打印html完毕!")</code></pre> from lxml import etree html=etree.parse("./a.html",etree.HTMLParser()) re=etree.tostring(html) e=re.decode("utf-8") with open("a.txt","wb") as fs: fs.write(re) print("打印txt完毕!") <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html><body><div class="col nav-sub"> <ul id="python"> <li class="cat-item"><a href="/python3/python3-tutorial.html">Python3 教程 <i class="fa fa-external-link" aria-hidden="true"/></a></li> <li class="cat-item"><a href="/python/python-tutorial.html">Python2 教程 <i class="fa fa-external-link" aria-hidden="true"/></a></li> </ul> <ul id="vue"> <li class="cat-item"><a href="/vue3/vue3-tutorial.html">Vue3 教程 <i class="fa fa-external-link" aria-hidden="true"/></a></li> <li class="cat-item"><a href="/vue/vue-tutorial.html">vue2 教程 <i class="fa fa-external-link" aria-hidden="true"/></a></li> </ul> <ul id="bootstrap"> <li class="cat-item"><a href="/bootstrap/bootstrap-tutorial.html">Bootstrap3 教程 <i class="fa fa-external-link" aria-hidden="true"/></a></li> <li class="cat-item"><a href="/bootstrap4/bootstrap4-tutorial.html">Bootstrap4 教程 <i class="fa fa-external-link" aria-hidden="true"/></a></li> <li class="cat-item"><a href="/bootstrap5/bootstrap5-tutorial.html">Bootstrap5 教程 <i class="fa fa-external-link" aria-hidden="true"/></a></li> <li class="cat-item"><a href="/bootstrap/bootstrap-v2-tutorial.html">Bootstrap2 教程 <i class="fa fa-external-link" aria-hidden="true"/></a></li> </ul> </div></body></html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端