1. 程式人生 > >網路爬蟲:Python+requests+re+xlwt 爬取淘寶商品並把價格和名字寫入Excel表格

網路爬蟲: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()