iT邦幫忙

0

為什麼會爬不到class裡面的文字

https://ithelp.ithome.com.tw/upload/images/20210416/20136728Lur4Q8PwAf.pngtry{
Document doc = Jsoup.connect("https://cloud.culture.tw/frontsite/inquiry/emapInquiryAction.do?method=showEmapDetail&indexId=52924").timeout(6000).get();

Elements image = doc.select("div.info_img > img");
//Elements title = doc.select("div.detail_div > h2");
Elements title = doc.select("#info_cont > ul > li:nth-child(1) > div.td_cont");
//#infoContent > ul > li:nth-child(1) > div.td_cont 爬不到
//#contentBak > ul > li:nth-child(1) > div.td_cont 爬的到
product.setTitle(title.text()); product.setImagUrl("https://cloud.culture.tw/"+image.attr("src"));
}catch (Exception ex){}
runOnUiThread(new Runnable()
{
@Override
public void run()
{
txtitle.setText(product.getTitle());
Picasso.get()
.load(product.getImagUrl())
.into(img);
}
});

ccutmis iT邦高手 4 級 ‧ 2021-04-16 08:41:27 檢舉
去google 'js render 爬蟲'

1 個回答

1
koro_michael
iT邦新手 3 級 ‧ 2021-04-16 17:16:29
最佳解答

這種 js 做出來的頁面,通常都是用 ajax 去將資料取回來再生成畫面

所以不用爬網頁,直接呼叫對方的 ajax 就可以了

https://ithelp.ithome.com.tw/upload/images/20210416/20135412FvksQwyCe7.png

紅框處就是你想要的資料,截出來就好

看更多先前的回應...收起先前的回應...

PS: 雖然我覺得這種做法真的挺不安全的,呼叫 ajax 回傳的是 js 語法,前端再用 eval 執行...

那能不能請問,為甚麼我用一樣的copy selector方式去抓,但是下面的class可以抓,但是上面的不行呢? 研究了好久但是總是抓不到,ajax的部分我會再去讀,謝謝您給我一個方向,因為目前在學校沒有學到關於ajax的東西。

點擊Elements面板的element/
滑鼠右鍵/copy/copy selector
會出現路徑

謝謝你的回答,我知道可以在element那邊copy selector
我紅框的部分兩個的copy selector分別是
#infoContent > ul > li:nth-child(1) > div.td_cont
#contentBak > ul > li:nth-child(1) > div.td_cont
但是只有下面的那行爬蟲爬的到,但是我用上面的路徑去爬就又沒有了
所以想知道說為什麼一樣copy selector的方式去爬,但是會抓不到
https://ithelp.ithome.com.tw/upload/images/20210416/201367288BXOzZqD85.png

a107222010 你用 Java 爬回來的是 HTML 原始碼,如果你打開原始碼你會發現,那邊是根本沒有任何東西的

https://ithelp.ithome.com.tw/upload/images/20210417/20135412jv13J15gv7.png

所以你用 Jsoup 取不到是非常正常的

你用開發者工具看到的是瀏覽器已經執行完 JS 後的狀態,流程如下

使用者打開網頁 > Server 回傳 HTML > 瀏覽器解析 HTML CSS 渲染畫面 > 瀏覽器執行 JS > JS 利用瀏覽器的 API 更動畫面

你說抓不到的部分就是 "JS 利用瀏覽器的 API 更動畫面" 這一個步驟去渲染出來的

但是你的爬蟲只到 "Server 回傳 HTML" 這一個步驟,爬蟲並沒有辦法去做 "瀏覽器解析 HTML CSS 渲染畫面" 及之後的步驟

除非靠另外的程式來輔助

長見識了,原來是這個原因。

謝謝你的詳細介紹讓我更了解關於爬蟲的部分,我也在詳讀之後使用了selenium的方式來做爬蟲,總算是能夠爬到我要的內容了,但是我出現另一個問題是我使用python的方式有辦法使用,但是使用java卻沒有辦法,總是會出現錯誤,不管我改用幾個selenium的版本都無法解決,請問 @koro_michael 關於這個部分您能夠幫助我嗎?https://ithelp.ithome.com.tw/upload/images/20210423/201367282NnxeHqSsM.pnghttps://ithelp.ithome.com.tw/upload/images/20210423/20136728EStbt2zISc.png

a107222010
這看起來不像是引入JAR檔案出錯,我跟你引入的東西一樣卻可以執行,要不試試刪除專案重新建立或是換一個IDE

我要發表回答

立即登入回答