###### 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)