Python爬取淘宝商品价格销量信息
生活随笔
收集整理的這篇文章主要介紹了
Python爬取淘宝商品价格销量信息
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
用到了requests庫和re庫?
import requests import re lis = [] # https://s.taobao.com/search?q=榮耀v20&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306 # https://s.taobao.com/search?q=榮耀v20&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=3&ntoffset=3&p4ppushleft=1%2C48&s=44 # https://s.taobao.com/search?q=榮耀V20&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=3&ntoffset=3&p4ppushleft=1%2C48&s=88 kv = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36","Cookie":'換成自己的Cookie' }# 獲取html頁面 def getHTMLpages(url):try:r = requests.get(url, headers=kv, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ""# 將商品信息存入列表 def getGoodsinfo(lis, html):# "raw_title":"honor/榮耀 榮耀play 微商手機(jī) 營銷手機(jī) 小V 不凡 霸屏推"# "view_price":"6280.00"# "view_sales":"7人付款"或者"2.0萬+人付款"或者"6000+人付款"title = re.findall(r'\"raw_title\"\:\".*?\"', html) # .字符,*0或n次擴(kuò)展,?表示最小匹配price = re.findall(r'\"view_price\"\:\"[\d.]*\"',html) # [\d.]*表示0-9或者.的0次或者多次取值sales = re.findall(r'\"view_sales\"\:\"[\d\.]*[\u4e00-\u9fa5]?\+?人付款\"',html) # [\u4e00-\u9fa5]表示中文字符for i in range(len(title)):tit = eval(title[i].split(':')[1])pri = eval(price[i].split(':')[1])sal = eval(sales[i].split(':')[1])lis.append([tit, pri, sal])# return lis# 從列表中讀取商品信息 def printGoodsinfo(lis):form = "{:^2}\t{:<50}\t{:>8}\t{:>8},"print(form.format("序號", "商品名稱", "商品價格", "商品銷量", chr(12288)))# for i in range(len(lis)):# print("{:^3}\t{:^20}\t{:^10}\t{:^20}".format(i+1,lis[i][0],lis[i][1],lis[i][2],lis[i][3]))count = 1print()for i in lis: # i代表一行print(form.format(count, i[0], i[1], i[2], chr(12288)))count += 1if __name__ == "__main__":# f = open("D:\VscodePy\pytest\html.txt", encoding='utf-8')# sss = f.read()# f.close()s = input("請輸入要查詢的商品名稱:")start_url = "https://s.taobao.com/search?q=" + sprint(start_url)count = eval(input("請輸入要查詢的頁數(shù):"))for i in range(count):url = start_url + '&s=' + str(i * 44)html = getHTMLpages(url)# print(html)getGoodsinfo(lis, html)# getGoodsinfo(lis, sss)printGoodsinfo(lis)運(yùn)行結(jié)果:
注意: 同一個cookie和ip如果反復(fù)爬取,會被淘寶的反爬限制,會讓滑動驗證,這時候如果不想辦法解決這個滑動驗證,就會出現(xiàn)爬取數(shù)據(jù)為空的情況,因為你獲取到的網(wǎng)頁是滑動驗證頁面的網(wǎng)頁。我的做法是把一次爬取下來的網(wǎng)頁存放到一個文本文件里面,然后調(diào)試代碼時直接從那個文件讀取網(wǎng)頁代碼就行,這樣就不需要反復(fù)爬取了。上面貼的代碼是我調(diào)試后的最終代碼。
總結(jié)
以上是生活随笔為你收集整理的Python爬取淘宝商品价格销量信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正则表达式常用函数
- 下一篇: 爬取股票信息(股票代码+价格)