淘寶商品列表以及商品詳情數據抓取 -开发者知识库

淘寶商品列表以及商品詳情數據抓取 -开发者知识库,第1张

前段時間老師讓我爬取淘寶的商品列表以及其商品詳情數據,期間遇到了很多問題。最困難的就是淘寶的價格數據是以Ajax異步加載的,這些數據暫時還沒有能力獲取到。

下面介紹一下基本思路。

首先,通過抓取商品列表的商品ID獲取商品的身份標識,然后根據商品ID跳轉到具體的商品列表,對其他屬性進行抓取。

觀察兩條商品列表的URL:

https://s.taobao.com/search?q=帽子&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.50862.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170806&bcoffset=7&ntoffset=7&p4ppushleft=1,48&s=0

https://s.taobao.com/search?q=帽子&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.50862.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170806&bcoffset=4&ntoffset=4&p4ppushleft=1,48&s=44

https://s.taobao.com/search?q=帽子&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.50862.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170806&bcoffset=4&ntoffset=4&p4ppushleft=1,48&s=88

這是前三個頁面的URL,可以發現,除了"q="和"s="后面的數據不一樣,其他的都是一樣的,因此,可以把URL簡化為:

https://s.taobao.com/search?q=keyword&s=pagenum

其中,q代表搜索的關鍵詞,s代表商品列表的頁數,0代表第一頁,44代表第二頁,88代表第三頁……

 先以此URL抓取商品的ID等信息。

代碼如下。

import re
import requests
from pandas import *
from collections import OrderedDict
def getDetails(startpage,endpage):
#如果需要爬取具體的商品詳情,頁數過多可能會出現異常,此函數可以用來控制一次爬取的頁數
url_head='https://s.taobao.com/search?q=帽子&s='
#這是淘寶搜索列表的url前面的相同部分,q=''代表搜索的關鍵詞,s=''代表第幾頁,s=0為第1頁s=44為第二頁,以此類推

url_list=[url_head str(i*44) for i in range(startpage-1,endpage)] #生成需要爬取的商品列表url

#定義存儲商品列表數據數據的列表
nid_list=[]
raw_title_list=[]
view_price_list=[]
view_sales_list=[]
item_loc_list=[]
for url in url_list:
resp=requests.get(url)
print(resp.url)
nid=re.findall(pattern='"nid":"(.*?)"',string=resp.text) #商品id,唯一,可以此跳轉到其商品詳情頁面,然后進行其他信息的抓取
raw_title=re.findall(pattern='"raw_title":"(.*?)"',string=resp.text) #商品名稱
view_price=re.findall(pattern='"view_price":"(.*?)"',string=resp.text) #商品價格
view_sales=re.findall(pattern='"view_sales":"(.*?)"',string=resp.text) #商品銷量
item_loc=re.findall(pattern='"item_loc":"(.*?)"',string=resp.text) #發貨地址

#逐個存儲
nid_list.extend(nid)
raw_title_list.extend(raw_title)
view_price_list.extend(view_price)
view_sales_list.extend(view_sales)
item_loc_list.extend(item_loc)

#生成數據框
dt={'商品id':nid_list,'商品名稱':raw_title_list,'商品價格':view_price_list,
'商品銷量':view_sales_list,'商品發貨地址':item_loc_list}

df=DataFrame(dt) #根據字典生成數據框
#寫入Excel
writer1=ExcelWriter("taobao_details.xlsx") #新建一個空白Excel工作簿
df.to_excel(writer1,"Sheet1") #將df寫入Sheet1工作表
writer1.save()

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复