首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Parsel选择器提取类名的内容时绕过em标记

使用Parsel选择器提取类名的内容时绕过em标记
EN

Stack Overflow用户
提问于 2019-03-25 17:10:36
回答 1查看 272关注 0票数 2

我正在尝试提取类名的内容。如何提取所有内容,包括'em‘标记内和'em’标记之后的内容?如下图所示:

我尝试了以下方法,结果如下:

试验1:

代码语言:javascript
复制
driver = webdriver.Chrome(options=options)
sel = Selector(text = driver.page_source)
sel.xpath("//*[@class ='st']").extract()

输出1:

代码语言:javascript
复制
>> <span class="st"><span class="f">Nov 26, 2018 - </span>First #<em>GDPR fine</em> awarded in Germany. 330,000 user data stolen. Usernames and passwords stored in plaintext. €20,000 <em>fine</em>. Why "so low"?</span>

试验2:

代码语言:javascript
复制
driver = webdriver.Chrome(options=options)
sel = Selector(text = driver.page_source)
sel.xpath("//*[@class ='st']/text()").extract()

输出2:

代码语言:javascript
复制
>> First #

理想情况下,我希望得到的输出是:

代码语言:javascript
复制
>> Nov 26, 2018 - First #GDPR fine awarded in Germany. 330,000 user data stolen. Usernames and passwords stored in plaintext. €20,000 fine. Why "so low"?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-26 20:31:09

我最终找到了一个解决问题的方法,尽管不是一个优雅的方法,但我仍然欢迎一个更优雅的解决方案。

我使用以下命令引入类名的内容:

代码语言:javascript
复制
 driver = webdriver.Chrome(options=options)
 sel = Selector(text = driver.page_source)
 content = sel.xpath("//*[@class ='st']").extract()

然后我定义了一个函数,将html从文本中剥离出来:

代码语言:javascript
复制
import html.parser

class HTMLTextExtractor(html.parser.HTMLParser):
    def __init__(self):
        super(HTMLTextExtractor, self).__init__()
        self.result = [ ]

    def handle_data(self, d):
       self.result.append(d)

    def get_text(self):
       return ''.join(self.result)

    def html_to_text(html):
        s = HTMLTextExtractor()
        s.feed(html)
        return s.get_text()

遍历列表中的内容,一次剥离一个html,得到我想要的结果:

代码语言:javascript
复制
  m = []
  for w in content:
      z = html_to_text(w)
      m.append(z)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55334425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档