[問題] 爬蟲表格的問題

看板Python作者 (沉睡的毛利小五郎)時間8年前 (2017/08/05 02:37), 編輯推噓1(1013)
留言14則, 4人參與, 最新討論串1/2 (看更多)
各位前輩好 小弟最近試著爬一些設備端的網頁,想取得設備目前運作狀態 (snmp竟然沒辦法取得我想要的資訊) 試著用bs及pyquery來實作 但在table這卡關,希望有經驗的前輩可以解惑一下 html如下 <table> <thead> <tr> <th> 欄位1</th> <th> 欄位2</th> <th>欄位3</th> <th>欄位4</th> <th>欄位5</th> <th> 欄位6</th> </tr> </thead> <tbody> <tr> <td rowspan="2"> AB</td> <th>a0</th> <td class="bold green_border">a1<br></td> <td class="grey">a2</td> <td class="grey">a3</td> <td rowspan="2">ab4</td> </tr> <tr> <th>b0<br></th> <td class="bold">b1</td> <td class="grey">b2<br></td> <td class="grey">b3</td> </tr> <tr> <td rowspan="2"> CD</td> <th>c0</th> <td class="bold">c1</td> <td class="grey">c2</td> <td class="grey">c3</td> <td rowspan="2">cd4</td> </tr> <tr> <th>d0<br></th> <td class="bold green_border">d1</td> <td class="grey">d2</td> <td class="grey">d3</td> </tr> </tbody> </table> 大致上,是要取得class = green_border的值,但也要取得它前後的一些欄位 但因為有的td rowspan =2,所以不管是直接filter green_border,再往前後取得值 或是取得tr後,再find,好像都拿不到rowspan的值 比如我要找的值是d1(欄位3),但我要怎麼拿到CD(欄位1)或cd4(欄位6)的值呢? 麻煩有經驗的前輩指導一下,謝謝你們了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.240.179.61 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1501871876.A.220.html

08/05 03:53, , 1F
假設格式永不改變,硬拆的話 http://imgur.com/aHSbGZr.png
08/05 03:53, 1F

08/05 04:14, , 2F
謝hoho8大的回應,但green_border的所在td會隨著設
08/05 04:14, 2F

08/05 04:14, , 3F
備狀況改變而改變。所以我需要select .green_border
08/05 04:14, 3F

08/05 04:14, , 4F
後,再抓前後對映的td[rowspan="2"]的值,應該不能用
08/05 04:14, 4F

08/05 04:14, , 5F
硬拆的?
08/05 04:14, 5F

08/05 06:15, , 6F
所以綠燈會在 a0~d3 這4x4空間中亮起一個
08/05 06:15, 6F

08/05 06:16, , 7F

08/05 06:16, , 8F
亮b2,就取b2 AB ab4......亮c1就取 c1 CD cb4,這樣?
08/05 06:16, 8F

08/05 06:17, , 9F
cb4 →cd4
08/05 06:17, 9F

08/05 07:24, , 10F
你要的是這樣的嗎?
08/05 07:24, 10F

08/05 07:27, , 11F
這取決於表格的相對位置,順便附上code,可以看你怎麼改
08/05 07:27, 11F

08/05 07:28, , 12F
08/05 07:28, 12F

08/05 18:19, , 13F
xpath 可以用 .. 取得上一層,這是你要的嗎?
08/05 18:19, 13F

08/06 02:50, , 14F
謝謝ntumath的指導,原來是要用previous_siblings解決
08/06 02:50, 14F
文章代碼(AID): #1PXBy48W (Python)
文章代碼(AID): #1PXBy48W (Python)