欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

怎样用xpath去除某个不想要的元素,从而选择满意的内容

程序员文章站 2022-03-03 12:33:06
...
html=''''<div class="shici_list_main">
                <h3><a href="/chaxun/list/3075417.html" target="_blank">《长干行二首》</a></h3>
                <div class="shici_content">
                    其一<br />妾发初覆额,折花门前剧。<br />
                    <a href="javascript:void(0)" class="show_more_shici">展开全文</a>
                    <div style="display: none">
                        郎骑竹马来,绕床弄青梅。<br />同居长干里,两小无嫌猜,<br />十四为君妇,羞颜未尝开。<br />低头向暗壁,千唤不一回。<br />十五始展眉,愿同尘与灰。<br />常存抱柱信,岂上望夫台。<br />十六君远行,瞿塘滟滪堆。<br />五月不可触,猿声天上哀。<br />门前迟行迹,一一生绿苔。<br />苔深不能扫,落叶秋风早。<br />八月胡蝶来,双飞西园草。<br />感此伤妾心,坐愁红颜老。<br />早晚下三巴,预将书报家。<br />相迎不道远,直至长风沙。<br />其二<br />忆妾深闺里,烟尘不曾识。<br />嫁与长干人,沙头候风色。<br />五月南风兴,思君下巴陵。<br />八月西风起,想君发扬子。<br />去来悲如何,见少离别多。<br />湘潭几日到,妾梦越风波。<br />昨夜狂风度,吹折江头树。<br />淼淼暗无边,行人在何处。<br />好乘浮云骢,佳期兰渚东。<br />鸳鸯绿蒲上,翡翠锦屏中。<br />自怜十五余,颜色桃花红。<br />那作商人妇,愁水复愁风。<br />
                    </div>
                    <a href="javascript:void(0)" class="hide_more_shici">收起</a>
                </div>
        </div>'''

这样一行html代码,我想选择<div class="shici_content">下的诗词内容,但又想去掉a标签下的“”展开全文“”和“收起”,。如果按传统的代码拾取所有内容,代码如下:

#coding=utf-8
from lxml import etree
html=''''<div class="shici_list_main">
                <h3><a href="/chaxun/list/3075417.html" target="_blank">《长干行二首》</a></h3>
                <div class="shici_content">
                    其一<br />妾发初覆额,折花门前剧。<br />
                    <a href="javascript:void(0)" class="show_more_shici">展开全文</a>
                    <div style="display: none">
                        郎骑竹马来,绕床弄青梅。<br />同居长干里,两小无嫌猜,<br />十四为君妇,羞颜未尝开。<br />低头向暗壁,千唤不一回。<br />十五始展眉,愿同尘与灰。<br />常存抱柱信,岂上望夫台。<br />十六君远行,瞿塘滟滪堆。<br />五月不可触,猿声天上哀。<br />门前迟行迹,一一生绿苔。<br />苔深不能扫,落叶秋风早。<br />八月胡蝶来,双飞西园草。<br />感此伤妾心,坐愁红颜老。<br />早晚下三巴,预将书报家。<br />相迎不道远,直至长风沙。<br />其二<br />忆妾深闺里,烟尘不曾识。<br />嫁与长干人,沙头候风色。<br />五月南风兴,思君下巴陵。<br />八月西风起,想君发扬子。<br />去来悲如何,见少离别多。<br />湘潭几日到,妾梦越风波。<br />昨夜狂风度,吹折江头树。<br />淼淼暗无边,行人在何处。<br />好乘浮云骢,佳期兰渚东。<br />鸳鸯绿蒲上,翡翠锦屏中。<br />自怜十五余,颜色桃花红。<br />那作商人妇,愁水复愁风。<br />
                    </div>
                    <a href="javascript:void(0)" class="hide_more_shici">收起</a>
                </div>
        </div>'''
r=etree.HTML(html)
content="\n".join(r.xpath("//div[@class='shici_list_main']/div//text()")).replace("  ","")
print(content)

打印出的效果如下(混进了我们不想要的内容):

其一
妾发初覆额,折花门前剧。


展开全文



