###### tags: `web crawler`,`網路爬蟲`,`SQLite` # web crawler 實作--飛比價格(feebee)資料擷取,存取至SQLite **今天要來擷取feebee比價網上的資訊,再把擷取出來的資訊丟到SQLite裡面喔** <https://feebee.com.tw/> 先來張成果圖 ![](https://i.imgur.com/TNzlPQl.jpg) **SQLite** * 輕量級的關聯式資料庫 * Python內建,操作SQLite不需安裝任何套件 * 功能完整,支援SQL標準語法 * 建議安裝圖形化介面軟體方便資料庫操作與維護 **SQLite應用步驟** * import sqlite3 #載入SQLite * conn=sqlite3.connect(“資料庫名稱”)# conn為資料庫連線物件 * conn.execute(“CREATE/INSERT/DELETE/SELECT/UPDATE”)# 建立/新增/刪除/查詢/更新資料表 * conn.commit() #將緩衝區的資料寫入 * conn.close() #關閉資料庫 查找user-agent網址,每個電腦都不一樣喔 複製此網址<http://httpbin.org/user-agent>把自己專屬的user-agent複製貼到程式碼第16行後面雙引號裡即可 網頁解析 ![](https://i.imgur.com/Ca38qm8.jpg) ![](https://i.imgur.com/Zvag2nY.jpg) ```python= import requests from bs4 import BeautifulSoup import sqlite3 #這是python內建的DB,直接import即可 myagent={"user-agent": "Mozilla/5.0 以下略"} #myagent記得改掉喔~ serch1=input("搜尋物件?? ") qty=input("幾筆資料?? ") DB=sqlite3.connect(serch1+".db") #連接到sqlite3 #以下為資料庫語法,建立一個table,"id"(為自動產生的PRIMARY KEY),"product","price","shop","link" DB.execute("CREATE TABLE goods(id INTEGER PRIMARY KEY AUTOINCREMENT, product TEXT, price INTEGER, shop TEXT,link TEXT)") DB.commit() page=1 #抓多頁變數 count=1 #計數 checK=True while checK: url="https://feebee.com.tw/s/"+serch1+"?page="+str(page) rq1=requests.get(url,headers=myagent).text rq2=BeautifulSoup(rq1,"html5lib") items=rq2.find("ol") for items in rq2.find_all("li"): try: data=DB.execute("SELECT * FROM goods WHERE product=?",(items.find("h3").text.strip(),))#資料庫語法 if data.fetchone()==None: ''' fetchone() 返回單個的元組,也就是一條記錄(row),如果沒有結果,則返回None fetchall() 返回多個元組,即返回多個記錄(rows),如果沒有結果,則返回() ''' serchlist=[] serchlist.append(items.find("h3").text.strip()) #品項 serchlist.append(items.find("a")["data-price"]) #品項價格 serchlist.append(items.find("span","shop").span.text) #品項商家 serchlist.append(items.find("a")["href"]) #連結 DB.execute("INSERT INTO goods (product, price, shop, link) VALUES (?,?,?,?)",serchlist) DB.commit() if count>=int(qty): checK=False #結束無限迴圈![](https://i.imgur.com/Lti0ahy.jpg) break count+=1 else: print("這筆資料重複了!!") except: continue page+=1 DB.close() ``` **結果** ![](https://i.imgur.com/4WAGfrS.jpg) ![](https://i.imgur.com/fawUkK0.jpg)