Python實現淘寶商品數據爬取——靜態網頁爬蟲(僅供學習,切勿無限制爬取)

一、關於淘寶網

淘寶網是亞太地區較大的網絡零售、商圈,由阿里巴巴集團在2003年5月創立。淘寶網是中國深受歡迎的網購零售平臺,擁有近5億的註冊用戶數,每天有超過6000萬的固定訪客,同時每天的在線商品數已經超過了8億件,平均每分鐘售出4.8萬件商品。

二、我們的目標是什麼?

1、爬取淘寶頁面某類商品的價格、名稱、店家地址、交易數量;
2、以列表的形式將每一個商品的數據存入.csv文件中;
3、實現與用戶的交互功能,不用修改程序也可以進行爬蟲;
4、打包程序,以方便更換設備時也可以使用。

三、淘寶網爬蟲思路

警告

警告:淘寶網的robots協議設定不允許爬蟲,本文僅供爬蟲學習,切勿對淘寶網進行大規模爬蟲,否則後果自負

爬蟲思路

淘寶網“每天的在線商品數已經超過了8億件,平均每分鐘售出4.8萬件商品”,如此巨大的數據量,如何在淘寶網上爬取下來呢?
其實,淘寶網的搜索功能就是一個“爬蟲”,通過鍵入“關鍵詞”,實現對服務器的訪問,返回你需要的商品序列。一般情況下,返回100頁,每頁48或60個商品。如下圖:返回頁數
1、我們需要做的是對每一頁進行遍歷,爬取每個商品的價格、名稱、店家地址、交易數量等數據。
2、這時候我們需要看看“源碼”(任意位置右鍵→查看網頁源代碼),淘寶網返回靜態網頁,採用html編寫,源碼如下圖:源碼
3、查看“上圖源碼”,我們發現:
價格數據爲"view_price":“8.50”;
名稱數據爲"raw_title":“愛好圓珠筆按壓式子彈頭油筆批發辦公學生用”
店家地址數據爲"item_loc":“浙江 溫州”
交易數量數據爲"view_sales":“1.0萬+人付款”
4、之後我們需要用python的re(正則表達式)庫對上述數據進行提取(關於正則表達式的編寫,大家可以看一下:正則表達式-菜鳥教程
5、提取完成之後,就是存儲的問題了,我們需要把提取出來的數據用特定格式存儲在我們的計算機中,本文采用的存儲格式是csv。
以上就是整個“淘寶網爬蟲”思路。

四、程序編寫

#--author--張俊傑@Nick
#coding:utf-8
import requests
import re
import time
import csv


def getHTMLText(url):
    try:
    #每次登陸淘寶,淘寶都會以加密方式返回登陸賬號和密碼信息,如果使用程序訪問的話,需要發送post請求,這時需要發送cookie,以實現自動登錄。請使用自己的cookie,複製到header字典中。
        header={"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
"cookie":“輸入你的cookie”}
        r = requests.get(url,headers=header,timeout = 30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""
    

def parsePage(ilt,html):
    try:
    #請百度搜索正則表達式的菜鳥教程,勤加練習,必有大成。
        plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"',html)
        tlt = re.findall(r'\"raw_title\"\:\".*?\"',html)
        loc = re.findall(r'\"item_loc\"\:\".*?\"',html)
        sale = re.findall(r'\"view_sales\"\:\"[\d\.]*.*?\"',html)
        for i in range(len(plt)):
            price = eval(plt[i].split(':')[1])
            title = eval(tlt[i].split(':')[1])
            location = eval(loc[i].split(':')[1])
            sales = eval(sale[i].split(':')[1])
            ilt.append([price,title,location,sales])
    except:
        print("")

def printGoodsList(ilt):
    tplt = "{:4}\t{:6}\t{:8}\t{:8}\t{:8}"
    print(tplt.format("序號","價格","商品名稱","商品地址","付款數量"))
    output_list=["序號","價格","商品名稱","商品地址","付款數量"]
    #存儲路徑需根據需要更改
    with open('C:/Users/你傑哥/Desktop/python/淘寶/'+str(goods)+'('+str(depth*48)+'條數據)'+'.csv',"a+",encoding='GB18030',newline='') as csvfile:
        	w=csv.writer(csvfile)
        	w.writerow(output_list)
        	csvfile.close()
    count=0
    for g in ilt:
        count = count+1
        print(tplt.format(count,g[0],g[1],g[2],g[3]))
        out_putlist=[count,g[0],g[1],g[2],g[3]]
         #存儲路徑需根據需要更改
        with open('C:/Users/你傑哥/Desktop/python/淘寶/'+str(goods)+'('+str(depth*48)+'條數據)'+'.csv',"a+",encoding='GB18030',newline='') as csvfile:
        	w=csv.writer(csvfile)
        	w.writerow(out_putlist)
        	csvfile.close()
    	

def main(goods,depth):
    start_url='https://s.taobao.com/search?q='+goods
    infoList =[]
    for i in range(depth):
        try:
            url = start_url + '&s='+ str(44*i)
           # 下面是我的網址簡化過程,最好學習一下。
#1、https://s.taobao.com/search?q=圓珠筆&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20190826&ie=utf8&p4ppushleft=1%2C48&s=0
#2、https://s.taobao.com/search?q=圓珠筆&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20190826&ie=utf8&p4ppushleft=1%2C48
#3、https://s.taobao.com/search?q=圓珠筆
#4、這個網址就可以實現我們需要的數據返回。
            html= getHTMLText(url)
            parsePage(infoList,html)
        except:
                continue
    #print(html)        
    printGoodsList(infoList)
    

#實現超級簡單的用戶交互,想爬取什麼就爬取什麼
goods=input("請輸入你需要搜索的商品:")
#本文僅供學習,爬蟲深度的設置,請理性設置
depth=int(input("請輸入需要爬取的頁數(請嘗試在淘寶中搜索該商品關鍵詞,查看返回頁碼,請理性設置爬蟲深度):"))
#傳參,需把外部參數傳入main函數中。
main(goods,depth)
#提醒
print("數據爬取結束")
time.sleep(10)

五、封裝TB.py成.exe文件

在TB.py同目錄下右鍵打開cmd,執行pyinstaller -F TB.py #TB.py爲編寫的python文件(如果不會封裝,請看我上一篇文章)打包TB.py

六、執行TB.exe文件

1、雙擊TB.exe;
2、輸入關鍵詞(比如圓珠筆)、爬蟲頁數(depth)(比如2);輸入關鍵詞、depth
3、爬蟲結束

爬蟲結束
4、爬蟲結果
爬蟲結果

七、總結

1、Python程序簡潔,各種第三方庫支持,爬蟲方便;
2、在初次爬取淘寶網時出現了“無法訪問”的問題,這是因爲程序訪問受限,需發送post請求,創建字典,發送User-Agent和cookie;
3、靜態網頁爬蟲需對網頁源代碼進行分析,確定數據位置和特徵;
4、正則表達式是一種非常簡便的數據匹配方式,請認真學習用法,勤加練習;
5、程序編寫、運行會遇到很多的問題,耐心解決;
6、淘寶網是不允許爬蟲的,所以此帖僅供學習爬蟲技術,不建議大家對淘寶網網頁進行大規模爬取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章