Ⅰ 【python3網路爬蟲開發實戰】使用Selenium爬取淘寶商品
本文介紹使用Selenium爬取淘寶商品信息,並保存至MongoDB。首先,需確保已安裝Chrome瀏覽器、ChromeDriver、Python的Selenium庫以及PhantomJS、Firefox和其對應Driver。接著,分析淘寶介面和頁面結構,發現通過構造URL參數,可直接抓取商品信息,無需關注復雜介面參數。頁面分析顯示,商品信息位於商品列表中,通過跳轉鏈接可訪問任意頁的商品。使用Selenium獲取頁面源碼後,利用pyquery解析,提取圖片、名稱、價格、購買人數、店鋪名稱和店鋪所在地等信息,最終保存至MongoDB。
構造商品搜索URL,通過關鍵詞自定義,構造URL並使用Selenium抓取頁面。實現分頁邏輯,通過跳轉頁碼輸入框實現自動跳轉至所需頁。等待頁面載入,確保元素完全呈現後進行商品信息提取。解析頁面源碼,使用pyquery找到商品信息塊,遍歷提取圖片鏈接、價格、成交量等信息,構建商品字典,調用方法保存至MongoDB。
遍歷每頁商品,調用獲取方法並遍歷頁碼1至100,完成所有商品信息抓取。運行代碼,瀏覽器自動打開,輸出提取結果至控制台,檢查MongoDB中數據,確保成功存儲所有商品信息。支持Chrome Headless模式,從版本59開始啟用無界面模式,提升爬取效率。對接Firefox瀏覽器,只需更改瀏覽器對象創建方式。使用PhantomJS進行爬取,無需界面,優化爬取流程,可通過命令行配置,如設置緩存、禁用圖片載入,提高效率。
實現流程清晰,自動化程度高,適用於大規模商品信息抓取需求。通過Selenium與MongoDB結合,為電商數據分析與市場調研提供數據支持。關注公眾號獲取更多技術教程與實踐案例。
Ⅱ Python爬取淘寶商品信息並生成Excel
1前言後台有很多小夥伴私信問我關於python爬蟲的知識和學習資源,今天這篇文章就簡單介紹下python爬蟲的知識點,並以爬取淘寶網的商品信息存到excel表格中進行演示,同樣的本文的源碼會同步至github,歡迎下載使用。
2爬蟲相關知識在進行爬蟲之前,需要先了解一些關於爬蟲的基本知識。
首先我們需要先了解下爬蟲的基本原理:
基本的網頁請求的過程都可以分為以下兩個步驟:
1、Request(請求):每一個展示在用戶面前的網頁都必須經過這一步,也就是向伺服器發送訪問請求。
2、Response(響應):伺服器在接收到用戶的請求後,會驗證請求的有效性,然後向用戶(客戶端)發送響應的內容,客戶端接收伺服器響應的內容,將內容展示出來(即網頁),如下圖所示。
網頁請求的方式也分為兩種:
1、GET:最常見的方式,一般用於獲取或者查詢資源信息,也是大多數網站使用的方式,響應速度快。
2、POST:相比GET方式,多了以表單形式上傳參數的功能,因此除查詢信息外,還可以修改信息。
所以,在寫爬蟲前我們要先確定向誰發送請求,並且用什麼方式發送。
向誰發送請求,那我們就需要了解請求的url地址,以淘寶網的眼鏡的url為例:
https://s.taobao.com/search?q=%E7%9C%BC%E9%95%9C&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這里眼鏡中文被轉義了:
這里我們只需要知道q後面的值就是我們搜索的商品的名字就可以了,後面其他的參數這里暫時對我們沒用。
因為爬蟲並不只爬取一頁的信息,我們跳轉到下一頁:
可以發現s的值=44*(頁碼-1)。
接著ctrl+U組合鍵打開源碼,可以發現有一個g_page_config的json串,裡面的data值如下:
,"data":{"postFeeText":"運費","trace":"msrp_auction","auctions":[{"p4p":1,"p4pSameHeight":true,"nid":"536766094512","category":"","pid":"","title":"近視u003cspanclassu003dHu003e眼鏡u003c/spanu003e男有度數超輕全框u003cspanclassu003dHu003e眼鏡u003c/spanu003e框半框舒適可配u003cspanclassu003dHu003e眼鏡u003c/spanu003e防霧眼睛近視鏡","raw_title":"丹陽眼鏡眼鏡框眼鏡架眼睛框防輻射光學鏡","pic_url":"//g-search1.alicdn.com/img/bao/uploaded/i4/imgextra/i2/104870285060645671/TB2ulgla4vzQeBjSZPfXXbWGFXa_!!0-saturn_solar.jpg"這里postFeeText即為運費,raw_title為標題,pic_url即為展示圖片的地址,
view_price:運費;
nick:商鋪的名稱;
item_loc:地址;
view_sales:銷售量。
以上的數據即對應下面的這些信息:
請求方式可以F12,然後再network--->headers--->requestMethod找到:
在了解上面的基本內容之後我們就可以寫一個小型的爬蟲了,比如下面的代碼:
#導入requests包importrequestsurl='https://s.taobao.com/search?q=%E7%9C%BC%E9%95%9C&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'#Get方式獲取網頁數據strhtml=requests.get(url)print(strhtml.text)這樣就將頁面的內容獲取並以html的格式展示出來了。
使用requests庫請求網站載入庫使用的語句是import+庫的名字。在上述過程中,載入requests庫的語句是:importrequests。
用GET方式獲取數據需要調用requests庫中的get方法,使用方法是在requests後輸入英文點號,如下所示:
requests.get將獲取到的數據存到strhtml變數中,代碼如下:
strhtml=request.get(url)這個時候strhtml是一個URL對象,它代表整個網頁,但此時只需要網頁中的源碼,下面的語句表示網頁源碼:
strhtml.text3實戰接下來我們完整的爬取淘寶的信息,主要爬取的信息是:商品名稱、店鋪名稱、價格、地區、付款人數。
首先我們定義一個函數獲取請求的url:
#前面介紹q即為查詢的商品的名稱,所以這里定義為變數,方便後面重復使用defGeturls(q,x):url="https://s.taobao.com/search?q="+q+"&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"urls=[]urls.append(url)ifx==1:returnurlsforiinrange(1,x):url="https://s.taobao.com/search?q="+q+"&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="+str(i*44)urls.append(url)returnurls然後定義一個函數來獲取html的頁面:
defGetHtml(url):#這里的請求get請求r=requests.get(url,headers=headers)r.raise_for_status()r.encoding=r.apparent_encodingreturnr然後定義一個函數獲取商品的信息並插入excel:
首先介紹一個re庫:
re庫是python的標准庫
re庫採用rawstring類型表示正則表達式,表示為:r'test'
原生字元串(rawstring)是不包含轉義符的字元串。
Re庫主要功能函數如下:
這里我們使用findall()函數提取信息,比如:
a=re.findall(r'"raw_title":"(.*?)"',html)defGetandintoExcel(html):globalcount#商品名稱a=re.findall(r'"raw_title":"(.*?)"',html)#店鋪名稱b=re.findall(r'"nick":"(.*?)"',html)#商品價格c=re.findall(r'"view_price":"(.*?)"',html)#地區d=re.findall(r'"item_loc":"(.*?)"',html)#銷售量e=re.findall(r'"view_sales":"(.*?)"',html)x=[]foriinrange(len(a)):try:x.append((a[i],b[i],c[i],d[i],e[i]))exceptIndexError:breaki=0foriinrange(len(x)):worksheet.write(count+i+1,0,x[i][0])worksheet.write(count+i+1,1,x[i][1])worksheet.write(count+i+1,2,x[i][2])worksheet.write(count+i+1,3,x[i][3])worksheet.write(count+i+1,4,x[i][4])count=count+len(x)returnprint("數據爬取完成")主函數如下:
,"data":{"postFeeText":"運費","trace":"msrp_auction","auctions":[{"p4p":1,"p4pSameHeight":true,"nid":"536766094512","category":"","pid":"","title":"近視u003cspanclassu003dHu003e眼鏡u003c/spanu003e男有度數超輕全框u003cspanclassu003dHu003e眼鏡u003c/spanu003e框半框舒適可配u003cspanclassu003dHu003e眼鏡u003c/spanu003e防霧眼睛近視鏡","raw_title":"丹陽眼鏡眼鏡框眼鏡架眼睛框防輻射光學鏡","pic_url":"//g-search1.alicdn.com/img/bao/uploaded/i4/imgextra/i2/104870285060645671/TB2ulgla4vzQeBjSZPfXXbWGFXa_!!0-saturn_solar.jpg"0最後運行程序:
以上就是如何使用python爬取淘寶信息的內容,全部代碼如下:
(q,x):url="https://s.taobao.com/search?q="+q+"&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"urls=[]urls.append(url)ifx==1:returnurlsforiinrange(1,x):url="https://s.taobao.com/search?q="+q+"&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="+str(i*44)urls.append(url)returnurlsdefGetHtml(url):r=requests.get(url,headers=headers)r.raise_for_status()r.encoding=r.apparent_(html):globalcounta=re.findall(r'"raw_title":"(.*?)"',html)b=re.findall(r'"nick":"(.*?)"',html)c=re.findall(r'"view_price":"(.*?)"',html)d=re.findall(r'"item_loc":"(.*?)"',html)e=re.findall(r'"view_sales":"(.*?)"',html)x=[]foriinrange(len(a)):try:x.append((a[i],b[i],c[i],d[i],e[i]))exceptIndexError:breaki=0foriinrange(len(x)):worksheet.write(count+i+1,0,x[i][0])worksheet.write(count+i+1,1,x[i][1])worksheet.write(count+i+1,2,x[i][2])worksheet.write(count+i+1,3,x[i][3])worksheet.write(count+i+1,4,x[i][4])count=count+len(x)returnprint("數據爬取完成")if__name__=="__main__":count=0headers={"user-agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3987.149Safari/537.36","cookie":"t=;sgcookie=E100VfIm5WNNIHQbxK40GoWlA%2BiEh8%%3D%3D;tracknick=%5Cu5C0F%5Cu5C0F%5Cu5C0F%5Cu5C0F%5Cu54466;_cc_=UtASsssmfA%3D%3D;thw=cn;enc=l%%2F4%2FN%2FROmEcqBpM4Uk%2FlCcbvHxEX4HhA%3D%3D;cna=E7gdGOrz1lwCAXOs+dCyLVoL;_m_h5_tk=_1606566002810;_m_h5_tk_enc=;cookie2=;v=0;_tb_token_=0a7840e5536b;JSESSIONID=;alitrackid=www.taobao.com;lastalitrackid=www.taobao.com;hng=CN%7Czh-CN%7CCNY%7C156;xlly_s=1;_samesite_flag_=true;tfstk=-7AiGgoy0ZkfSPvIBC..;l=eBjdYUdPOiL-v4n5U62j-la_kmn;isg=BE5OFMfVnXt4DynJaP_rUvlZnyQQzxLJN80UA3iXutEM2-414F9i2fSZEwe3Qwrh"}q=input("你想爬取的商品是:")x=int(input("你想爬取幾頁數據:"))urls=Geturls(q,x)workbook=xlsxwriter.Workbook(q+".xlsx")worksheet=workbook.add_worksheet()worksheet.set_column('A:A',70)worksheet.set_column('B:B',40)worksheet.set_column('C:C',20)worksheet.set_column('D:D',20)worksheet.set_column('E:E',20)worksheet.write('A1','商品名稱')worksheet.write('B1','店鋪名稱')worksheet.write('C1','價格')worksheet.write('D1','地區')worksheet.write('E1','付款人數')xx=[]forurlinurls:html=GetHtml(url)s=GetandintoExcel(html.text)time.sleep(5)workbook.close()4再說一句:反爬蟲最後說一下爬蟲的合法性。幾乎每一個網站都有一個名為robots.txt的文檔,當然也有部分網站沒有設定robots.txt。對於沒有設定robots.txt的網站可以通過網路爬蟲獲取沒有口令加密的數據,也就是該網站所有頁面數據都可以爬取。如果網站有robots.txt文檔,就要判斷是否有禁止訪客獲取的數據。以網路為例,在瀏覽器中訪問https://www..com/robots.txt。
可以看到網路可以允許部分爬蟲訪問它的部分路徑,而對於沒有得到允許的用戶,則全部禁止爬取的,代碼如下:
,"data":{"postFeeText":"運費","trace":"msrp_auction","auctions":[{"p4p":1,"p4pSameHeight":true,"nid":"536766094512","category":"","pid":"","title":"近視u003cspanclassu003dHu003e眼鏡u003c/spanu003e男有度數超輕全框u003cspanclassu003dHu003e眼鏡u003c/spanu003e框半框舒適可配u003cspanclassu003dHu003e眼鏡u003c/spanu003e防霧眼睛近視鏡","raw_title":"丹陽眼鏡眼鏡框眼鏡架眼睛框防輻射光學鏡","pic_url":"//g-search1.alicdn.com/img/bao/uploaded/i4/imgextra/i2/104870285060645671/TB2ulgla4vzQeBjSZPfXXbWGFXa_!!0Ⅲ 【Python爬蟲】網頁抓取實例之淘寶商品信息抓取
Python爬蟲抓取淘寶商品信息的實例,可以通過調用API介面來實現,具體步驟如下:
獲取API調用許可權:
調用API介面:
解析API響應:
重點內容: 調用API介面:通過注冊獲取的key和密鑰,可以調用淘寶開放平台的API介面,獲取商品詳情信息。 解析sku信息:sku信息是商品不同規格下的詳細信息,通過解析這些信息,可以滿足多規格商品信息抓取的需求。
這種方法不僅適用於淘寶,也適用於其他類似電商平台的商品信息抓取,只要這些平台提供了相應的API介面。