fbpx
直播筆記

Python網頁爬蟲—將資料存到SQLite資料庫

任務:把上週爬取每週文章的標題和發佈日期存到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, 2 第三步驟:寫入sq資料庫 sq資料庫內建在python裡面,直接👩🏻‍💻import sqlite3這個模組,接下來把網頁爬蟲專案連結到資料庫,用👩🏻‍💻conn =…
amyamy
November 10, 2020
直播筆記

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