|
作者 | 豬哥 出自 | 裸睡的豬(ID:IT--Pig)
一、淘寶登錄復(fù)習(xí)前面我們已經(jīng)介紹過了如何使用requests庫(kù)登錄淘寶,收到了很多同學(xué)的反饋和提問,豬哥感到很欣慰,同時(shí)對(duì)那些沒有及時(shí)回復(fù)的同學(xué)說聲抱歉! 順便再提一下這個(gè)登錄功能,代碼是完全沒有問題。如果你登錄出現(xiàn)申請(qǐng)st碼失敗的錯(cuò)誤時(shí)候,可以更換_verify_password方法中的所有請(qǐng)求參數(shù)。 在淘寶登錄2.0改進(jìn)中我們?cè)黾恿薱ookies序列化的功能,目的就是為了方便爬取淘寶數(shù)據(jù),因?yàn)槿绻阃粋€(gè)ip頻繁登錄淘寶的話可能就會(huì)觸發(fā)淘寶的反扒機(jī)制! 關(guān)于淘寶登錄的成功率,在豬哥實(shí)際的使用中基本都能成功,如果不成功就按上面的方法更換登錄參數(shù)! 二、淘寶商品信息爬取這篇文章主要是講解如何爬取數(shù)據(jù),數(shù)據(jù)的分析放在下一篇。之所以分開是因?yàn)榕廊√詫氂龅降膯栴}太多,而豬哥又打算詳細(xì)再詳細(xì)的為大家講解如何爬取,所以考慮篇幅及同學(xué)吸收率方面就分兩篇講解吧!宗旨還會(huì)不變:讓小白也能看得懂! 本次爬取是調(diào)用淘寶pc端搜索接口,對(duì)返回的數(shù)據(jù)進(jìn)行提取、然后保存為excel文件! 看似一個(gè)簡(jiǎn)單的功能卻包含了很多問題,我們來一點(diǎn)一點(diǎn)往下看吧! 三、爬取單頁數(shù)據(jù)開始寫一個(gè)爬蟲項(xiàng)目我們都需要量化后再分步,而一般第一步便是先爬取一頁試試! 1.查找加載數(shù)據(jù)URL我們?cè)诰W(wǎng)頁中打開淘寶網(wǎng),然后登錄,打開chrome的調(diào)試窗口,點(diǎn)擊network,然后勾選上Preserve log,在搜索框中輸入你想要搜索的商品名稱 這是第一頁的請(qǐng)求,我們查看了數(shù)據(jù)發(fā)現(xiàn):返回的商品信息數(shù)據(jù)插入到了網(wǎng)頁里面,而不是直接返回的純json數(shù)據(jù)! 2. 是否有返回純json數(shù)據(jù)接口?然后豬哥就好奇有沒有返回純json的數(shù)據(jù)接口呢?于是我就點(diǎn)了下一頁(也就是第二頁) 請(qǐng)求第二頁后豬哥發(fā)現(xiàn)返回的數(shù)據(jù)竟然是純json,然后比較兩次請(qǐng)求url,找到只返回json數(shù)據(jù)的參數(shù)! 通過比較我們發(fā)現(xiàn)搜索請(qǐng)求url中如果帶ajax=true參數(shù)的話就直接返回json數(shù)據(jù),那我們是不是可以直接模擬直接請(qǐng)求json數(shù)據(jù)! 所以豬哥就直接使用第二頁的請(qǐng)求參數(shù)去請(qǐng)求數(shù)據(jù)(也就是直接請(qǐng)求json數(shù)據(jù)),但是請(qǐng)求第一頁就出現(xiàn)錯(cuò)誤: 直接返回一個(gè)鏈接而 不是json數(shù)據(jù),這個(gè)鏈接是什么鬼?點(diǎn)一下。。。 鐺鐺鐺,滑塊出現(xiàn),有同學(xué)會(huì)問:用requests能搞定淘寶滑塊嗎?豬哥咨詢過幾個(gè)爬蟲大佬,滑塊的原理是收集響應(yīng)時(shí)間,拖拽速度,時(shí)間,位置,軌跡,重試次數(shù)等然后判斷是否是人工滑動(dòng)。而且還經(jīng)常變算法,所以豬哥選擇放棄這條路! 3.使用請(qǐng)求網(wǎng)頁接口所以我們只能選擇類似第一頁(請(qǐng)求url中不帶ajax=true參數(shù),返回整個(gè)網(wǎng)頁形式)的請(qǐng)求接口,然后再把數(shù)據(jù)提取出來! 這樣我們就可以爬取到淘寶的網(wǎng)頁信息了 四、提取商品屬性爬到網(wǎng)頁之后,我們要做的就是提取數(shù)據(jù),這里先從網(wǎng)頁提取json數(shù)據(jù),然后解析json獲取想要的屬性。 1.提取網(wǎng)頁中商品json數(shù)據(jù)既然我們選擇了請(qǐng)求整個(gè)網(wǎng)頁,我們就需要了解數(shù)據(jù)內(nèi)嵌在網(wǎng)頁的哪個(gè)位置,該怎么提取出來。 經(jīng)過豬哥搜索比較發(fā)現(xiàn),返回網(wǎng)頁中的js參數(shù):g_page_config就是我們要的商品信息,而且也是json數(shù)據(jù)格式! 然后我們寫一個(gè)正則就可以將數(shù)據(jù)提取出來了!
2.獲取商品價(jià)格等屬性要想提取json數(shù)據(jù),就要了解返回json數(shù)據(jù)的結(jié)構(gòu),我們可以將數(shù)據(jù)復(fù)制到一些json插件或在線解析
五、保存為excel操作excel有很多庫(kù),網(wǎng)上有人專門針對(duì)excel操作庫(kù)做了對(duì)比與測(cè)評(píng)感興趣可以看看:https:///M6D8AQnq 豬哥選擇使用pandas庫(kù)來操作excel,原因是pandas比較操作方便且是比較常用數(shù)據(jù)分析庫(kù)! 1.安裝庫(kù)pandas庫(kù)操作excel其實(shí)是依賴其他的一些庫(kù),所以我們需要安裝多個(gè)庫(kù)
2.保存excel
這里有點(diǎn)坑的是pandas操作excel沒有追加模式,只能先讀取數(shù)據(jù)后使用append追加再寫入excel! 查看效果
六、批量爬取一次爬取的整個(gè)流程(爬取、數(shù)據(jù)提取、保存)完成之后,我們就可以批量循環(huán)調(diào)用了。
這里設(shè)置的超時(shí)秒數(shù)是豬哥實(shí)踐出來的,從3s、5s到10s以上,太頻繁容易出現(xiàn)驗(yàn)證碼!
豬哥分多次爬取了兩千多條數(shù)據(jù)
七、爬取淘寶遇到的問題爬取淘寶遇到了非常多的問題,這里為大家一一列舉: 1.登錄問題
問題:申請(qǐng)st碼失敗怎么辦? 參數(shù)沒問題的話登錄基本都會(huì)成功! 2.代理池為了防止自己的ip被封,豬哥使用了代理池。爬取淘寶需要高質(zhì)量的ip才能爬取,豬哥試了很多網(wǎng)上免費(fèi)的ip,基本都不能爬取。
但是有一個(gè)網(wǎng)站的ip很好 站大爺:http://ip./dayProxy.html ,這個(gè)網(wǎng)站每小時(shí)都會(huì)更新一批ip,豬哥試過還是有很多ip是可以爬取淘寶的。 3.重試機(jī)制為了防止正常請(qǐng)求失敗,豬哥在爬取的方法上加上了重試機(jī)制!
需要安裝retry庫(kù)
4.出現(xiàn)滑塊上面那些都沒問題,但是還是會(huì)出現(xiàn)滑塊,豬哥測(cè)試過很多次,有些爬取20次-40次左右最容易出現(xiàn)滑塊。
出現(xiàn)滑塊只能等個(gè)半小時(shí)后繼續(xù)爬,因?yàn)槟壳斑€不能使用requests庫(kù)解決滑塊,后面學(xué)習(xí)selenium等其他框架看看是否能解決! 5.目前這只爬蟲目前這只爬蟲并不完善,只能算是半成品,有很多可以改進(jìn)的地方,比如自動(dòng)維護(hù)ip池功能,多線程分段爬取功能,解決滑塊問題等等,后面我們一起來慢慢完善這只爬蟲,使他可以成為一只完善懂事的爬蟲! |
|
|