利用Python爬取淘寶商品信息

本文所實現的爬取淘寶商品信息將實現以下功能:
對于某個類別的淘寶商品的頁面

image.png

爬取這個商品名稱,比如“手機”搜索結果下的每個商品的信息,存儲到數據結構中,并能將其輸出顯示。

如下的輸出形式:

image.png

接下來,就看我們如何一步步實現這個小爬蟲的吧

分析

  • 目標:獲取淘寶搜索頁面的信息,提取其中的商品名稱和價格
  • 理解:
    淘寶的搜索接口
    翻頁的處理

首先分析搜索接口,
很容易我們就可以發現,

image.png

https://s.taobao.com/search?q=后面接我們的搜索詞就可以

我們再研究翻頁處理:
第二頁

image.png

第三頁

image.png

我們可以發現,s參數指定了搜索頁的跳轉,每48條記錄一次頁面跳轉。

有同學可能發現還會有其他很多的參數,這個我們先忽略,我們直接構造一個url,只包括搜索詞和搜索頁,看看能不能訪問到正確頁面:
比如
https://s.taobao.com/search?q=手機&s=48

我們將上述地址放到地址欄

image.png

發現可以正確訪問,所以我們現在就已經知道了如何確定訪問接口

設計程序結構

主要有三步

  • 步驟1:提交商品搜索請求,循環獲取頁面
  • 步驟2:對于每個頁面,提取商品名稱和價格信息
  • 步驟3:將信息輸出到屏幕上

首先我們對于上面研究出的搜索接口給出基本的代碼:

#CrowTaobaoPrice.py
import requests
import re

def getHTMLText(url):

    
def parsePage(ilt, html):


def printGoodsList(ilt):

        
def main():
    goods = '手機'
    depth = 3
    start_url = 'https://s.taobao.com/search?q=' + goods
    infoList = []
    for i in range(depth):
        try:
            url = start_url + '&s=' + str(48*i)
            html = getHTMLText(url)
            parsePage(infoList, html)
        except:
            continue
    printGoodsList(infoList)
    
main()

對于獲取頁面源碼的函數,我們已經寫過很多次了,就是利用requets庫抓取頁面

def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""

核心代碼

這個爬蟲最核心的地方就在于對商品信息的獲取,我們首先分析頁面的源代碼,我們搜索第一個商品的名字

image.png

基本上所有商品的信息,名稱,價格,月銷量都在這段數據結構里顯示,是嵌入在js代碼里的,所以我們就無法用bs4庫來提取。
但我們可以直接用re庫,正則表達式提取。
因為我們可以發現,所有的商品名稱都是
“title”:" "的格式,我們可以搜索確認一下:

image.png

我們搜索發現,正好是48條記錄,也就是48個商品的信息,所以直接匹配就可以把所所有商品名稱信息提取出來,是不是很簡單。
對于商品價格 和月銷量也是這么獲取的

def parsePage(ilt, html):
    try:
        plt = re.findall(r'\"price\"\:\"[\d\.]*\"',html)
        tlt = re.findall(r'\"title\"\:\".*?\"',html)
        mslt = re.findall(r'\"month_sales\"\:\"[\d\.]*\"',html)
        for i in range(len(plt)):
            price = eval(plt[i].split(':')[1])
            title = eval(tlt[i].split(':')[1])
            monthsales = eval(mslt[i].split(':')[1])
            ilt.append([price , title, monthsales])
    except:
        print("")

完整代碼

#CrowTaobaoPrice.py
import requests
import re

def getHTMLText(url):
    try:
        r = requests.get(url, 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'\"price\"\:\"[\d\.]*\"',html)
        tlt = re.findall(r'\"title\"\:\".*?\"',html)
        mslt = re.findall(r'\"month_sales\"\:\"[\d\.]*\"',html)
        for i in range(len(plt)):
            price = eval(plt[i].split(':')[1])
            title = eval(tlt[i].split(':')[1])
            monthsales = eval(mslt[i].split(':')[1])
            ilt.append([price , title, monthsales])
    except:
        print("")

def printGoodsList(ilt):
    tplt = "{:4}\t{:8}\t{:16}\t{:16}"
    print(tplt.format("序號", "價格", "商品名稱","月銷量"))
    count = 0
    for g in ilt:
        count = count + 1
        print(tplt.format(count, g[0], g[1],g[2]))
        
def main():
    goods = '手機'
    depth = 3
    start_url = 'https://s.taobao.com/search?q=' + goods
    infoList = []
    for i in range(depth):
        try:
            url = start_url + '&s=' + str(48*i)
            html = getHTMLText(url)
            parsePage(infoList, html)
        except:
            continue
    printGoodsList(infoList)
    
main()

結果:

image.png

小伙伴也可以更改這個程序去搜索各種不同的商品的信息啦

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,748評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,165評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,595評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,633評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,435評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,943評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,035評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,175評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,713評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,599評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,788評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,303評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,034評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,412評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,664評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,408評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,747評論 2 370

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,778評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,599評論 25 707
  • 以前從未感受過別人的眼光對自身而言是一種深切的感受,我雖明白別人的眼光同時也取決于自身,可還是稍許也有不適。 每一...
    穩兒閱讀 603評論 0 3
  • 早上起床,做好早飯,來不及吃了。裝好早飯午飯準備去上班。 走到臥室換衣服,旦旦跟著跑進來,媽媽你要干什么去? 我說...
    王莎莎2017閱讀 482評論 0 0
  • 我們叫她詩媽。 第一次見她,是在兩年前。那時我剛剛進入培訓部,華南三地分公司齊聚深圳,召開季度會。她是主持,一襲黑...
    隔壁村的教主閱讀 532評論 0 1