當前位置:首頁 » 存儲配置 » 爬蟲數據存儲到不同表格

爬蟲數據存儲到不同表格

發布時間: 2025-05-09 10:52:30

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爬取和分析新浪微博(一):scrapy構建新浪微博榜單、博主及微博信息爬蟲

爬蟲項目介紹

本項目基於Python的Scrapy框架,採用隨機用戶代理和IP代理等反爬技巧,將收集到的微博領域數據、各領域榜單博主信息和博主的微博信息分別存入MySQL資料庫的相應表格。

查看完整代碼請訪問GitHub:

爬蟲邏輯

2.1 獲取微博領域信息

首先,爬取V影響力榜上所有微博領域名稱及其對應的各領域微博榜單鏈接。

2.2 獲取各領域榜單博主信息

進入各領域排行榜頁面(如互聯網榜),抓取4月月榜排名前100的博主信息。

分析網頁得知,博主信息通過單獨請求json文件獲取。

請求的URL地址為:v6.bang.weibo.com/aj/we...

URL中__rnd欄位的值由請求時間戳生成。

使用POST請求,並在表單中包含type、date、domainId等欄位。

編寫請求代碼如下:

2.3 獲得博主個人主頁和發表微博信息

收集每個博主的昵稱、ID、粉絲數、關注數、微博數、性別、地址等信息後,進入博主的微博主頁,抓取最近60條微博信息(包括內容、發表日期、轉發/點贊/評論數等)。

請求博主主頁URL時需攜帶固定的cookie信息。

博主微博主頁分析發現,發表的微博內容通過單獨請求json文件獲取。

json文件的URL很長,包含domain、pl_name、page_id、script_uri等欄位。

請求方式為GET。

請求json文件後,將data值轉化為Scrapy的Selector子類,使用CSS或XPath選擇器獲取所需信息。

爬蟲代理設置

為了對抗微博的反爬策略,本項目使用隨機更換User-Agent和IP地址的方法。

3.1 隨機User-Agent

編寫RandomUserAgentMiddleware中間件,使用fake-useragent生成UserAgent實例,為每次請求隨機生成一個User-Agent。

具體代碼在GitHub上。

3.2 隨機IP

從蘑菇IP代理購買付費IP,生成API鏈接,處理返回的JSON文件提取IP信息,保存至MySQL資料庫。Scrapy每次請求時從資料庫隨機獲取一個有效IP。

通過變換IP地址發送請求,基本避免了被反爬。

爬取結果

非同步保存至MySQL資料庫,數據分別存入weibotopic、topicuser、weiboinfo三個表格。

weibotopic(38個領域):

topicuser(3648個用戶,有些領域榜單上可能不足100個用戶):

weiboinfo(115740條微博)

小結

以上介紹了基於V影響力榜單爬取新浪微博信息的爬蟲項目,代碼在GitHub上公開,歡迎查看、交流。

後續文章將對收集到的數據進行統計分析和可視化展示,期待進一步的探索。

㈢ Python實戰:爬取小紅書

本文提供一種方法,利用Python爬取小紅書平台,針對特定關鍵詞搜索相關筆記,並將結果以excel表格形式保存。所爬取的欄位包括筆記標題、作者、筆記鏈接、作者主頁地址、作者頭像以及點贊量。實驗結果顯示,每次運行爬蟲都能順利爬取數據,每次平均約200條筆記。遇到的技術難題在實驗過程中得到解決,使得該爬蟲具有較高的實用性。以下為使用不同關鍵詞搜索的示例結果。

以關鍵詞「繁花」為例,搜索後將數據保存至本地excel文件,打開查看發現筆記根據點贊量由高到低排列。

對於關鍵詞「上海旅遊」,搜索並保存至excel,打開查看發現同樣按照點贊量排序的筆記列表。

使用關鍵詞「春節」,搜索後保存至excel文件,同樣按照點贊量排序展示筆記。

本方法採用純模擬人操作的策略,避免觸碰小紅書的反爬機制,通過如下步驟實現爬取:打開小紅書主頁、登錄賬號、關鍵詞搜索、提取頁面數據、循環刷新頁面、數據處理去重排序、保存至excel文件。此方法確保了數據的可靠性和爬取過程的順利進行。

具體實現分為多個步驟,包括使用DrissionPage庫打開小紅書主頁、登錄賬號、設置關鍵詞、搜索結果處理、滑動頁面獲取數據、保存數據至excel文件等。此外,還包含細節優化,如自動調整excel表格列寬、處理數據類型轉換、刪除重復數據等。

為了幫助讀者更好地理解代碼邏輯,本文附帶了爬取過程的視頻錄屏,以及主函數代碼示例。最後,本文提供了一種以付費形式獲取代碼的方法,鼓勵對數據有價值的需求進行付費支持。歡迎關注「程序員coding」公眾號,獲取更多有價值的內容與交流。

熱點內容
源碼的移碼 發布:2025-05-09 21:25:01 瀏覽:753
ie內核緩存 發布:2025-05-09 21:19:35 瀏覽:544
第五人格伺服器錯誤是怎麼解決 發布:2025-05-09 21:14:24 瀏覽:512
壓縮系數z 發布:2025-05-09 21:01:51 瀏覽:652
雙開助手緩存的文件在哪 發布:2025-05-09 21:01:41 瀏覽:525
酒仙腳本 發布:2025-05-09 21:00:40 瀏覽:905
牙髓存儲 發布:2025-05-09 20:50:22 瀏覽:433
安卓如何看自己去過哪裡 發布:2025-05-09 20:37:23 瀏覽:695
電腦怎麼製作手機版的我的世界伺服器 發布:2025-05-09 20:36:45 瀏覽:533
免流腳本破解 發布:2025-05-09 20:33:49 瀏覽:182