您好,登錄后才能下訂單哦!
小編給大家分享一下Python如何通過正則庫爬取淘寶商品信息,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
使用正則庫爬取淘寶商品的商品信息,首先我們需要確定想要爬取的對象
我們在淘寶里搜索“python”,出來的結果
從url連接中可以得到搜索商品的關鍵字是“q=”,所以我們要用的起始url為:https://s.taobao.com/search?q=python
然后翻頁,經過對比發現,翻頁后,變化的關鍵字是s,每次翻頁,s便以44的倍數增長(可以數一下每頁顯示的商品數量,剛好是44)
所以可以根據關鍵字“s=”,來設置爬取的深度(爬取多少頁)
右鍵查看源碼,商品名稱可能的關鍵字是“title”和“raw_title”,進一步多看幾個商品的名稱,發現選取“raw_title”比較合適;商品價格自然就是“view_price”(通過比對淘寶商品展示頁面);所以商品名稱和商品價格分別是以"raw_title":"名稱"和"view_price":"價格",這樣的鍵/值對的形式展示的。
# coding:utf-8 import requests import re goods = '水杯' url = 'https://s.taobao.com/search?q=' + goods r = requests.get(url=url, timeout=10) html = r.text tlist = re.findall(r'\"raw_title\"\:\".*?\"', html) # 正則提取商品名稱 plist = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html) # 正則提示商品價格 print(tlist) print(plist) print(type(plist)) # 正則表達式提取出的商品名稱和商品價格都是以列表形式存儲數據的
利用for循環,把每個商品的名稱和價格組成一個列表,然后把這寫列表再追加到一個大列表中:
goodlist = [] for i in range(len(tlist)): title = eval(tlist[i].split(':')[1]) # eval()函數簡單說就是用于去掉字符串的引號 price = eval(plist[i].split(':')[1]) goodlist.append([title, price]) # 把每個商品的名稱和價格組成一個小列表,然后把所有商品組成的列表追加到一個大列表中 print(goodlist)
大概的思路就是這樣的。
def get_html(url): """獲取源碼html""" try: r = requests.get(url=url, timeout=10) r.encoding = r.apparent_encoding return r.text except: print("獲取失敗") def get_data(html, goodlist): """使用re庫解析商品名稱和價格 tlist:商品名稱列表 plist:商品價格列表""" tlist = re.findall(r'\"raw_title\"\:\".*?\"', html) plist = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html) for i in range(len(tlist)): title = eval(tlist[i].split(':')[1]) # eval()函數簡單說就是用于去掉字符串的引號 price = eval(plist[i].split(':')[1]) goodlist.append([title, price]) def write_data(list, num): # with open('E:/Crawler/case/taob2.txt', 'a') as data: # print(list, file=data) for i in range(num): # num控制把爬取到的商品寫進多少到文本中 u = list[i] with open('E:/Crawler/case/taob.txt', 'a') as data: print(u, file=data) 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(44 * i) # 因為淘寶顯示每頁44個商品,第一頁i=0,一次遞增 html = get_html(url) get_data(html, infoList) except: continue write_data(infoList, len(infoList)) if __name__ == '__main__': main()
以上是“Python如何通過正則庫爬取淘寶商品信息”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。