2017-07-31 16 views
0

我從一個網站提取的信息與HTML,看起來像類型/信息:Scrapy獲取即時的下一個兄弟

<h2> <span class="mw-headline" id="Cast">Cast</span></h2> 
<ul><li> <a href="/Shota_Sometani" title="Shota Sometani">Shota Sometani</a> - Shinichi Izumi 
</li><li> <a href="/Ai_Hashimoto" title="Ai Hashimoto">Ai Hashimoto</a> - Satomi Murano 
</li><li> <a href="/Sadao_Abe" title="Sadao Abe">Sadao Abe</a> - Migi 
</li><li> <a href="/Eri_Fukatsu" title="Eri Fukatsu">Eri Fukatsu</a> - Teacher Ryoko Tamiya 
</li><li> <a href="/Masahiro_Higashide" title="Masahiro Higashide">Masahiro Higashide</a> - Hideo Shimada (mysterious transfer student) 
</li><li> <a href="/Nao_Omori" title="Nao Omori">Nao Omori</a> - Kuramori (freelance journalist) 
</li><li> <a href="/Pierre_Taki" title="Pierre Taki">Pierre Taki</a> - Miki 
</li><li> <a href="/Hirofumi_Arai" title="Hirofumi Arai">Hirofumi Arai</a> - Uragami (serial killer) 
</li><li> <a href="/Kazuki_Kitamura" title="Kazuki Kitamura">Kazuki Kitamura</a> - Takeshi Hirokawa (mysterious mayor candidate) 
</li><li> <a href="/Tadanobu_Asano" title="Tadanobu Asano">Tadanobu Asano</a> - Goto (Takeshi Hirokawa’s bodyguard) 
</li><li> <a href="/Kimiko_Yo" title="Kimiko Yo">Kimiko Yo</a> - Nobuko Izumi (Shinichi Izumi’s mother) 
</li><li> <a href="/Jun_Kunimura" title="Jun Kunimura">Jun Kunimura</a> - Detective Hirama 
</li><li> <a href="/Wataru_Ichinose_(1985)" title="Wataru Ichinose (1985)">Wataru Ichinose</a> - gang member 
</li><li> <a href="/Roy_Kishima" title="Roy Kishima">Roy Kishima</a> - Roy Kishima 
</li></ul> 

另外,在HTML也可以是這樣的:

<h2> <span class="mw-headline" id="Cast">Cast</span></h2> 
<table border="0" cellspacing="3" cellpadding="0" style="text-align:center"> 
<tr> 
<td width="100pt"> 
</td> 
<td width="100pt"> 
</td> 
<td width="100pt"> 
</td> 
<td width="100pt"> 
</td> 
<td width="100pt"> 
</td></tr> 
<tr> 
<td> <a href="/Ryosuke_Yamada" title="Ryosuke Yamada"><img alt="Assassination Classroom-Graduation-Ryosuke Yamada.jpg" src="/images/1/12/Assassination_Classroom-Graduation-Ryosuke_Yamada.jpg" width="90" height="83"/></a> 
</td> 
<td> <a href="/Masaki_Suda" title="Masaki Suda"><img alt="Assassination Classroom-Graduation-Masaki Suda.jpg" src="/images/4/45/Assassination_Classroom-Graduation-Masaki_Suda.jpg" width="90" height="90"/></a> 
</td> 
<td> <a href="/Maika_Yamamoto" title="Maika Yamamoto"><img alt="Assassination Classroom-Graduation-Maika Yamamoto.jpg" src="/images/e/e7/Assassination_Classroom-Graduation-Maika_Yamamoto.jpg" width="90" height="90"/></a> 
</td> 
<td> <a href="/Seika_Taketomi" title="Seika Taketomi"><img alt="Assassination Classroom-Graduation-Seika Taketomi.jpg" src="/images/c/ce/Assassination_Classroom-Graduation-Seika_Taketomi.jpg" width="90" height="90"/></a> 
</td> 
<td> <a href="/Mio_Yuki" title="Mio Yuki"><img alt="Assassination Classroom-Graduation-Mio Yuki.jpg" src="/images/b/b4/Assassination_Classroom-Graduation-Mio_Yuki.jpg" width="90" height="90"/></a> 
</td></tr> 
... 
</table> 

我不知道緊接在h2後面的元素類型作爲兄弟節點。 在大多數情況下,h2元素後面的元素應該是一個表格,這就是我想要檢查的內容。在這個例子中,我需要檢測h2之後的元素不是表格。爲此,我使用

response.xpath('//h2/span[@id="Cast"]/../following-sibling::table') 

抓住下表。我通常會期望一個空的列表。然而,這不起作用,因爲它確實存在一個表格,但是它有很多元素與更加完全無關的內容。

有沒有辦法獲得關於緊跟在節點後面的兄弟節點的信息?

+0

在你例如它不是一個表,而是一個無序列表。也許這就是爲什麼它不工作? – nutmeg64

+0

@ nutmeg64,澄清。對於上面的例子,我需要一種方法來檢測h2之後的元素不是表格。我用來獲取following-sibling :: table的命令會給我一個表元素列表。我考慮檢查是否爲空,以確定h2之後的元素不是表格。然而,隨着更多的表格,這是行不通的。 – wayway

+0

你有沒有試過讓'h2'的父母,從那裏得到它的所有直接的孩子,只得到第二個? (與索引[2]) – nutmeg64

回答

1

如果你想獲得緊接的下一個同級節點的類型(名稱),你可以嘗試

//h2/following-sibling::*[1]/name() 
+0

謝謝你的回答!我沒有意識到通配符可以在接下來的兄弟姐妹之後使用。 – wayway

1

只是爲了獲得一個同級它會是這樣的:

(//h2/span[@id="Cast"]/../following-sibling::table)[1] 
+0

感謝您的建議!然而,就像在上面的例子中那樣,如果h2之後沒有表格,我可能會得到一個不是h2的直接兄弟節點的表格。我需要做的是看看h2的下面的兄弟,無論它的元素類型 - ul還是table,並確定它的類型。換句話說,我不確定緊跟在h2之後的元素的類型是否爲兄弟節點。 – wayway

相關問題