任務:把上週爬取每週文章的標題和發佈日期存到SQLite資料庫 前言 用Python網頁爬蟲取得資料後,最後一個步驟,會想把資料存到資料庫裡,今天以SQLite為例分享實作部分。 為什麼我要用SQLite? SQLite是非常輕量型的關聯式資料庫,所以比較適用於小型應用程式,比如APP,存放資料量沒那麼大的應用程式,也是跨平台資料庫,它和一般企業級資料庫(Mysql......),最不一樣的地方是企業級資料庫都會有server,server也就是資料庫,用戶端這邊通常就要安裝,這個資料庫的客戶端,有點像是小的驅動程式,那我們要存取資料庫的時候,就是要用客戶端去跟資料庫的server進行存取還有資料的操作。那SQLite資料庫非常簡單,就是安裝後,用戶端就可以直接執行,可以直接存取資料庫裡面的資料,簡單來講,一個資料庫就是一個檔案,雖然輕量型,但大部分.sql的語法都有支援,而且也是一個免費的資料庫。 第一步驟:安裝DB Browser for SQLite,用這個工具去建立資料庫 建立一個資料庫,然後在資料庫裡建立一個資料表,命名為post。在資料表裡定義儲存的欄位。先建立一個title的欄位,它的類型是text(字串),再建立一個來存發布日期的欄位publish,一樣定義類型是text(字串) 在爬蟲專案資料夾底下新建資料庫,存檔 第二步驟:使用python串列的資料結構來進行儲存,把資料打包成包裹 定義result串列,每次爬到標題和發佈日期後,就要把它存起來,存到串列裡。👩🏻💻results.append((title.getText().strip(),) + (published.getText().strip(),)) 把每一篇文章的標題和發佈日期打包成元組(tuple),如果只有一個值最後要加逗點,這樣python才知道這是一個元組(tuple) 把標題和發佈日期加入串列裡面(results.append),append是加入的意思(有for就會把每次標題和發佈日期全部都加入串列裡) 🔍元組的賦值:a,b = 1,…
任務:爬取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裡面請它幫我們解析…
網頁爬蟲是網頁機器人,可以自動化模擬使用者,依照特定的模式與規則,爬取網頁的背後原始碼,就可以解析取得想要的資料,不一定要使用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,以下是他提供的相關學習資源:
前言 哈囉,大家好,我是Teresa~爬蟲小專題的進度是上一集成功將Facebook的貼文載入,這集主軸就在蒐集貼文中有關於成效的資訊了。 其實在Google上搜尋相同的爬蟲目標,在各個網站中有很多程式碼可以參考,但Teresa真的是各種嘗試,卡了很多bug,挫折重重😰,還好後來隊友有幫助我修改程式碼,但還是希望總有一天能自己成功完成一個小專題。 上集回顧...... 爬蟲目標 抓取Facebook的貼文,展開貼文中所有留言與分享、表情符號數量,了解貼文的成效 達成方法 一、策略拆解 假設我想要手動取得這些資訊的話,會做出的行為有: 打開 Chrome 瀏覽器 開啟 Facebook 頁面並登入 點擊想分析的 Facebook 社團或粉絲專頁 將該社團或粉絲專頁的貼文載入 將貼文的留言展開…
前言 自從上集學完函數和迴圈之後,覺得光只有學習,都可以理解好像沒有什麼問題,但如果要應用的話,就會不知道從何開始,因此Teresa開始想要嘗試寫個小作品看看,因此之後 Python初學者學習筆記會朝著實作的方向前進,當成自我練習還有紀錄。 爬蟲介紹 提到 Python,最經典且絕對不能漏掉的應用莫過於爬蟲了,那什麼是爬蟲呢? ---它是一種可以「自動」抓取網頁資訊的程式 現在資訊的變動快速,當在 Google等瀏覽器上搜尋任一關鍵字,搜尋到的結果都成千上萬筆,但人一天所擁有的時間終歸只有24小時,想要處理一件事的時候,很難將前置資料調查得盡善盡美,且當相同的動作必須重複上百遍、上千遍的時候,必定會又累又無趣。這時候如果有「自動化」程式的幫助,處理事情的效率便會提高。對於爬蟲的應用可以到這個網站看看。 爬蟲目標 抓取 Facebook的貼文,展開貼文中所有留言、分享數以及表情符號數量,了解貼文的成效 達成方法 一、步驟拆解 Teresa曾聽會寫程式的人說過:「程式只是工具,想要開始寫程式要先知道如何解決問題,如果不知道問題的解法,是沒辦法將解法化為程式的。」 如果我今天經營Facebook社團或粉絲專頁,我會想要了解每篇發出去的貼文成效如何,除了一些後台可得到的資訊外,貼文的互動率是最可以反應出成效的方式了。而在Facebook上貼文與互動率有關的指標不外乎就是:按讚數、分享次數以及留言數。後續的貼文分析,包含是不是因為主題較吸引人或是文案寫得較好等影響該篇貼文的互動率的評估指標,就不在此深究。 因此,假設我想要手動取得這些資訊的話,會做出的行為有: 打開 Chrome 瀏覽器…