刮擦基于特定字符串[python selenium]

时间:2017-04-11 09:05:51

标签: python selenium web-scraping

我在python中使用selenium来抓一个网站。大多数页面运行良好,但我无法捕捉到一个例外。 html:

<div class="parablock">
  <p>De Hoge Raad acht geen termen aanwezig voor een veroordeling in de proceskosten.<span class="linebreak1"> </span></p>

  <p>
    <span class="emphasis" style="font-weight:bold;">4 Beslissing</span>    </p>
  <p>De Hoge Raad verklaart het beroep in cassatie ongegrond.</p>
</div>

我所追求的是最后一段文字:“De Hoge Raad verklaart het beroro in cassatie ongegrond。” 问题是,有几个div与类parablock。还有多个跨度与类强调。

只有一个是“Beslissing”。但是,这不是一个类或任何东西。有没有一种简单的方法来刮取匹配字符串“Beslissing”的所需文本?

或者我是否必须将整个页面变成汤,将事物变成字符串并使用正则表达式将所有内容转换为“Beslissing”之后的文本?

2 个答案:

答案 0 :(得分:1)

尝试使用find_by_xpath('//p[span[contains(text(),"Beslissing")]]/following-sibling::p')

查找包含<p>包含文字<p>的{​​{1}}兄弟<span>元素

答案 1 :(得分:1)

我认为您可以使用regex selector from scrapy

或者您可以选择所有.parablock并制作自己的逻辑,例如:

for el in response.css('.parablock'):
    if el.css('.emphasis::text').extract()[0] == '4 Beslissing': # you might want a more bosut comparison here
        my_value = el.css('p::text').extract()[-1]
        break

这只是一个例子,但如果re选择器没有削减它,我会选择类似的东西。