104學習

XPath

XPath
關注
邀請朋友
邀請朋友

Line

Facebook

複製連結

取消
這項技能主要用來在網頁或XML文件中,精確定位和擷取特定元素或資料。對於從事網頁爬蟲、自動化測試、資料分析等工作的人來說,非常實用。掌握後能快速篩選出需要的資訊,提升工作效率和準確度,是數據處理及自動化流程中不可或缺的工具。
關於教室
關注人數 0 人
104人力銀行從職缺中挑選出常見技能所成立的官方教室,提供大家進行共學互動。
學習主持人
持續分享知識,
有機會成為官方教室主持人
教室標籤
關於教室
關注人數 0 人
104人力銀行從職缺中挑選出常見技能所成立的官方教室,提供大家進行共學互動。
學習主持人
持續分享知識,
有機會成為官方教室主持人
教室標籤
Hi~ 歡迎分享學習資源,有學習問題可匿名向Giver發問!
我要分享
我要提問

XPath 學習推薦

Mike Ku

Learn Code With Mike品牌創辦人

2022/01/21

不可不知的Scrapy框架爬取下一層網頁資料實作
本文以INSIDE硬塞的網路趨勢觀察網站( https://www.inside.com.tw/ )首頁的熱門文章為例,來和大家分享如何在Scrapy框架中爬取下一層的網頁內容。
Q: Scrapy網頁爬蟲爬取下一層網頁內容
建立Scrapy網頁爬蟲檔案(hot_news.py),在parse()方法(Method)的地方,透過Scrapy框架的xpath()方法(Method),來爬取INSIDE硬塞的網路趨勢觀察網站的所有熱門文章下一層網頁網址,如下範例:
import scrapy
class HotNewsSpider(scrapy.Spider):
name = 'hot_news'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
post_urls = response.xpath(
"//a[@class='hero_menu_link']/@href").getall()
詳細的Scrapy xpath定位元素方法教學可以參考[Scrapy教學5]掌握Scrapy框架重要的XPath定位元素方法文章( https://www.learncodewithmike.com/2021/01/scrapy-xpath-selectors.html )。取得了所有熱門文章的下一層網頁網址後,就可以透過迴圈來進行請求,如下範例:
import scrapy
class HotNewsSpider(scrapy.Spider):
name = 'hot_news'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
post_urls = response.xpath(
"//a[@class='hero_menu_link']/@href").getall()
for post_url in post_urls:
yield scrapy.Request(post_url, self.parse_content)
其中Request方法(Method)的第一個參數,就是「請求網址」,也就是熱門文章的下一層網頁網址,而第二個參數就是請求該網址後,所要執行的方法(Method),而parse_content()方法(Method)中,就是來爬取熱門文章的下一層網頁內容,以本文為例就是包含「文章標題」及「文章摘要」。
接著,就可以在parse_content()方法(Method)中,同樣使用Scrapy框架的xpath()方法(Method),來爬取「文章標題」及「文章摘要」,如下範例:
import scrapy
class HotNewsSpider(scrapy.Spider):
...
def parse_content(self, response):
# 熱門文章標題
hot_news_title = response.xpath(
"//h1[@class='post_header_title js-auto_break_title']/text()").get()
# 熱門文章摘要
hot_news_intro = response.xpath(
"//div[@class='post_introduction']/text()").get()
print(f"熱門文章標題:{hot_news_title},\n熱門文章摘要:{hot_news_intro}")
利用以下的指令執行Scrapy網頁爬蟲:
$ scrapy crawl hot_news
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2021/02/scrapy-follow-links-and-collect-data.html
)網站觀看更多精彩內容。
看更多
2 0 748 0
Mike Ku

Learn Code With Mike品牌創辦人

2022/01/15

掌握Scrapy框架重要的CSS定位元素方法(上)
想要開發Python網頁爬蟲的朋友,都會知道定位元素(Element)是一個非常重要的動作,Scrapy框架本身就有提供自己的定位元素(Element)方法(Method),包含CSS與XPath兩種,本文就以INSIDE硬塞的網路趨勢觀察網站-AI新聞( https://www.inside.com.tw/tag/ai )為例,先來和大家分享在Scrapy框架中,如何利用CSS的定位元素(Element)方法(Method),爬取想要的網頁內容。
Q: Scrapy如何利用CSS方法取得單一元素值?
CSS(Cascading Style Sheets)階層樣式表相信大家都不陌生,可以自訂樣式的類別來裝飾網頁,像是字體顏色、粗體等,所以在利用Scrapy框架開發網頁爬蟲時,也就能夠利用CSS樣式類別,來定位想要爬取的網頁元素(Element)。
前往INSIDE硬塞的網路趨勢觀察網站-AI新聞,在文章標題的地方,點擊滑鼠右鍵,選擇檢查,可以看到它的CSS樣式類別。假設想要在Scrapy框架中,利用CSS樣式類別來取得網頁的單一元素值,也就是單一文章的標題,就可以在spiders/inside.py的parse()方法(Method)中,使用css()方法(Method)來定位單一元素(Element),如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
title = response.css("a.js-auto_break_title::text").get()
print(title)
接著,利用以下的指令執行inside網頁爬蟲:
$ scrapy crawl inside
以上範例,response就是Scrapy框架請求後的回應結果,接著,呼叫css()方法,傳入所要定位的HTML標籤<a>,點的後面加上它的CSS樣式類別,由於要取得元素(Element)的文字,所以在加上「::text」關鍵字,最後,呼get()方法(Method)取得單一元素(Element)。
Q: Scrapy如何利用CSS方法取得多個元素值?
而在Scrapy框架中,想要爬取網頁多個元素值,則呼叫getall()方法(Method)即可,如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
titles = response.css("a.js-auto_break_title::text").getall()
print(titles)
可以看到getall()方法(Method)回傳的是一個串列(List),包含了所有樣式類別為「js-auto_break_title」的<a>標籤文字,接下來,利用迴圈即可取得其中的文章標題,如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
titles = response.css("a.js-auto_break_title::text").getall()
for title in titles:
print(title)
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2021/01/scrapy-css-selectors.html
)網站觀看更多精彩內容。
看更多
2 0 242 0

熱門精選

104學習

產品

04/28 09:00

新手如何用 AI 整理會議紀錄?線上會議、實體會議一次看懂
開會時一邊聽、一邊記、一邊思考,常常會遇到幾個問題:重點來不及抄、決議沒寫清楚、待辦事項散落在聊天訊息或腦袋裡。現在,只要善用手機錄音、會議逐字稿與常見 AI 工具,新手也能更快整理出一份清楚、可追蹤的會議紀錄。
不過,AI 不是幫你「完全取代紀錄」,而是協助你加快整理流程。正式發送前,仍然需要人工確認人名、日期、金額、負責人、截止日與會議決議。
本文將分成「線上會議」與「實體會議」兩種情境,教你用手邊常見工具,搭配 ChatGPT、Claude、Gemini、NotebookLM 等 AI 工具,整理出適合交給主管、團隊或客戶追蹤的會議紀錄。
使用 AI 前,先確認 3 件事
在開始錄音、轉錄或把內容交給 AI 前,請先確認:
第一,會議是否允許錄音、錄影或轉錄。建議事前告知與會者錄音目的、使用範圍與保存方式。
第二,會議內容是否包含敏感資料。如果涉及客戶資料、個人資料、薪資、人事、財務、商業機密或未公開策略,不建議自行上傳到外部 AI 工具,應優先使用公司核准的平台。
第三,AI 產出只能作為初稿。AI 可能聽錯、漏掉脈絡,或把「討論中的想法」誤寫成「已決定事項」,正式使用前一定要人工檢查。
台灣《個人資料保護法》對個人資料的蒐集、處理與利用,強調應尊重當事人權益,不得逾越特定目的的必要範圍,並應與蒐集目的有正當合理關聯;本文為一般工作效率教學,不構成法律意見,實際使用仍應依公司規範與相關法規辦理。
AI 可以幫會議紀錄做什麼?
AI 在會議紀錄中,最常見的用途有 5 種:
1. 錄音轉文字:把會議錄音或逐字稿變成可整理的文字資料。
2. 摘要重點:從冗長對話中整理出主要討論內容。
3. 萃取決議:找出會議最後確認的結論。
4. 整理待辦事項:列出任務、負責人、截止日期。
5. 改寫成正式紀錄:把口語內容整理成適合寄出的版本。
好的會議紀錄,不是把每句話都記下來,而是清楚回答三個問題:
討論了什麼?決定了什麼?接下來誰要做什麼?
情境一:線上會議怎麼做?
線上會議最適合新手練習,因為 Google Meet、Teams、Zoom 等平台通常已有錄影、字幕、逐字稿或 AI 摘要功能。不過,這些功能是否可用,會依公司帳號、方案、裝置、地區與管理員設定而不同。
Google Meet 的「Take notes for me」可透過 Gemini 協助記錄會議內容,但實際可用性會受到帳號與設定影響。Zoom AI Companion 也提供會議摘要功能,且管理員可啟用或停用相關設定。
線上會議建議流程
第一步:會前確認可否錄影、錄音或開啟逐字稿
如果是客戶會議、敏感會議或跨部門會議,建議先確認公司規範,並告知與會者。
可使用這句話:
「為了方便會後整理會議紀錄,這場會議會開啟錄影或逐字稿功能,紀錄僅供本專案追蹤使用。」
第二步:會中保留原始資料
使用平台內建的錄影、逐字稿、字幕、AI 筆記或會議摘要。
第三步:會後交給 AI 整理
把逐字稿或會議重點貼到 ChatGPT、Claude 或 Gemini,請 AI 整理成正式會議紀錄。
第四步:人工檢查後再寄出
檢查決議是否正確、待辦是否有負責人、截止日是否清楚,以及 AI 是否誤判會議結論。
情境二:實體會議怎麼做?
實體會議的難點是聲音來源比較複雜,可能有多人同時說話、環境雜音、白板討論、投影片補充等。因此,實體會議更需要做好錄音與現場補充紀錄。
最簡單的流程是:
手機錄音 → 轉成文字或整理重點 → 交給 AI 整理 → 人工確認
iPhone:使用內建「語音備忘錄」
iPhone 內建的「語音備忘錄」可用來錄製會議、課程或語音筆記,Apple 官方說明可開始錄音、暫停、繼續錄音,也可調整手機與聲音來源的距離以改善錄音音量。
操作方式:
1. 打開 iPhone 的「語音備忘錄」App。
2. 點選紅色錄音按鈕開始錄音。
3. 會議中若暫停,可按暫停;繼續時再恢復錄音。
4. 會議結束後按停止,錄音會自動儲存。
5. 將檔名改成「日期+會議名稱」,例如「2026-04-27_行銷週會」。
6. 會後可分享錄音檔,或先轉成文字再交給 AI 整理。
Android:使用內建「錄音機」或「Voice Recorder」
Android 手機品牌眾多,內建錄音 App 的名稱與功能會依品牌、機型與系統版本不同。常見名稱包含「錄音機」、「語音錄音」、「Recorder」或「Voice Recorder」。
如果使用 Google Pixel,可留意 Google Recorder;Google 官方說明 Recorder 主要適用於 Pixel,可用來錄製會議、課程等聲音,並提供搜尋與 AI 功能。如果使用 Samsung Galaxy,Samsung 官方說明 Voice Recorder 可錄製課程、會議與對話,支援裝置也可使用 Galaxy AI 進行轉錄、加入 Samsung Notes 或分享文字檔。
Android 通用操作方式:
1. 在手機搜尋「錄音」、「Recorder」或「Voice Recorder」。
2. 開會前先測試 5 到 10 秒,確認收音正常。
3. 把手機放在桌面中央,不要放在口袋或包包裡。
4. 會議結束後停止錄音。
5. 重新命名錄音檔,建議使用「日期+會議名稱」。
6. 若手機支援轉文字,可先產出逐字稿;若不支援,可先手動整理重點,再交給 AI 工具處理。
實體會議小技巧
實體會議中,AI 不一定能準確聽出每個人的聲音。建議主持人在重要決議後,主動重複一次:
「確認一下,這件事由 Amy 負責,下週五前完成第一版,對嗎?」
這句話看似簡單,卻能大幅提高會議紀錄的準確度。
常見、容易取得的 AI 工具怎麼選?
以下工具不代表所有功能都免費,也不保證每個帳號都能使用。部分功能會依方案、裝置、地區與公司管理員設定而不同,使用前建議先確認。
1. ChatGPT:適合整理正式會議紀錄
ChatGPT 適合把逐字稿、會議重點或錄音摘要整理成正式文件,例如會議紀錄、主管摘要、待辦清單或會後 Email。若帳號與裝置支援 ChatGPT Record,也可用於轉錄與摘要會議、腦力激盪或語音筆記;OpenAI 官方同時提醒,轉錄與摘要可能出錯,重要資訊需要人工檢查。
適合用在:正式會議紀錄、主管摘要、待辦清單、會後 Email。
2. Claude:適合處理較長逐字稿與文件
如果會議逐字稿很長,或需要同時參考簡報、企劃書、專案文件,Claude 是常見選項。Claude 官方說明支援上傳 PDF、DOCX、CSV、TXT、HTML、ODT、RTF、EPUB、JSON 等文件格式;部分檔案功能仍會依帳號設定與限制而不同。
適合用在:長會議逐字稿、訪談紀錄、研討會內容、多份文件摘要。
3. Gemini:適合 Google 工作環境
如果團隊平常使用 Gmail、Google Docs、Google Drive、Google Meet,Gemini 會比較容易放進日常流程。Google 文件中的 Gemini 可協助摘要文件,Drive 中的 Gemini 也可協助摘要檔案與資料夾,但需要符合可用方案。
適合用在:Google Docs 會議紀錄、Google Drive 文件整理、Google Meet 會後資料。
4. NotebookLM:適合專案型會議與長期追蹤
NotebookLM 比較像是「專案知識庫」。你可以把會議紀錄、簡報、企劃書、訪談資料放進同一個 Notebook,之後再針對這些資料提問。Google 說明 NotebookLM 會根據你上傳或指定的來源回答問題,並提供來源引用。
適合用在:專案會議追蹤、多次會議整理、課程筆記、客戶訪談資料庫。
新手建議工作流
線上會議
平台逐字稿或摘要 → ChatGPT/Claude/Gemini 整理 → 人工檢查 → 寄出追蹤
若是長期專案,可把每次整理好的會議紀錄放進 NotebookLM,開下次會議前請它整理「前次決議、未完成事項、待確認問題」。
實體會議
手機錄音 → 轉成文字或整理重點 → ChatGPT/Claude/Gemini 整理 → 人工確認
如果沒有逐字稿,也可以會後用 Google Docs 語音輸入,自己口述會議重點。Google Docs 語音輸入需要在支援的瀏覽器中開啟文件,並確保電腦麥克風可正常使用。這比較適合「會後自己補充重點」,不建議直接當成多人會議的正式轉錄工具。
會議紀錄建議格式
新手可以先使用這個格式:
會議主題:
會議時間:
會議地點/會議連結:
主持人:
紀錄者:
與會者:
一、會議目的
簡短說明這場會議要解決什麼問題。
二、討論重點
用條列式整理主要討論內容。
三、會議決議
只放已經確認的結論,不放還在討論中的想法。
四、待辦事項
任務|負責人|截止日期|備註
整理第一版提案|Amy|5/10|提供給行銷部確認
五、待確認事項
列出尚未有答案、需要補資料或下次再討論的內容。
可直接複製的 AI Prompt
Prompt 1:整理正式會議紀錄
請根據以下會議逐字稿,整理成正式會議紀錄。
請包含:
1. 會議主題
2. 會議目的
3. 討論重點
4. 會議決議
5. 待辦事項
6. 待確認事項
7. 下次會議建議追蹤事項
待辦事項請用「任務/負責人/截止日期/備註」格式整理。
如果內容中沒有提到負責人或截止日期,請標示「待確認」。
請不要加入原文沒有提到的資訊。
請使用繁體中文,語氣正式、清楚,適合寄給團隊成員。
Prompt 2:整理主管版摘要
請將以下會議內容整理成主管可快速閱讀的摘要。
請用 300 字以內說明:
1. 本次會議重點
2. 已確認決議
3. 需要主管知道的風險或卡點
4. 接下來最重要的 3 個行動項目
請避免冗長細節,保留關鍵資訊即可。
Prompt 3:檢查會議紀錄
請幫我檢查以下會議紀錄是否完整。
請指出:
1. 是否有決議不清楚的地方
2. 是否有待辦事項缺少負責人
3. 是否有待辦事項缺少截止日期
4. 是否有需要再次確認的數字、日期、人名
5. 是否有語氣太口語、不適合寄給主管或客戶的句子
請提供修改建議。
新手最容易犯的 5 個錯誤
錯誤 1:把逐字稿當成會議紀錄
逐字稿只是原始材料,會議紀錄要整理出重點、決議與待辦。
錯誤 2:沒有區分「提議」和「決議」
有人提出建議,不代表會議已經同意。
錯誤 3:待辦事項沒有負責人
「下週整理報告」不夠清楚;「由 Kevin 於 5/10 前整理第一版報告」才方便追蹤。
錯誤 4:完全相信 AI 摘要
AI 可能漏掉反對意見,或誤解語氣與脈絡。
錯誤 5:忽略資料安全
不要把客戶資料、人事薪資、財務數字、公司策略或未公開資訊,直接上傳到未經公司核准的外部工具。
104學習小提醒
AI 可以幫你省下整理時間,但不能取代你的判斷。會議紀錄真正的價值,不是把所有人說過的話完整留下來,而是讓團隊會後能繼續推進。
對新手來說,最簡單的開始是建立一套固定流程:
錄下來 → 轉成文字 → 請 AI 整理 → 人工檢查 → 寄出追蹤
只要掌握這套流程,無論是線上會議還是實體會議,都能更快產出清楚、完整、可追蹤的會議紀錄。
看更多
1 0 4976 0
Mike Ku

Learn Code With Mike品牌創辦人

2021/12/29

學會使用3個Scrapy網頁爬蟲偵錯技巧提升開發效率
Q:Scrapy Shell(互動介面)是什麼?
Scrapy Shell是一個互動式的終端(Terminal)介面,讓開發人員可以不需要等到整個Scrapy專案完成就能夠進行測試,主要是用來測試Scrapy框架使用css()或xpath()方法(Method)爬取資料的結果。
舉例來說,用Visual Studio Code開啟Scrapy專案,在終端介面(Terminal)的地方,利用以下的指令開啟Scrapy Shell:
如果想要確認回應的結果,可以使用以下的Scrapy Shell指令:
>>>view(response)
True
除此之外,假設要爬取其中的新聞標題,就可以在Scrapy Shell的互動式介面中,透過指令的方式,使用css()或xpath()方法(Method)來測試是否能夠爬取成功,如下範例:
>>> response.css("h3.post_title a.js-auto_break_title::text").get()
'Appier 將於東京交易所掛牌,市值估突破 10 億美元'
Q:Scrapy Logging(日誌)如何使用?
Scrapy網頁爬蟲另一個最常用來偵錯的方法就是Logging(日誌),依據重要的程度分為五種日誌類型,由高到低為:critical、error、warning、info、debug,由於Scrapy框架的網頁爬蟲類別(spiders)本身就已經有logger物件,所以無需引用就可以在網頁爬蟲中使用,如下範例:
class HotNewsSpider(scrapy.Spider):
name = 'hot_news'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
# 熱門文章標題
hot_news_title = response.xpath(
"//h1[@class='title']/text()").get()
if hot_news_title:
return hot_news_title
else:
self.logger.error("沒有爬取到熱門文章標題")
接下來,開啟Scrapy專案的settings.py檔案,加入以下設定,如下範例:
LOG_FILE = "inside_log.txt"
LOG_LEVEL = "ERROR" #特別注意這邊一定要大寫
其中「LOG_LEVEL(日誌層級)」可以自訂在哪一個日誌類型以上需要被記錄到日誌檔中,預設為DEBUG。
而Scrapy網頁爬蟲(spiders)模組以外,如果想要使用Logging(日誌),就需要引用logging模組(Module),以ITEM PIPELINE資料模型管道(pipelines.py)為例,如下範例:
from itemadapter import ItemAdapter
from scrapy.exporters import CsvItemExporter
import logging
class CsvPipeline:
def __init__(self):
self.file = open('posts.csv', 'wb')
self.exporter = CsvItemExporter(self.file, encoding='big5')
self.exporter.start_exporting()
def process_item(self, item, spider):
if item:
self.exporter.export_item(item)
return item
else:
logging.error("無資料匯出!")
...
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2021/03/scrapy-spiders-debug.html
)網站觀看更多精彩內容。
看更多
2 0 1282 0
你可能感興趣的教室