2017-08-31 43 views
1

我想获得“tracked_by”id到“buzz_off”id之间的电影名称。我已经创建了一个可以在“tracked_by”id之后抓取名字的选择器。但是,我的意图是让脚本进行解析,直到找到“buzz_off”标识。元件在其内的名称是:任何与CSS选择器中的“until”相似的东西?

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 

顺便说一句,我想解析名称使用这个选择器不风格。

+0

[无法使用选择器。](https://stackoverflow.com/questions/13330757/how-can-i-target-a-specific-group-of-siblings-in-a-flat-hierarchy/13330785#13330785)你需要额外的代码。 – BoltClock

回答

0

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

+1

感谢您的回答,Treehee。如果是这种情况,那么我不需要借用python的任何逻辑来处理它;相反,我会很容易地使用这个表达式“//div[./preceding-sibling::h4[1]='Tracking by'] // text()”来使用xpath,它能够很好地满足目的。因为在大多数情况下我更喜欢css选择器,所以我想从中学习它的限制。谢谢。 – SIM

相关问题