網路爬蟲:Python+requests+re+xlwt 爬取淘寶商品並把價格和名字寫入Excel表格
由於學東西比較死,不夠靈活,學校的acm實驗室做演算法題,打比賽,我是真的跟不上那些大佬...就看到人以前實驗室退出的,加到 其他實驗室學習專案,做專案,做專案相對學習演算法來說,沒有那麼燒腦,還能做出有趣的東西....我就想學習做專案,因為打比賽我是拿不到能看的成績.....我們實驗室的指導老師,也挺為大家考慮的,讓喜歡打比賽的暑假集訓,繼續刷題,學習演算法,還為了,一部分人開設了專案組,進行機器學習,網路爬蟲.....哈哈,學了兩個月的python,正好有一些基礎,正好也想學習網路爬蟲,首先得感謝mooc上面的北京理工大學嵩天等老師開設的 python程式設計,和網路爬蟲課程,收益良多,起碼能用python做點cf的題了,還學習了爬蟲。。
在爬蟲課程裡面,模仿到嵩天老師的爬取淘寶的商品資訊,價格和名字,然後自己改了一部分,增加了存入excel表的功能,然後增加提示,增加使用者體驗感,雖然說還是有很多不足,但是對於小白來說,有這個程度很開心了....
爬蟲難點:需要對網頁裡面大量的網頁程式碼裡面找需要的資訊,用正則表示式提取出來,正則表示式,表示很頭疼...然後就是python基礎能夠是否靈活的運用,還有第三方庫的用法。
首先:分析網頁的搜尋介面,以便我們通過自己的輸入爬取對應的商品
可以發現搜尋介面是:
https://s.taobao.com/search?q= (後面就是自己輸入的商品名稱在呼叫這個介面)
我們一般會爬取不止一頁:所以需要翻頁,可以有上面圖片發現,每翻一頁,最後的&s=()是44的倍數,所以到時候翻頁的時候,就for 迴圈用變數自動翻頁。
這裡分享一下這裡自己的程式碼:僅供互相學習。
首先看下效果吧:
由於我是打包成可執行.exe檔案的就直接執行:如果是用的idle或者其他編譯器請在執行這份程式碼的路徑下尋找excel表。
爬完後儲存的是這個程式碼檔案的位置開啟後:
爬取成功也儲存了進來了,還可以對照這淘寶上搜索一下花卉,發現都有的。說明爬取非常成功!
貼一份原始碼供大家學習,切記爬取超大量資料!
import requests,re,xlwt #獲取頁面 def getHtml(url): try: r=requests.get(url,timeout=30) r.raise_for_status() r.encoding=r.apparent_encoding print("請求伺服器成功!\n") return r.text except: print("請求失敗") #解析頁面 正則表示式提取資訊 def parsePage(ilt,html): try: plt=re.findall(r'\"view_price\"\:\"[\d\.]*\"',html) tlt=re.findall(r'\"raw_title\"\:\".*?\"',html) print("解析成功!\n") for i in range(len(plt)): price=eval(plt[i].split(':')[1]) title=eval(tlt[i].split(':')[1]) ilt.append([price,title]) except: print("解析失敗!\n") #寫入Excel def Write_Excel(ilt): print("正在寫入Exel表格....") #建立工作簿指定編碼 file=xlwt.Workbook(encoding='utf-8') #建立表 table=file.add_sheet("淘寶商品資訊") count=0 #print(tplt.format("序號","價格","商品名稱")) value=["序號","價格","商品名稱"] for i in range(len(value)): table.write(count,i+1,value[i]) for g in ilt: count+=1 value=[count,float(g[0]),g[1][0:10]] for j in range(3): table.write(count,j+1,value[j]) #Write_Excel(count,value=[g[0],g[1]],f=file) file.save("淘寶商品資訊.xls") print("寫入成功!") #print(tplt.format(count,g[0],g[1])) #把資料寫入Excel表 def main(): goods=input("請輸入需要爬取的淘寶商品名稱:") #爬取的頁面深度 depth=int(input("請輸入爬取的頁面數量(建議不超過5頁):")) start_url="https://s.taobao.com/search?q="+goods inforList=[] for i in range(depth): try: #翻頁,起始頁面s,在a起始頁面上進行翻頁 url=start_url+'&s='+str(44*i) print("正在請求伺服器商品連結第%d頁,請稍等......"%(i+1)) html=getHtml(url) print("正在解析第%d頁,請稍等......"%(i+1)) parsePage(inforList,html) except: continue Write_Excel(inforList) #printGoodsList(inforList) main()