iT邦幫忙

2

[網頁爬蟲] 標籤抓不到內容

大家好,我是爬蟲初學者。在練習爬104人力銀行網頁內容時,遇到”定位標籤找不到內容”的問題,麻煩幫忙求解。


想要抓取的網頁url: (https://www.104.com.tw/job/6vrlf?jobsource=jolist_c_relevance)

想要抓取的網頁內容: “條件要求”裡的”工作技能”的內容
Imgur

使用的程式語言: Python 3
使用套件: requests, BeautifulSoup
附上程式碼: (https://repl.it/@ellieytc/ProperFrigidZettabyte)
下圖為anaconda jupyter notebook的環境截圖:
Imgur

我遇到的問題是:
print(soup)後,發現回傳的html文件內容裡,沒有”條件要求”這一大區塊的文字內容,但是回到”開發人員工具”看,有找到”條件要求”區塊裡的標籤和文字內容。
”開發人員工具”畫面如下:
Imgur

於是我試著定位標籤,寫出語法:
'''jobs = soup.select('div.job-requirement > p > span > a > u')'''
但回傳的卻是空集合。
Imgur

試著google和解決問題的思考過程:

  1. 難道select()裡面的標籤語法寫錯了嗎? 如果是,應該會印出attribute error。(os:不是這個問題!)
  2. 回傳空集合,意思是定位錯誤、沒抓到資料嗎? 於是我試著改成 '''jobs = soup.select(‘div’)''',卻回傳一堆div標籤,但就是沒有”文字(text)”內容。(os:嗯,有可能是定位錯誤! 但百思不解哪裡錯了?)
  3. “print(soup)後,發現回傳的html文件內容裡,沒有”條件要求”這一大區塊的文字內容; 但是有上一個區塊 “工作內容”的所有文字”,這點非常奇怪!於是我 Google 搜尋: 爬蟲 抓不到標籤,找到以下案例:
    -動態網頁的問題。(os: 但我這個是靜態網頁,不是這個問題!)
    -欲抓取的內容是用javascript寫的,所以沒有呈現在html文件。(os:什麼意思不太懂? 那為什麼我在css裡也可以找到標籤? )
    -反爬蟲。(os: 可是我爬進去了呀,為什麼只有”條件要求”這個區塊找不到? 難道被隱藏了嗎?如果被隱藏,但是有找到標籤,為什麼會抓不到??)

目前呈現一個鬼打牆的狀態,只能求求版上大神幫忙了。/images/emoticon/emoticon02.gif

第一次發問,如果發問的鋪陳有需要改進的地方,也請多多指教。
謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

5
dragonH
iT邦超人 5 級 ‧ 2020-05-12 00:39:39
最佳解答

我多餘的話就不多說

看之前的回復

參考

總之

你會看到他有個連結

https://www.104.com.tw/job/ajax/content/6vrlf

帶上必要的 header

headers = {
    "Referer": "https://www.104.com.tw/job/6vrlf",
}

就能順利爬到資料

code

import requests
import json

url = 'https://www.104.com.tw/job/ajax/content/6vrlf'
headers = {
    "Referer": "https://www.104.com.tw/job/6vrlf",
}

response = requests.get(url = url, headers = headers)
json.loads(response.text)

result

{'data': {'corpImageRight': {'corpImageRight': {'imageUrl': '', 'link': ''}},
  ...
  'jobDetail': {'jobDescription': 'TOP500 Key clients 數據整合、行銷策略與會員CRM經營管理\r\n透過adGeek開放式溝通團隊合作的企業文化,可充分應用所長提升客戶成效,同時獲得更深的行銷know how,並往行銷funnel上層移動,與客戶討論市場、產品定位與會員經營,切定行銷方案,成為更全方位的數位策略全才\r\n適合正向積極、有高度求知慾、熱衷擬定行銷策略、擅長做會員分級行銷,看到轉換成效提升會興奮,並渴望把事情做好的你!',
...

爬不到的原因是因為他是 js render 出來的

你可以禁用 browser 的 js 就知道

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

/images/emoticon/emoticon12.gif

ellieytc iT邦新手 5 級 ‧ 2020-05-12 10:17:25 檢舉

原來header也要注意,js render的問題我再深入研究,非常謝謝你的回答。

ellieytc iT邦新手 5 級 ‧ 2020-05-12 10:17:25 檢舉

原來header也要注意,js render的問題我再深入研究,非常謝謝你的回答。

dragonH iT邦超人 5 級 ‧ 2020-05-12 10:24:21 檢舉

/images/emoticon/emoticon42.gif

1
paicheng0111
iT邦大師 5 級 ‧ 2020-05-12 10:03:17

爬不到可能是因為該區塊是用JS render的

ellieytc iT邦新手 5 級 ‧ 2020-05-12 10:18:24 檢舉

好的,我來研究研究,謝謝你給我方向。

alex0831
iT邦新手 5 級 ‧ 2020-07-05 00:42:27
【**此則訊息已被站方移除**】

我要發表回答

立即登入回答