【问题标题】:Anything similar to "until" in CSS selector?CSS选择器中有什么类似于“直到”的东西吗?
【发布时间】:2018-02-09 07:40:10
【问题描述】:

我想获得介于“tracked_by”id 到“buzz_off”id 之间的电影名称。我已经创建了一个选择器,它可以在“tracked_by”id 之后获取名称。但是,我的意图是让脚本进行解析,直到找到“buzz_off”id。名称所在的元素:

html = '''
<div class="list">
  <a id="allow" name="allow"></a>
 <h4 class="cluster">Allow</h4>
 <div class="base min"><a href="...">Sally</a></div> 
 <div class="base max"><a href="..">Blood Diamond</a></div>
  <a id="tracked_by" name="tracked_by"></a>
 <h4 class="cluster">Tracked by</h4>
 <div class="base min"><a href="..">Gladiator</a></div>
 <div class="base max"><a href="..">Troy</a></div>
   <a id="buzz_off" name="buzz_off"></a>
 <h4 class="cluster">Buzz-off</h4>
 <div class="base min"><a href="..">Heat</a></div>
 <div class="base max"><a href="..">Matrix</a></div>
</div>
'''

from lxml import html as htm
root = htm.fromstring(html)
for item in root.cssselect("a#tracked_by ~ div.base a"):
    print(item.text)

我尝试过的选择器(在上面的脚本中也提到过):

a#tracked_by ~ div.base a

我得到的结果:

Gladiator
Troy
Heat
Matrix

我想得到的结果:

Gladiator
Troy

顺便说一句,我想使用此选择器解析名称而不是样式。

【问题讨论】:

标签: python web-scraping css-selectors lxml


【解决方案1】:

this 是 CSS 选择器的参考。如您所见,它没有任何形式的逻辑,因为它不是一种编程语言。您必须在 python 中使用 while not 循环并一次处理每个元素,或者将它们附加到列表中。

【讨论】:

  • 感谢您的回答,Treehee。如果是这种情况,那么我认为没有必要从 python 中借用任何逻辑来处理它;相反,我会很容易地使用这个表达式“//div[./preceding-sibling::h4[1]='Tracked by']//text()”来使用xpath,它能够很好地达到目的。由于我在大多数情况下更喜欢 css 选择器,同时从网络上抓取数据,我也想了解它的局限性。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-20
  • 2018-11-22
  • 2015-03-04
  • 1970-01-01
相关资源
最近更新 更多