fbpx
直播筆記

Python網頁爬蟲—開發你的第一個網頁爬蟲

任務:爬取INSIDE硬塞網路趨勢觀察網站的文章標題和發布日期 第一步驟:安裝3個套件 request:發送請求到伺服端 beautifulsoup:解析伺服端回傳的網頁內容,也就是網頁原始碼。裡面內建的html解析套件,所分析出來的網頁原始碼有時候沒那麼準確,所以建議大家用lsml套件 lxml:解析xml、html原始碼的強大套件,解析出來的內容相對準確 第二步驟:網頁內容html原始碼的分析 在要爬取的地方按下滑鼠右鍵>檢查,chrome瀏覽器就會開啟開發人員工具,當你滑鼠停在哪邊它就會變色,這就是你在網頁上的位置 要爬取「INSIDE硬塞網路趨勢觀察網站」文章標題:它的網頁原始碼是h3,它的class是post_title,那等下要爬取時就是用h3這個html的標籤,而且它的class是post_title,這樣就可以定位到這個網頁的所有文章標題 要爬取「INSIDE硬塞網路趨勢觀察網站」發布日期:它的位置是hli的標籤,它的class是post_date的標籤,所以等下定位的時候,就是利用這個方式進行定位 第三步驟:以visual studio code為例開發網頁爬蟲 建立demo的資料夾 在資料夾底下建立scraper.py的檔案(python的檔案) 引入所需要的套件: beautifulsoup request:發送請求到網頁伺服端 get:去查詢網址的網頁內容,括號內寫入要傳的網頁網址,發送請求給伺服端後,它就會把這個網址的網頁內容回傳給我們,所以回傳給我們就要利用一個變數把它接起來(response) 用print的方式來看一下這個網頁的內容➡️回傳html原始碼,上面都帶有資料 第四步驟:把資料丟到beautifulsoup裡面請它幫我們解析 建立一個beautifulsoup套件,把剛剛所得到的網頁原始碼,丟給它來建立一個soup物件,有這個soup物件我們就能利用它來進行元素的定位。beautifulsoup要指定一個解析器來幫助它解析html原始碼,所以後面要加lxml 【爬取文章標題】 首先要取到一整頁文章的標題,所以就可以用find取得文章的標題,丟給它建立一個soup套件。在第二步驟有看到這個網頁上的標題標籤是h3,class是post_title的類別,同樣用個變數接起來(title)。➡️取得一個文章標題。(若不想要這些html的標籤,就可以用beautifulsoup的getText的方法把html的標籤給去掉) 如果想要抓到多篇文章,就要寫find_all,找到所有只要標籤是h3、類別是post_title的標題,這時候print出來的東西➡️是一個串列包含多個文章,所以要用for迴圈的方式來讀取每一個標題的元素,再一一利用getText的方法把html的標籤給去掉(不喜歡空白可以用strip把空白清掉)➡️爬取所有文章標題 【爬取發布日期】…
amyamy
November 3, 2020
直播筆記

網頁爬蟲五個基本觀念

網頁爬蟲是網頁機器人,可以自動化模擬使用者,依照特定的模式與規則,爬取網頁的背後原始碼,就可以解析取得想要的資料,不一定要使用python才能實作,其他像java、C++、javascript,也可以開發,但python的語法比較簡潔,也有比較成熟的框架或套件可以使用,所以大部分通常使用python來開發。 網路的架構主要分用戶端(電腦、手機、平板)和伺服端。比如說,在瀏覽博客來網頁時,通常會點擊網頁來了解書本詳細內容,點擊動作背後會請求網址,這個網址就會回傳博客來伺服器,博客來收到這段網址的時候就會知道這個使用者想要看的書本內容是哪個網頁,它收到後就會開始處理,把網頁的原始碼內容回傳給用戶端,用戶端經過瀏覽器解析來顯示我們看到網頁的樣子。 兩個開發網頁爬蟲重要觀念:請求方法、等待回應 有兩個開發網頁爬蟲需要特別注意的地方,第一是請求方法,第二就是等待回應,用戶端如果要看網頁就是請求一個網址到伺服端,那請求方法分成:get(查詢)、post(新增)、put(修改)、delete(刪除),因為開發網頁爬蟲時是想查詢這個網址的網頁內容是什麼,通常都是使用get(查詢)來跟伺服端溝通。然後就是等待回應,要特別注意的地方是,伺服端不會馬上回應,會等待一些時間,如果等待回應的機制沒有處理好就開始進行爬取,可能在爬取時爬不到任何東西,可能是伺服端還沒處理完,原始碼也還沒到用戶端,所以在爬取時就爬不到任何東西,所以等待回應機制非常重要,通常有三種等待機制:sleep(強制等待)、implicit wait(隱式等待)、explicit wait(顯示等待)。sleep(強制等待)就是強迫網頁爬蟲暫停一定秒數;implicit wait(隱式等待)就是設定最長等待時間,但若伺服端提早處理完成,網頁爬蟲就不會等滿時間,直接往下執行;explicit wait(顯示等待)就是明確指定等待網頁上某個區塊、元件只要網頁原始碼處理完成,就算其他還沒載入完成,但要等的那個區塊已完成就會往下執行。這三個等待機制可以視情況來使用,若三個等待機制能處理適當,會提高爬蟲爬取效率。 三個常見的套件及框架:beautiful soup、selenium、scrapy 伺服端回應給用戶端的網頁原始碼是由許多標籤和標籤所形成的元素構成的,瀏覽器會知道它的擺放位置,是因為網頁是個階層結構。但要爬取的資料不是標籤,這時候就需要套件或框架來協助定位元素和去掉標籤。基本上使用python來開發網頁爬蟲時常見的有三種套件,分別有beautiful soup、selenium、scrapy。 beautiful soup對HTML及、XML的解析非常友善,容易入門,但只適用於靜態類型的網頁。現在有許多社群平台(ex. FB、IG)、電子商務網站,通常會透過滾動捲軸的方式讓網頁載入更多資料,beautiful soup就無法達到。這種情形就需要搭配selenium套件來進行爬取,因為selenium套件被用來設計進行網頁自動化測試,所以可以很實際模擬人類操作瀏覽器的動作,例如:開啟瀏覽器、滾動捲軸、輸入帳密或是點擊查詢按鈕等等,要爬取這樣的網站的話就非常適合搭配selenium套件進行操作,它最大特色是可以搭配javascript,所以才可以自動化滾動捲軸,讓網頁自動化載入更多的網頁內容進行爬取。scrapy框架比較適合大型爬蟲專案,因為他能夠爬取大量資料、具有非同步的功能,速度比較快、有效率,對於初學者來說會需要一段時間來學習。 最常見的網頁爬蟲開發流程 謝謝這週二下班讀書會的講師Mike,以下是他提供的相關學習資源:
amyamy
October 23, 2020