[問題] xpath的內容問題 求大大解答QQ

看板Python作者 (NoneNamey)時間4年前 (2020/07/07 13:42), 4年前編輯推噓2(2059)
留言61則, 4人參與, 4年前最新討論串1/1
小弟最近在研究xpath,想說跟BeautifulSoup差不多,但是發現了一個問題 以這程式碼為例子: http://imgur.com/MmtRkj5
就是當我想要抓取一則回文的內容,原本預計會像這樣回應 http://imgur.com/7s9VoNJ
但是當我加上text()的時候,他好像會自動抓取子節點做分段.... 結果就變這樣 http://imgur.com/YMEA0Wd
求解QQ... 我要如何讓他不會自動分段 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.66.36 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1594100569.A.B25.html ※ 編輯: NoneNaMey (36.231.66.36 臺灣), 07/07/2020 13:44:12 ※ 編輯: NoneNaMey (36.231.66.36 臺灣), 07/07/2020 13:44:35 ※ 編輯: NoneNaMey (36.231.66.36 臺灣), 07/07/2020 13:44:54

07/07 23:49, 4年前 , 1F
我覺得大家可能仰賴網路上的資訊了
07/07 23:49, 1F

07/07 23:50, 4年前 , 2F
從你的問題來看,我都看不出你現在打算用什麼
07/07 23:50, 2F

07/07 23:52, 4年前 , 3F
BeautifulSoup裡也有xpath的,但你的xpath是用什麼模組
07/07 23:52, 3F

07/07 23:52, 4年前 , 4F
07/07 23:52, 4F

07/07 23:53, 4年前 , 5F
Parsel也有xpath也有css。先把你用了什麼,程式寫了什麼
07/07 23:53, 5F

07/07 23:53, 4年前 , 6F
寫清楚吧
07/07 23:53, 6F

07/07 23:55, 4年前 , 7F
我估了一下,你可能是用lxml 的 etree
07/07 23:55, 7F

07/07 23:56, 4年前 , 8F
但我懶得猜了
07/07 23:56, 8F

07/08 01:17, 4年前 , 9F
etree很好用 你資訊貼詳細一點吧
07/08 01:17, 9F

07/08 12:45, 4年前 , 10F
抱歉,我是用etree沒錯。因為想學scrapy
07/08 12:45, 10F

07/08 12:47, 4年前 , 11F
發現scrapy都是用xpath的語法,之前用bs4都是用find
07/08 12:47, 11F

07/08 12:48, 4年前 , 12F
這個問題就是我想抓 索引、發文時間以及內文
07/08 12:48, 12F

07/08 13:03, 4年前 , 13F
07/08 13:03, 13F

07/08 13:06, 4年前 , 14F
以這篇文為例子,總共只有15樓,我抓這行內碼
07/08 13:06, 14F

07/08 13:08, 4年前 , 15F
出來的結果卻變成這樣 http://imgur.com/xPr8FMt
07/08 13:08, 15F

07/08 13:10, 4年前 , 16F
#抱歉 上面少給一張 http://imgur.com/Vlt2oTP
07/08 13:10, 16F

07/08 19:27, 4年前 , 17F
你想要一個xpath抓一頁全部樓層的回覆?
07/08 19:27, 17F
沒錯QQ 而且樓層都要對到

07/08 20:12, 4年前 , 18F
好吧。我大概懂了。但其實沒錯
07/08 20:12, 18F

07/08 20:15, 4年前 , 19F
它中間變空白是因為它有圖及其他內容你沒處理啊
07/08 20:15, 19F

07/08 20:18, 4年前 , 20F

07/08 20:22, 4年前 , 21F
參考這個吧
07/08 20:22, 21F

07/08 20:22, 4年前 , 22F

07/08 20:36, 4年前 , 23F
這要再篩選啦,不是用一個篩選器就搞定的。你要再迴圈裡
07/08 20:36, 23F

07/08 20:36, 4年前 , 24F
去判斷
07/08 20:36, 24F

07/08 20:38, 4年前 , 25F
要再*在迴圈裡去判斷其實狀況
07/08 20:38, 25F

07/08 20:39, 4年前 , 26F
其*他狀況
07/08 20:39, 26F

07/08 20:56, 4年前 , 27F
另外,我建議你用Parsel套件。雖然它們可能同樣源自於lx
07/08 20:56, 27F

07/08 20:56, 4年前 , 28F
ml套件。但scrapy官方說也可以用bs4只是「它比較慢」(
07/08 20:56, 28F

07/08 20:56, 4年前 , 29F
官方說的)。所以如果習慣bs4倒也不一定非用別的
07/08 20:56, 29F

