今天在獲取一個網頁的具體內容時遇到了一些小麻煩,
源代碼:

1 package com.ms.test; 2 3 import us.codecraft.webmagic.Page; 4 import us.codecraft.webmagic.Site; 5 import us.codecraft.webmagic.Spider; 6 import us.codecraft.webmagic.processor.PageProcessor; 7 8 public class TestWebmagic implements PageProcessor{ 9 10 Site site = Site.me(); 11 @Override 12 public Site getSite() { 13 // TODO Auto-generated method stub 14 return site; 15 } 16 17 @Override 18 public void process(Page page) { 19 // TODO Auto-generated method stub 20 page.putField("test", page.getHtml().xpath("//div[@class=p-2]/div[@class=o-border-bottom2]/div[@class=my-2]/strong")); 21 } 22 23 public static void main(String[] args) { 24 Spider.create(new TestWebmagic()) 25 .addUrl("http://www.beijing.gov.cn/hudong/hdjl/com.web.consult.consultDetail.flow?originalId=AH20011700001") 26 .run(); 27 } 28 }
我獲取到的結果是這個樣子的:
但是我想要的一定是不帶標簽的內容,所以呢我就去百度了一下,發現沒有很好的例子,但是在一個評論中找到了答案,那就是在后面加一個“/text()”函數。
我們 都知道在jsoup中,很容易就能得到標簽內的內容,因為他有“text()”這個函數,所以我看到例子的時候我就知道了。
更新后的代碼:

1 package com.ms.test; 2 3 import us.codecraft.webmagic.Page; 4 import us.codecraft.webmagic.Site; 5 import us.codecraft.webmagic.Spider; 6 import us.codecraft.webmagic.processor.PageProcessor; 7 8 public class TestWebmagic implements PageProcessor{ 9 10 Site site = Site.me(); 11 @Override 12 public Site getSite() { 13 // TODO Auto-generated method stub 14 return site; 15 } 16 17 @Override 18 public void process(Page page) { 19 // TODO Auto-generated method stub 20 page.putField("test", page.getHtml().xpath("//div[@class=p-2]/div[@class=o-border-bottom2]/div[@class=my-2]/strong/text()")); 21 22 } 23 24 public static void main(String[] args) { 25 Spider.create(new TestWebmagic()) 26 .addUrl("http://www.beijing.gov.cn/hudong/hdjl/com.web.consult.consultDetail.flow?originalId=AH20011700001") 27 .run(); 28 } 29 }
結果如下:
想起來我以前也遇到過一個類似的問題,就是這樣的,未更改前,得到的結果是這樣的:
更改后得到的結果是這樣的:
什么都沒有輸出,這個。。。
還是用我自己的辦法吧。
/***********************************************續***********************************************/
2020-02-15 21:34:43
關於獲取標簽內部內容的補充,在上述方法中,加一個“/text()”確實可以輸出標簽內部的內容,但是如果想把結果賦值給String並且也是不帶標簽的話,toString();一下就可以了。