教你如何用Python爬蟲搜尋淘寶商品,生成操作日誌的系統!
/1 前言/
隨著網購的興起,使得很多傳統店鋪轉型做線上生意,電子商務的產生極大便利了我們的生活。
/2 專案目標/
通過Python程式一鍵搜尋並直達目的地,爬取淘寶商品連結,商品名稱,及商品的圖片連結,並將每次的操作 記錄在日誌檔案裡。
/3專案準備/
採用sublime text 3編輯器 編寫程式,先看看程式執行後的主介面:
/4專案實現/
1、分析頁面結構並將商品資訊放到各自列表中,就拿下面這個店鋪為例。
2、老樣子,F12 ,因為我們要找的是店鋪的商品連結,所以我們儘可能找多的商品,從店鋪的佈局來看,好像就寶貝推薦這個板塊的商品較多,所以,我們今天就爬這個板塊內的所有內容。
3、圖中的 1,2,3步即是我們要爬的商品各種資訊,可以看出商品全在class為photo的dt標籤內,所以我們需要將他們提取出來。
try: urllib3.disable_warnings() #從urllib3中消除警告 #網頁請求 rep=requests.get(self.e2.get(),verify=False,timeout=4) #證書驗證設為FALSE,設定訪問延時 rep.encoding='gbk' soup=BeautifulSoup(rep.content,'html.parser') result=soup.find_all('dt',class_='photo') #獲取到所有class為photo的dt元素 for x in result: tt=x.find_all('a') #獲取dt下的所有子元素a for y in tt: for x in y: ab=x.find_next_siblings('img') #獲取所有的下一個兄弟元素img for z in ab: \#將商品名稱和商品圖片連結新增到列表aa和bb中 aa.append(z['alt']) bb.append('https:'+z['data-ks-lazyload']) cc.append('https:'+y['href'])#將商品連結新增到列表cc中 except: return
這樣我們就輕鬆獲取到了,商品的連結,商品名,商品圖片連結,然後將他們分別儲存在aa,bb,cc列表中。
/5編寫GUI介面,互動友好/
為了使執行結果更加美觀,我們需要製作一個GUI介面,這就不得不提Python內建GUI神器 tkinter了。
好了,言歸正傳,我們編寫互動式介面可以將他封裝為一個類,這樣更美觀。
class page: def __init__(self): self.ti=dt.now().strftime("%Y/%m/%d %H:%S:%M") self.root= tk.Tk() #初始化視窗 self.root.title('淘寶獲取商家寶貝V1.0') #視窗名稱 self.root.geometry("700x700") #設定視窗大小 self.root.iconbitmap('q.ico') self.root.resizable(width=True,height=True) #設定視窗是否可變,寬不可變,高可變,預設為True \#建立標籤,文字,背景顏色,字型(顏色,大小),標籤的高和寬 self.label1 =tk.Label(self.root,text='店鋪首頁:',font=('宋體',10),width=12,height=2) \#建立輸入框,標籤高度,字型大小顏色,內容顯示方式 self.e2 = tk.Entry(self.root,width=30,show=None, font=('Arial', 12)) # 顯示成明文形式 self.label2 =tk.Label(self.root,text='淘寶直達:',font=('宋體',10),width=12,height=2) self.e1 = tk.Entry(self.root,width=30,show=None, font=('Arial', 12)) \#建立按鈕 內容 寬高 按鈕繫結事件 self.b1 = tk.Button(self.root, text='解析頁面', width=8,height=1,command=self.parse) self.b2 =tk.Button(self.root, text='生成excel', width=8,height=1,command=self.sc) self.b3 =tk.Button(self.root, text='淘寶搜尋', width=8,height=1,command=self.search) self.b4 =tk.Button(self.root, text='關閉程式', width=8,height=1,command=self.close) self.b5 =tk.Button(self.root, text='儲存日誌', width=8,height=1,command=self.log) \#建立文字框 self.te=tk.Text(self.root,height=40) self.label1.place(x=140,y=30,anchor='nw') self.label2.place(x=138,y=70,anchor='nw') \#將所有部件新增到介面中 self.e1.place(x=210,y=74,anchor='nw') self.e2.place(x=210,y=34,anchor='nw') self.b1.place(x=160,y=110,anchor='nw') self.b2.place(x=240,y=110,anchor='nw') self.b3.place(x=320,y=110,anchor='nw') self.b4.place(x=400,y=110,anchor='nw') self.b5.place(x=480,y=110,anchor='nw') self.te.place(x=40,y=170,anchor='nw') \#設定輸入框開始文字 self.e1.delete(0, "end") self.e1.insert(0, "請輸入要搜尋的商品") self.root.mainloop()
這樣就算是建立好GUI介面了,效果圖如下:
/6輸入目標店鋪首頁地址,生成資料並匯出Excel和記錄日誌/
1、通過輸入淘寶店鋪首頁地址來得到資料,所以我們需要對程式進行一個判斷處理,因為我們都是將他封裝在類中的,所以需在每個函式括號里加入一個self,程式碼如下:
# 解析網頁內容 def parse(self): self.res() if self.e2.get()=='': #判斷輸入框的值是否為空值 \#插入值到文字框 self.te.insert('insert',' 。。。。請 輸 入 網 址 。。。。\n') elif str(self.e2.get()).find('taobao.com')==-1 or aa=='': self.te.insert('insert',' 。。。。地址不正確 。。。。\n') else: self.te.insert("insert","解析目標網頁:%s\n\n"%self.e2.get()) self.te.insert("insert"," 。。。。。解 析 開 始 :。。。。。\n") #INSERT索引表示插入游標當前的位置 self.te.insert("insert","\n\n") for x,y,z in zip(aa,bb,cc): #將資料所在列表合併 result=x+'\n'+y+'\n'+z+'\n\n' self.te.insert("insert",result,"\n\n") #插入到文字框 self.te.insert("insert","\n\n") #插入空格 self.te.insert("end","解析完畢。。。。。\n")
2、生成Excel檔案,程式碼如下:
# 儲存結果到excel def sc(self): self.te.insert("insert"," 。。。。。開 始 生 成 :。。。。。\n") av={'時間':self.ti,'商品名稱':aa,'商品連結':cc,'商品圖片連結':bb} \#生成dataframe 多維陣列 df=p.DataFrame(av,columns=['時間','商品名稱','商品連結','商品圖片連結'],index=range(len(aa))) df.to_excel('22.xlsx', sheet_name='taobao') #生成excel self.te.insert("end"," 。。。。生 成 完 畢。。。。。\n")
程式碼執行之後,得到下圖效果:
3、生成日誌檔案,程式碼如下:
# 儲存日誌 def log(self): ss=str(self.te.get(0.0,'end')).split('\n') #分隔文字框內容 with open('1.txt','w',encoding='utf8') as f: #儲存日誌 for y in range(len(ss)): rea=str(self.ti)+ss[y]+'\n' f.write(rea)
程式碼執行之後,得到下圖效果:
/8 快捷搜尋淘寶商品網頁直達程式關閉/
要想一鍵搜尋淘寶商品首先我們的找到淘寶的搜尋地址,然後在進行get請求,給他傳不同的值即可。一般搜尋會涉及到一個關鍵字search。
這裡我們先找到淘寶的搜尋入口,地址為:
https://s.taobao.com/search?q=
然後再在後面傳值即可,因為我們是要在瀏覽器中瀏覽,所以需要使用webbrowser這個模組,專門負責訪問頁面,他的用法是webbrowser.open(url)。
所以程式碼如下:
# 搜尋商品 def search(self): self.te.insert("insert"," 。。。。。開啟瀏覽器 :。。。。。\n") wb.open('https://s.taobao.com/search?q='+self.e1.get()) #開啟 瀏覽器
最後就是關閉程式了。程式碼如下:
# 關閉程式 def close(self): self.te.insert("insert"," 。。。。。關閉程式 :。。。。。\n") self.root.destroy() #銷燬視窗
/9 小結/
1、不建議抓取太多資料,容易對伺服器造成負載,淺嘗輒止即可。
2、本文基於Python網路爬蟲,利用爬蟲庫,打造了一款簡易的智慧淘寶搜尋系統,並且可以操作生成日誌。
3、這個系統看似很簡單,實則對於新手小白是個不小的挑戰,甚至有些大佬也很容易掉坑,主要這個網頁分析有點複雜多變,而且還會有很多讓你蒙圈的異常。總的來說還是挺不錯的一個練手專案,也算是對自己的一個考驗吧,希望大家喜歡。
4 、 如果需要本文原始碼的點選這裡獲取
此文轉載文,著作權歸作者所有,如有侵權聯絡小編刪除!
原文地址:https://www.tuicool.com/articles/BFfQjur