07/09 00:45, 4年前 , 30F
看起來有三種。chain在一起就行了
07/09 00:45, 30F

07/09 00:45, 4年前 , 31F

07/09 00:47, 4年前 , 32F

07/09 00:47, 4年前 , 33F
看起來有三種。chain在一起就行了
07/09 00:47, 33F

07/09 01:26, 4年前 , 34F
看起來etree和parsel結果有點不同。
07/09 01:26, 34F

07/09 01:26, 4年前 , 35F
你那個應該是把空格strip掉就行了吧
07/09 01:26, 35F
我試過strip()和replace掉空白,只是最主要是PO文者有換行,他的list就多一個值,就對不到了 就像這篇 http://imgur.com/8owWR0I
他換了很多行,出來的結果就變這樣 http://imgur.com/NrDMGSP

07/09 01:26, 4年前 , 36F

07/09 12:25, 4年前 , 37F
感謝大大細心的講解~ 先把那個網站存到最愛XD
07/09 12:25, 37F

07/09 12:25, 4年前 , 38F
等等來研究看看
07/09 12:25, 38F
※ 編輯: NoneNaMey (36.231.93.193 臺灣), 07/09/2020 12:45:37 ※ 編輯: NoneNaMey (36.231.93.193 臺灣), 07/09/2020 13:24:18 ※ 編輯: NoneNaMey (36.231.93.193 臺灣), 07/09/2020 13:48:43 ※ 編輯: NoneNaMey (36.231.93.193 臺灣), 07/09/2020 13:49:14

07/09 14:12, 4年前 , 39F
Bs4也說能用lxml就用,快10倍
07/09 14:12, 39F

07/09 14:19, 4年前 , 40F
嗯啊,而且速度上真的比bs4快很多
07/09 14:19, 40F

07/09 15:26, 4年前 , 41F
我的是正常的。你用我的code吧。因為parsle是scrapy用的
07/09 15:26, 41F

07/09 15:26, 4年前 , 42F
,可以直接對應scrapy的selector小改即可。而且我覺得如
07/09 15:26, 42F

07/09 15:26, 4年前 , 43F
果你去看你那個網站回文的html結構,其實它真的是有三種
07/09 15:26, 43F

07/09 15:26, 4年前 , 44F
以上不同的結構。
07/09 15:26, 44F

07/09 15:26, 4年前 , 45F

07/09 15:31, 4年前 , 46F
它沒有多很多行啦。就是中間1235樓的內文是空的。你拿我
07/09 15:31, 46F

07/09 15:31, 4年前 , 47F
程式去看每個內文就知怎麼回事了。
07/09 15:31, 47F

07/09 15:31, 4年前 , 48F
Btw,bs4也可以用lxml
07/09 15:31, 48F

07/09 15:34, 4年前 , 49F
你的code可能看不出來哪一樓是因為你把它們全混在一起了
07/09 15:34, 49F

07/09 15:34, 4年前 , 50F
。你參考我的再去看文章的HTML就應該懂了。這裡實在解釋
07/09 15:34, 50F

07/09 15:34, 4年前 , 51F
不清楚。
07/09 15:34, 51F

07/09 15:46, 4年前 , 52F
感謝alvinlin大的講解,我用你的方法是OK的。
07/09 15:46, 52F

07/09 15:47, 4年前 , 53F
結構上我也有發現不一樣,因為發文者換行會多個<div>
07/09 15:47, 53F

07/09 15:48, 4年前 , 54F
我是卡在我抓c-article那行內碼時會自動抓子結點分段,
07/09 15:48, 54F

07/09 15:48, 4年前 , 55F
導致他list會因此分段,解決辦法就是用你用到的
07/09 15:48, 55F

07/09 15:49, 4年前 , 56F
following-sibling 不過我還要了解一下XD
07/09 15:49, 56F

07/09 15:50, 4年前 , 57F
還有太多我不懂的用法了QQ 只能慢慢學了
07/09 15:50, 57F

07/09 15:52, 4年前 , 58F
會想用xpath是因為找工作如果會xpath比較不會被嫌(?
07/09 15:52, 58F
※ 編輯: NoneNaMey (36.231.93.193 臺灣), 07/09/2020 15:54:58

07/09 15:56, 4年前 , 59F
我過去是用bs4+lxml解析器,不過速度真的慢xpath語法的
07/09 15:56, 59F

07/09 15:56, 4年前 , 60F
很多
07/09 15:56, 60F

07/09 16:21, 4年前 , 61F
Ok.讚喔^^
07/09 16:21, 61F
文章代碼(AID): #1V10jPib (Python)
文章代碼(AID): #1V10jPib (Python)