郎骑竹马来,绕床弄青梅。
同居长干里,两小无嫌猜,
十四为君妇,羞颜未尝开。
低头向暗壁,千唤不一回。
十五始展眉,愿同尘与灰。
常存抱柱信,岂上望夫台。
十六君远行,瞿塘滟滪堆。
五月不可触,猿声天上哀。
门前迟行迹,一一生绿苔。
苔深不能扫,落叶秋风早。
八月胡蝶来,双飞西园草。
感此伤妾心,坐愁红颜老。
早晚下三巴,预将书报家。
相迎不道远,直至长风沙。
其二
忆妾深闺里,烟尘不曾识。
嫁与长干人,沙头候风色。
五月南风兴,思君下巴陵。
八月西风起,想君发扬子。
去来悲如何,见少离别多。
湘潭几日到,妾梦越风波。
昨夜狂风度,吹折江头树。
淼淼暗无边,行人在何处。
好乘浮云骢,佳期兰渚东。
鸳鸯绿蒲上,翡翠锦屏中。
自怜十五余,颜色桃花红。
那作商人妇,愁水复愁风。




收起

我们可以换一种思路,分别提取,再利用字符串的拼接功能,代码如下:

#coding=utf-8
from lxml import etree
html=''''<div class="shici_list_main">
                <h3><a href="/chaxun/list/3075417.html" target="_blank">《长干行二首》</a></h3>
                <div class="shici_content">
                    其一<br />妾发初覆额,折花门前剧。<br />
                    <a href="javascript:void(0)" class="show_more_shici">展开全文</a>
                    <div style="display: none">
                        郎骑竹马来,绕床弄青梅。<br />同居长干里,两小无嫌猜,<br />十四为君妇,羞颜未尝开。<br />低头向暗壁,千唤不一回。<br />十五始展眉,愿同尘与灰。<br />常存抱柱信,岂上望夫台。<br />十六君远行,瞿塘滟滪堆。<br />五月不可触,猿声天上哀。<br />门前迟行迹,一一生绿苔。<br />苔深不能扫,落叶秋风早。<br />八月胡蝶来,双飞西园草。<br />感此伤妾心,坐愁红颜老。<br />早晚下三巴,预将书报家。<br />相迎不道远,直至长风沙。<br />其二<br />忆妾深闺里,烟尘不曾识。<br />嫁与长干人,沙头候风色。<br />五月南风兴,思君下巴陵。<br />八月西风起,想君发扬子。<br />去来悲如何,见少离别多。<br />湘潭几日到,妾梦越风波。<br />昨夜狂风度,吹折江头树。<br />淼淼暗无边,行人在何处。<br />好乘浮云骢,佳期兰渚东。<br />鸳鸯绿蒲上,翡翠锦屏中。<br />自怜十五余,颜色桃花红。<br />那作商人妇,愁水复愁风。<br />
                    </div>
                    <a href="javascript:void(0)" class="hide_more_shici">收起</a>
                </div>
        </div>'''
r=etree.HTML(html)
#分别提取两部分,再转为字符串拼接
content = "\n".join(r.xpath("//div[@class='shici_list_main']/div/text()")).replace('  ', '').rstrip() + "\n".join(r.xpath("//div[@class='shici_list_main']/div/div/text()")).replace('  ', '')
print(content)

打印出的效果如下(非常整齐):

其一
妾发初覆额,折花门前剧。
郎骑竹马来,绕床弄青梅。
同居长干里,两小无嫌猜,
十四为君妇,羞颜未尝开。
低头向暗壁,千唤不一回。
十五始展眉,愿同尘与灰。
常存抱柱信,岂上望夫台。
十六君远行,瞿塘滟滪堆。
五月不可触,猿声天上哀。
门前迟行迹,一一生绿苔。
苔深不能扫,落叶秋风早。
八月胡蝶来,双飞西园草。
感此伤妾心,坐愁红颜老。
早晚下三巴,预将书报家。
相迎不道远,直至长风沙。
其二
忆妾深闺里,烟尘不曾识。
嫁与长干人,沙头候风色。
五月南风兴,思君下巴陵。
八月西风起,想君发扬子。
去来悲如何,见少离别多。
湘潭几日到,妾梦越风波。
昨夜狂风度,吹折江头树。
淼淼暗无边,行人在何处。
好乘浮云骢,佳期兰渚东。
鸳鸯绿蒲上,翡翠锦屏中。
自怜十五余,颜色桃花红。
那作商人妇,愁水复愁风。

相关标签: 爬虫