1、基本抓取網(wǎng)頁
get方法
post方法
2、使用代理IP
開發(fā)爬蟲過程中經(jīng)常會(huì)遇到IP被封掉的情況,這時(shí)就需要用到代理IP;
3、Cookies處理
cookies是某些網(wǎng)站為了辨別用戶身份、進(jìn)行session跟蹤而儲存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密
4、偽裝成瀏覽器
某些網(wǎng)站反感爬蟲的到訪,于是對爬蟲一律拒絕請求。所以用urllib2直接訪問網(wǎng)站經(jīng)常會(huì)出現(xiàn)HTTP Error 403: Forbidden的情況
對有些 header 要特別留意,Server 端會(huì)針對這些 header 做檢查
User-Agent 有些 Server 或 Proxy 會(huì)檢查該值,用來判斷是否是瀏覽器發(fā)起的 Request
Content-Type 在使用 REST 接口時(shí),Server 會(huì)檢查該值,用來確定 HTTP Body 中的內(nèi)容該怎樣解析。
5、頁面解析
對于頁面解析最強(qiáng)大的當(dāng)然是正則表達(dá)式,這個(gè)對于不同網(wǎng)站不同的使用者都不一樣,就不用過多的說明
6、驗(yàn)證碼的處理
對于一些簡單的驗(yàn)證碼,可以進(jìn)行簡單的識別。本人也只進(jìn)行過一些簡單的驗(yàn)證碼識別。但是有些反人類的驗(yàn)證碼,比如12306,可以通過打碼平臺進(jìn)行人工打碼,當(dāng)然這是要付費(fèi)的。
7、多線程并發(fā)抓取
單線程太慢的話,就需要多線程了,這里給個(gè)簡單的線程池模板 這個(gè)程序只是簡單地打印了1-10,但是可以看出是并發(fā)的。
雖然說python的多線程很雞肋,但是對于爬蟲這種網(wǎng)絡(luò)頻繁型,還是能一定程度提高效率的。
1. Cnblogs - 博客園爬蟲
? 使用Urllib庫實(shí)現(xiàn)博客園"最新文章"的爬取,可以自行擴(kuò)展為全站爬蟲,但是要注意它的接口。
2.Moments - 朋友圈爬蟲
? 基于自動(dòng)化測試工具Appium的微信朋友圈爬蟲,模擬登錄、抓取動(dòng)態(tài)、保存數(shù)據(jù)。
3.Bilibili - B站爬蟲
? 模擬登錄B站并識別滑動(dòng)驗(yàn)證碼。破解滑動(dòng)驗(yàn)證碼的思路主要沿襲崔大破解極驗(yàn)的思路,登錄、獲取驗(yàn)證碼Image對象、打碼平臺識別、本地轉(zhuǎn)化識別結(jié)果、Selenium模擬滑動(dòng)等。
4.DouYin - 抖音爬蟲
? 基于Mitmdump的抖音短視頻爬取,包括視頻名稱、作者名稱、獲贊數(shù)、轉(zhuǎn)發(fā)量等重要信息的獲取。
5.Crack_Jianshu - 簡書爬蟲
? 為了照顧簡書,完成了簡書的模擬登錄并識別簡書的點(diǎn)觸式驗(yàn)證碼,破解驗(yàn)證碼的思路基本與滑動(dòng)驗(yàn)證碼相同。
6.Selenium_163 - 網(wǎng)易163郵箱爬蟲
? 模擬登錄網(wǎng)易163郵箱,并發(fā)送SOS郵件。主要是為了對iframe子節(jié)點(diǎn)的訓(xùn)練。
7.City_58 - 58房屋信息爬蟲
? 使用Scrapy框架爬取58同城的出租房信息,并包含下級網(wǎng)頁數(shù)據(jù)的爬蟲,項(xiàng)目難度較大,可根據(jù)能力練習(xí)。
通過selenium 進(jìn)行仿人工登錄,利用python中的cv2模塊進(jìn)行滑塊認(rèn)證登錄,進(jìn)而提取網(wǎng)站信息,并保存
針對網(wǎng)站利用selenium 進(jìn)行登錄,獲得驗(yàn)證碼,通過圖像識別技術(shù)獲得驗(yàn)證碼中的文字,進(jìn)行自動(dòng)登錄,后獲得數(shù)據(jù)