淘女郎爬蟲,可動(dòng)態(tài)抓取淘女郎的信息和照片。
分享之前我還是要推薦下我自己建的Python開發(fā)學(xué)習(xí)群:628979297,群里都是學(xué)Python開發(fā)的,如果你正在學(xué)習(xí)Python ,小編歡迎你加入,今天分享的這個(gè)案例已經(jīng)上傳到群文件,大家都是軟件開發(fā)黨,不定期分享干貨(只有Python軟件開發(fā)相關(guān)的),包括我自己整理的一份2018最新的Python進(jìn)階資料和高級開發(fā)教程,歡迎進(jìn)階中和進(jìn)想深入Python的小伙伴。
需要額外安裝的第三方庫
requests
pip install requests
pymongo
pip install pymongo
模塊功能
TaoLady.py: 負(fù)責(zé)發(fā)送POST請求和抓取個(gè)人信息和圖片地址并保存到MongoDB中。
Download_Pic.py: 負(fù)責(zé)從MongoDB中抽取出淘女郎照片的網(wǎng)址,并下載。
原理
淘女郎的網(wǎng)站使用了AJAX技術(shù)。通過在后臺與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,AJAX 可以使網(wǎng)頁實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁的情況下,對網(wǎng)頁的某部分進(jìn)行更新。這意味著通過直接抓取網(wǎng)頁源代碼然后分析出信息的方式是行不通的,因?yàn)榫W(wǎng)站是動(dòng)態(tài)加載的,直接抓取的方式只能抓到網(wǎng)頁原始的源代碼,并不能抓到動(dòng)態(tài)加載出的淘女郎的信息。
對于這一類網(wǎng)站,一般有兩種抓取辦法:
利用selenium庫來模擬瀏覽器的用戶行為,讓服務(wù)器以為是真正的用戶在瀏覽網(wǎng)頁,從而獲得完整的網(wǎng)頁源代碼
利用Chrome等瀏覽器自帶的分析工具,對網(wǎng)頁的Network進(jìn)行監(jiān)控,分析出數(shù)據(jù)交換的API,從而利用API抓取到數(shù)據(jù)交換的JSON數(shù)據(jù),從而進(jìn)行抓取。
一般來講,第一種方法速度較慢,并且運(yùn)行時(shí)占用較多的系統(tǒng)資源,所以,條件允許的情況下,盡量使用第二種方法。
在Chrome瀏覽器中打開淘女郎的主頁https://mm.taobao.com/search_tstar_model.htm? 按F12切換到開發(fā)者模式,在Network一欄選擇XHR可以看到目前沒有網(wǎng)絡(luò)活動(dòng),但是,在網(wǎng)頁中按下一頁的時(shí)候,會出現(xiàn)一個(gè)POST活動(dòng),當(dāng)再次按下下一頁的時(shí)候,會再次出現(xiàn)一次該活動(dòng),所以,可以斷定,數(shù)據(jù)交換使用的就是這個(gè)API。然后我們再來對比這兩次請求,在Headers框的FromData欄中,可以看到兩次請求的差別在currentPage的不同,一個(gè)是2,一個(gè)是3,這說明,要想得到第幾頁的數(shù)據(jù),這個(gè)currentPage的值就是多少。所以我們就根據(jù)這個(gè),來編寫請求,從而得到全部淘女郎信息的JSON文件。
發(fā)送請求,得到JSON數(shù)據(jù),將其加工并轉(zhuǎn)化為Python的字典類型返回
連接到MongoDB, 將信息保存
抽取出照片的網(wǎng)址,下載,保存在pic文件夾中
爬完了,成果斐然啊