rlads2021 / hw10

HW 10: Vector representations of text
https://rlads2021.github.io/hw10/
0 stars 0 forks source link

使用開發者工具的Copy Selector無法正常地找到東西 #9

Open patricia40719 opened 3 years ago

patricia40719 commented 3 years ago

助教你好,請問:

  1. 我試過影片中做過的示範,在影片中作為範例的那些比較簡單的網頁中,我可以利用開發者工具中的Copy Selecter來複製特定物件的路徑(把路徑貼到R裡面後可以正確地找到該物件),但是我如果是在104網頁那種html複雜的網頁中使用開發者工具中的Copy Selecter來複製特定物件的路徑(像是#maincontent > div.container__left > ul > li:nth-child(1) > div:nth-child(1) > div.item__job-info > div.item__job-prop > i.item__job-prop-item.item__job-prop-salary),貼到R後R卻找不到東西,回傳呈現{xml_nodeset (0)}(下圖是我的程式碼),想請問助教為什麼會這樣。
  2. 有些html tag的class有很多名字,像是<div class="b-block--top-bord job-list-item b-block--load b-clearfix js-loading-refresh b-hide">,這時如果要呼叫這個div tag,只要挑他的其中一個名字寫,電腦就可以找到他了嗎?謝謝 截圖 2021-05-29 下午6 12 13
liao961120 commented 3 years ago

可以將你的程式碼貼上來嗎?

patricia40719 commented 3 years ago
library(rvest)
library(httr)
resp <- GET("https://www.104.com.tw/jobs/search/?ro=0&isnew=14&keyword=實習%20intern&order=12&asc=0&rostatus=1024&page=1&mode=s&tm_source=104&utm_medium=internarea")
resp$status_code
html <- content(resp)
a <- html%>% 
    html_nodes("#maincontent > div.container__left > ul > li:nth-child(1) > div:nth-child(1) > div.item__job-info > div.item__job-prop > i.item__job-prop-item.item__job-prop-salary")%>%
    html_attr("aria-label")%>%
    html_text()
liao961120 commented 3 years ago

我這邊試你的 CSS Selector 也沒辦法 (一開始就沒有 id 是 maincontent 的東西) 但我用其它的 selector 確實可以找到東西

library(rvest)
library(httr)
resp <- GET("https://www.104.com.tw/jobs/search/?ro=0&isnew=14&keyword=實習%20intern&order=12&asc=0&rostatus=1024&page=1&mode=s&tm_source=104&utm_medium=internarea")
resp$status_code
#> [1] 200
html <- content(resp)

html %>%  html_nodes("#maincontent")
#> {xml_nodeset (0)}

html %>%  html_nodes("#js-job-content > article:nth-child(2) > div.b-block__left > div > span")
#> {xml_nodeset (2)}
#> [1] <span class="b-tag--default">月薪26,000~60,000元</span>
#> [2] <span class="b-tag--default">員工1000人</span>
liao961120 commented 3 years ago
  1. 有些html tag的class有很多名字,像是<div class="b-block--top-bord job-list-item b-block--load b-clearfix js-loading-refresh b-hide">,這時如果要呼叫這個div tag,只要挑他的其中一個名字寫,電腦就可以找到他了嗎?謝謝

確實可以找到,但同時也有可能找到其它 className 相同但不是你所想要的 element

patricia40719 commented 3 years ago

除了上面的程式碼外,我也試了該網頁的其他東西,好像是有些東西可以,有些東西不行誒。 關於開發者工具的Copy Selector,還有一個問題我遇到的問題想請教: 假設有個html片段長這樣(我把層階跟class簡化很多,只是想大概表達一下個物件的相對位置)

<h2 class="a">
        <a class="b">ABC</a>
</h2>

<h2 class="a">
        <a class="b">DEF</a>
</h2>

<h2 class="a">
       <a class="b">DHI</a> 
</h2>

我的目標是找到ABC、DEF、GHI這三個標題,由於網頁HTML太複雜很難自己寫路徑,於是我先選取<h4>ABC</h4>用Copy Selector複製他的路徑#js-job-content > article:nth-child(1) > div.b-block__left > h2 > a,貼進R後成功抓到ABC,但沒抓到DEF、GHI,那麼我有沒有可能透過些微修改剛剛用來抓到ABC的那個Copy Selector的路徑,來一口氣抓到ABC、DEF、GHI三個標題。因為我發現<a class="b">DEF</a>的路徑是#js-job-content > article:nth-child(2) > div.b-block__left > h2 > a,中間那個article:nth-child(1)(2)是不是關鍵。

liao961120 commented 3 years ago

可以喔,把 article:nth-child(1):nth-child(1) 拿掉就好:

html %>%  
   html_nodes("#js-job-content > article > div.b-block__left > h2 > a") %>%
   html_text()
#>  [1] "【巨匠東大日語 全新開幕】課程諮詢顧問(底薪+獎金3.6萬以上)#歡迎補教同業加入#歡迎實習生加入(美語南區台南)"
#>  [2] "行政助理實習生-學生實習"                                                                                
#>  [3] "實習生 Internship"                                                                                      
#>  [4] "實習生 Internship"                                                                                      
#>  [5] "行銷實習生intern"                                                                                       
#>  [6] "Intern ─ 智慧家庭設計師實習生"                                                                          
#>  [7] "【2021-實習專區Intern】企業實習生現正募集~!"                                                            
#>  [8] "Web前端工程實習生(Web Front-end Intern)"                                                                
#>  [9] "Operations Intern 營運實習生 (學生實習)"                                                                
#> [10] "【KOL Radar】業務企劃 實習生 Account Executive Intern"                                                  
#> [11] "網頁後端工程實習生(Web Back-end Intern)"                                                                
#> [12] "行銷部實習生-學生實習 Intern Project- Marketing Department"                                             
#> [13] "新創實習【Amazon跨境電商】Visual Marketing Intern 視覺行銷實習生"                                       
#> [14] "Order Services_Intern (訂單服務_實習生)"                                                                
#> [15] "Intern ─ 智慧家庭工程師實習生"                                                                          
#> [16] "實習生"                                                                                                 
#> [17] "實習生/工讀生"                                                                                         
#> [18] "[暑期實習] 2021動畫設計實習生"                                                                          
#> [19] "Business Development Intern 業務開發實習生 (兼職亦可)"                                                  
#> [20] "[知名外商公司] Corporate Communications Intern 企業溝通實習生(公共關係)_SMS_855"                        
#> [21] "Operation Intern Sea Cargo/海運文件處理人員 實習生"                                                     
#> [22] "新創科技starup實習生-Marketing Intern"