隨著5G的落地,網(wǎng)速越來(lái)越快,網(wǎng)上的信息也越來(lái)越多,但是無(wú)效、冗余的信息也更加泛濫。很多公司都需要特定專業(yè)的數(shù)據(jù),為公司的決策提供科學(xué)依據(jù)。比如爬取某部電影的評(píng)論,進(jìn)而分析觀眾的興趣點(diǎn);爬取羽絨服在各個(gè)銷售平臺(tái)的價(jià)格、銷量等,這就需要網(wǎng)絡(luò)爬蟲(chóng)的幫助了。因此各大互聯(lián)網(wǎng)公司都有數(shù)據(jù)分析部門(mén),而數(shù)據(jù)分析的前置工作,就是數(shù)據(jù)獲取,本質(zhì)上就是使用爬蟲(chóng)。
筆者是文科生,大學(xué)專業(yè)為工商管理。在機(jī)緣巧合之下,走上了自學(xué)編程的道路。在自學(xué)的過(guò)程中遇到過(guò)各式各樣的困難,遇到過(guò)許多難題。有時(shí)候一個(gè)簡(jiǎn)單問(wèn)題,就把我卡在那里幾天時(shí)間,無(wú)法繼續(xù)工作。做爬蟲(chóng),每一個(gè)新的網(wǎng)站爬取都是一個(gè)挑戰(zhàn)。因?yàn)槟悴恢狼懊嬗惺裁纯釉诘戎闳ゲ取?/p>
正是這個(gè)原因,激發(fā)了我的寫(xiě)作熱情,我想把自己的學(xué)習(xí)體會(huì)、開(kāi)發(fā)技巧分享出來(lái),讓讀者對(duì)現(xiàn)有網(wǎng)站的爬取方式有一個(gè)全面地了解。針對(duì)不同網(wǎng)站,選擇合適的爬取方式,用最省力的方法獲取數(shù)據(jù)。
本書(shū)特色
1.從零開(kāi)始,適合新手學(xué)習(xí)
對(duì)于只有代碼入門(mén)基礎(chǔ)的新手來(lái)說(shuō),看文檔學(xué)習(xí)使用工具是十分困難的一件事。因?yàn)閷?duì)代碼的不理解、沒(méi)有編程思維,看文檔簡(jiǎn)直就像是在看天書(shū)。另外大部分的最新文檔都是英文版的,國(guó)內(nèi)的中文文檔都是翻譯過(guò)來(lái)的,在翻譯過(guò)程中容易產(chǎn)生偏差。而本書(shū)基礎(chǔ)知識(shí)篇中,從各官方文檔中直接整理出爬蟲(chóng)爬取需要用到的部分。沒(méi)有繁雜啰唆的文字,用最簡(jiǎn)單的語(yǔ)言告訴你學(xué)習(xí)的重點(diǎn)知識(shí),讓你快速上手爬蟲(chóng)。在實(shí)戰(zhàn)階段,詳細(xì)介紹每一個(gè)步驟,便于理解,讓你也能靠自己寫(xiě)出爬蟲(chóng)。
2.實(shí)例豐富,解決各種爬蟲(chóng)問(wèn)題
網(wǎng)上很多爬蟲(chóng)的各種教程,大部分都是爬取豆瓣電影、招聘網(wǎng)站職位進(jìn)行分析。本書(shū)實(shí)戰(zhàn)項(xiàng)目挑選的都是網(wǎng)上少有人爬取的網(wǎng)站,讓你可以學(xué)習(xí)到各式各樣的爬取方式。
3.站得更高,設(shè)計(jì)自己的產(chǎn)品
本書(shū)除了教你如何爬取網(wǎng)站外,還有很多以爬蟲(chóng)為基礎(chǔ)的多功能設(shè)計(jì)教程,如爬蟲(chóng)機(jī)器人、爬蟲(chóng)網(wǎng)站、爬蟲(chóng)搜索功能。讓你在學(xué)會(huì)爬取技術(shù)的同時(shí),形成產(chǎn)品的思維去設(shè)計(jì)自己的產(chǎn)品。
本書(shū)內(nèi)容及體系結(jié)構(gòu)
第1~3章 環(huán)境搭建以及包的使用:介紹Python、Requests和Scrapy的安裝以及爬蟲(chóng)常用庫(kù)Requests和Scrapy的簡(jiǎn)單使用方法。用簡(jiǎn)單的例子和語(yǔ)言讓讀者順利搭建爬蟲(chóng)環(huán)境,但同時(shí)快速上手編寫(xiě)爬蟲(chóng)。
自動(dòng)化測(cè)試工具selenium:從事爬蟲(chóng)工作并不總是一帆風(fēng)順的?傆幸恍┚W(wǎng)站讓你什么辦法都沒(méi)有,源代碼中沒(méi)有數(shù)據(jù)、接口也加了密。這時(shí)候selenium是你最后的希望,它可以加載渲染JS幫助你獲取頁(yè)面的元素使之順利完成爬取。
第4章 數(shù)據(jù)庫(kù)的選擇:本章介紹了主流的幾個(gè)數(shù)據(jù)庫(kù),包括如何下載安裝和使用,涉及一些基本的查詢語(yǔ)句。讓讀者對(duì)MySQL和Mongodb有一個(gè)大致地了解,并學(xué)會(huì)兩個(gè)數(shù)據(jù)庫(kù)的基本使用方法。在讀者自己編寫(xiě)爬蟲(chóng)的時(shí)候可以根據(jù)自己的需要去選擇使用數(shù)據(jù)庫(kù)。
第5章 效率為王之分布式爬蟲(chóng):本章介紹了分布式爬蟲(chóng)的概念:將爬蟲(chóng)分布在多臺(tái)服務(wù)器上,同時(shí)介紹提高爬取效率的方式。并介紹了幾種分布式爬蟲(chóng)的實(shí)現(xiàn)方式,既有簡(jiǎn)單容易實(shí)現(xiàn)的,也有復(fù)雜高效的方式。讓讀者全面了解分布式爬蟲(chóng)的實(shí)現(xiàn)方式,并能親自實(shí)踐操作。
第6章 抓包分析:本章介紹如何利用工具對(duì)接口進(jìn)行抓包分析,找到爬取接口的方法。需要有瀏覽器抓包和軟件抓包。瀏覽器抓包是指使用瀏覽器自帶的network工具對(duì)接口進(jìn)行分析,找到目標(biāo)接口。軟件抓包是指通過(guò)fiddler工具對(duì)接口進(jìn)行分析,找到目標(biāo)接口。
第7章 Websocket通信網(wǎng)站爬。罕菊陆榻B了如何爬取使用Websocket通信協(xié)議的網(wǎng)站。使用Websocket通信協(xié)議的網(wǎng)站和一般網(wǎng)站不一樣,需要服務(wù)端和客戶端保持連接狀態(tài)才能獲取數(shù)據(jù),如聊天室。通過(guò)模擬口令的方式實(shí)現(xiàn)成功握手,保持長(zhǎng)連接接收網(wǎng)站的數(shù)據(jù)。
第8章 驗(yàn)證碼破解:驗(yàn)證爬蟲(chóng)必須面對(duì)的一道坎,你可以選擇繞過(guò)去也可以選擇正面跨過(guò)去。介紹了兩種從正面破解驗(yàn)證碼的方式。
第9章 多線程與多進(jìn)程并發(fā)爬。罕菊陆榻B如何使用多線程和多進(jìn)程去進(jìn)行并發(fā)爬取,提高爬蟲(chóng)效率。
第10章 爬蟲(chóng)接口優(yōu)化:爬蟲(chóng)爬取的數(shù)據(jù)有兩種保存方式,保存到數(shù)據(jù)庫(kù)和直接通過(guò)接口返回到前端。爬蟲(chóng)接口就是一種在線即時(shí)爬取數(shù)據(jù)并返回的接口。本章介紹如何對(duì)爬蟲(chóng)接口進(jìn)行優(yōu)化,使其支持高并發(fā)的訪問(wèn)和爬取。
第11章 使用Docker部署爬蟲(chóng):部署爬蟲(chóng)是指將爬蟲(chóng)放置在一個(gè)穩(wěn)定的環(huán)境中開(kāi)始工作。爬蟲(chóng)部署的方式有很多種,本章介紹使用Docker對(duì)爬蟲(chóng)進(jìn)行部署。
第12章 建立代理IP池:本章開(kāi)始進(jìn)入實(shí)戰(zhàn),演示爬取網(wǎng)站的整個(gè)過(guò)程。介紹防止爬蟲(chóng)被封的有效方式建立代理IP池。通過(guò)使用爬蟲(chóng)爬取免費(fèi)的代理來(lái)建立屬于自己的代理IP池,為爬取工作順利進(jìn)行提供強(qiáng)有力的支持。
第13章 爬取磁力鏈接:爬取磁力搜索網(wǎng)站,獲取想要的影視資源下載鏈接。將爬蟲(chóng)制作成自己的搜索小工具。
第14章 爬蟲(chóng)管家:利用QQbot制作一個(gè)監(jiān)控爬蟲(chóng)狀況的工具,定時(shí)檢查并發(fā)送消息通知。
第15章 數(shù)據(jù)可視化:爬蟲(chóng)爬取的數(shù)據(jù)量多且雜,十分不利于數(shù)據(jù)的整理分析。但將數(shù)據(jù)可視化處理之后,就可以全面了解數(shù)據(jù)背后的信息。
第16章 爬取貼吧中大學(xué)郵箱:從全國(guó)高校的貼吧清洗數(shù)據(jù)獲取郵箱。貼吧的帖子數(shù)據(jù)量大且雜,要從這些帖子中準(zhǔn)確無(wú)誤地清洗出郵箱。這是一個(gè)大項(xiàng)目,需要花費(fèi)數(shù)天完成爬取。
第17章 批量爬取企業(yè)信息:從一個(gè)第三方平臺(tái)中批量獲取企業(yè)的名稱,然后通過(guò)抓包工具獲取企業(yè)的搜索查詢接口爬取企業(yè)的詳細(xì)信息。
第18章 爬取公眾號(hào)歷史文章:公眾號(hào)是一個(gè)熱門(mén)的爬取對(duì)象,很多人都想獲得里面的文章用于轉(zhuǎn)載。本章通過(guò)微信PC端連接公眾號(hào),使用抓包工具獲取接口并爬取公眾號(hào)歷史文章。
第19章 異步爬蟲(chóng):本章介紹爬蟲(chóng)中的高效爬蟲(chóng)異步爬蟲(chóng)。異步爬蟲(chóng)作為一個(gè)更快速高效的爬蟲(chóng),無(wú)論是理解上和編寫(xiě)上都存在一定的難度。對(duì)于難度不大的網(wǎng)站,使用異步爬蟲(chóng)可以將爬取速度提升到極限。
第20章 漫畫(huà)網(wǎng)站的爬。罕菊陆榻B使用爬蟲(chóng)爬取漫畫(huà)網(wǎng)站漫畫(huà)。演示爬取單集、全集和全站漫畫(huà)的爬取。
第21章 給kindle推送爬取的小說(shuō):本章介紹一個(gè)簡(jiǎn)單的小任務(wù),爬取fate小說(shuō)并通過(guò)代碼推送到kindle中閱讀。
第22章 爬取游民星空壁紙:本章介紹爬取游民星空高清壁紙,通過(guò)分頁(yè)和篩選將PC壁紙和手機(jī)壁紙下載到本地。
第23章~第26章是一個(gè)爬蟲(chóng)網(wǎng)站項(xiàng)目:通過(guò)爬蟲(chóng)獲取電影網(wǎng)站的資源,然后重新整理和展示數(shù)據(jù),并整合成自己的網(wǎng)站。
本書(shū)讀者對(duì)象
Python初學(xué)者;
數(shù)據(jù)分析師;
金融證券從業(yè)人員;
編程愛(ài)好者;
大數(shù)據(jù)從業(yè)人員;
創(chuàng)業(yè)公司老板。
第一篇 基礎(chǔ)知識(shí)
第1章 Python環(huán)境搭建
1.1 Python的安裝 2
1.1.1 Windows下Python的安裝 2
1.1.2 Mac OS X下Python的安裝 3
1.1.3 Linux下Python的安裝 3
1.1.4 安裝pip工具 4
1.2 虛擬環(huán)境Virtualenv 5
1.2.1 Virtualenv的安裝 5
1.2.2 創(chuàng)建虛擬環(huán)境 5
1.2.3 激活虛擬環(huán)境 5
1.2.4 創(chuàng)建指定Python版本的虛擬環(huán)境 5
1.3 選擇合適的編輯器 6
1.3.1 Vim 6
1.3.2 Atom 6
1.3.3 Sublime Text 6
1.3.4 Notepad 6
1.3.5 Pycharm 6
第2章 常用爬蟲(chóng)庫(kù)Requests
2.1 安裝Requests 7
2.1.1 用pip安裝 7
2.1.2 用github源碼安裝 7
2.1.3 用curl安裝 7
2.2 了解 Requests的功能 8
2.2.1 使用GET和POST發(fā)送請(qǐng)求 8
2.2.2 通過(guò)URL傳遞參數(shù) 9
2.2.3 設(shè)置超時(shí) 9
2.2.4 查看返回內(nèi)容 9
2.2.5 設(shè)置請(qǐng)求頭 10
2.2.6 更多復(fù)雜的Post請(qǐng)求 10
2.2.7 返回對(duì)象狀態(tài)碼 12
2.2.8 設(shè)置代理IP 13
2.3 BeautifulSoup的安裝和使用 14
2.3.1 使用pip安裝BeautifulSoup 14
2.3.2 使用BeautifulSoup定位元素 14
2.4 初識(shí)自動(dòng)化測(cè)試工具Selenium 15
2.4.1 Selenium安裝 15
2.4.2 使用Selnium爬取網(wǎng)站 15
2.5 Selenium定位元素 16
2.5.1 通過(guò)屬性定位 17
2.5.2 通過(guò)xpath定位 17
2.6 Selenium反爬設(shè)置 18
2.6.1 設(shè)置請(qǐng)求頭 18
2.6.2 設(shè)置代理IP 19
第3章 常用爬蟲(chóng)框架Scrapy
3.1 認(rèn)識(shí)Scrapy 21
3.1.1 Scrapy爬取quotes簡(jiǎn)單示例 21
3.1.2 安裝所需依賴包 23
3.1.3 使用虛擬環(huán)境 23
3.2 Scrapy shell的使用 24
3.2.1 運(yùn)行shell 24
3.2.2 使用Scrapy shell爬取Scrapy.org 24
3.2.3 爬蟲(chóng)調(diào)用shell 26
3.3 使用Scrapy爬取quotes 26
3.3.1 創(chuàng)建Scrapy項(xiàng)目并新建爬蟲(chóng) 27
3.3.2 爬取和提取數(shù)據(jù) 27
3.3.3 通過(guò)腳本運(yùn)行Scrapy爬蟲(chóng) 29
3.3.4 在同一進(jìn)程下運(yùn)行多個(gè)爬蟲(chóng) 29
3.3.5 簡(jiǎn)易的分布式爬蟲(chóng)思路 30
3.3.6 防止爬蟲(chóng)被ban 31
3.4 setting基本配置 31
3.5 Pipeline模塊 32
3.5.1 爬取文字板塊 32
3.5.2 編寫(xiě)Pipeline模塊 35
3.5.3 通過(guò)Pipeline將數(shù)據(jù)寫(xiě)入MongoDB數(shù)據(jù)庫(kù) 36
3.5.4 ImagesPipeline處理圖片 37
3.5.5 FilePipeline下載文件 40
3.6 Middleware中間件 41
3.6.1 Downloader Middleware 41
3.6.2 隨機(jī)請(qǐng)求頭中間件 42
3.6.3 更換代理IP中間件 45
3.6.4 通過(guò)Downloader Middleware使用Selenium 46
3.6.5 Spider Middleware 47
3.7 新功能拓展 48
3.7.1 信號(hào)signals 48
3.7.2 自定義拓展 51
第4章 數(shù)據(jù)存儲(chǔ)數(shù)據(jù)庫(kù)的選擇
4.1 MySQL數(shù)據(jù)庫(kù) 53
4.1.1 MySQL的安裝 53
4.1.2 幾款可視化工具 54
4.1.3 數(shù)據(jù)庫(kù)連接 55
4.1.4 數(shù)據(jù)庫(kù)插入操作 55
4.1.5 數(shù)據(jù)庫(kù)查詢 56
4.1.6 數(shù)據(jù)庫(kù)更新操作 56
4.1.7 爬取寫(xiě)入數(shù)據(jù)庫(kù) 57
4.2 MongoDB數(shù)據(jù)庫(kù) 58
4.2.1 MongoDB安裝 58
4.2.2 連接數(shù)據(jù)庫(kù) 59
4.2.3 查詢數(shù)據(jù)庫(kù) 59
4.2.4 插入和更新數(shù)據(jù)庫(kù) 59
4.2.5 爬取數(shù)據(jù)并插入到MongoDB數(shù)據(jù)庫(kù)中 60
4.3 Redis數(shù)據(jù)庫(kù) 60
4.3.1 Redis安裝 60
4.3.2 連接Redis數(shù)據(jù)庫(kù) 61
4.3.3 Python操作Redis數(shù)據(jù)庫(kù) 61
4.3.4 爬取并寫(xiě)入Redis做緩存 62
第5章 效率為王分布式爬蟲(chóng)
5.1 什么是分布式爬蟲(chóng) 64
5.1.1 分布式爬蟲(chóng)的效率 64
5.1.2 實(shí)現(xiàn)分布式的方法 64
5.2 Celery 65
5.2.1 Celery入門(mén) 65
5.2.2 Celery分布式爬蟲(chóng) 66
5.3 使用Scrapy-redis的分布式爬蟲(chóng) 67
5.3.1 Scrapy-redis安裝與入門(mén) 67
5.3.2 創(chuàng)建Scrapy-redis爬蟲(chóng)項(xiàng)目 68
第6章 抓包的使用與分析
6.1 利用抓包分析目標(biāo)網(wǎng)站 72
6.1.1 如何抓包 72
6.1.2 網(wǎng)頁(yè)抓包分析 72
6.2 手機(jī)APP抓包 74
6.2.1 使用fiddler抓包 75
6.2.2 HTTPS證書(shū)安裝 75
6.2.3 booking手機(jī)端抓包 76
第7章 Websocket通信網(wǎng)站爬取
7.1 什么是Websocket 79
7.1.1 Websocket-clinet 79
7.1.2 Websocket-clinet簡(jiǎn)單入門(mén) 79
7.2 使用Websocket爬取財(cái)經(jīng)網(wǎng)站 81
第8章 驗(yàn)證碼破解
8.1 關(guān)于驗(yàn)證碼 84
8.1.1 一般的驗(yàn)證碼 84
8.1.2 極驗(yàn)驗(yàn)證 84
8.2 極驗(yàn)滑動(dòng)驗(yàn)證破解 85
8.2.1 準(zhǔn)備工具 85
8.2.2 分析滑動(dòng)驗(yàn)證碼 85
8.2.3 開(kāi)始破解極限滑動(dòng)驗(yàn)證碼 87
8.3 圖片驗(yàn)證碼破解 89
8.3.1 準(zhǔn)備工具 89
8.3.2 文字圖像識(shí)別 89
8.3.3 識(shí)別驗(yàn)證碼 90
第9章 多線程與多進(jìn)程并發(fā)爬取
9.1 多線程 92
9.1.1 堵塞與非堵塞 92
9.1.2 繼承threading.Thread創(chuàng)建類 96
9.1.3 多線程的鎖 98
9.1.4 queue隊(duì)列 100
9.1.5 線程池 101
9.2 多線程爬蟲(chóng) 103
9.2.1 爬蟲(chóng)框架 103
9.2.2 編寫(xiě)爬蟲(chóng) 104
9.2.3 以多線程方式啟動(dòng) 105
9.3 多進(jìn)程 107
9.3.1 multiprocessing模塊 107
9.3.2 通過(guò)Pool進(jìn)程池創(chuàng)建進(jìn)程 108
9.3.3 multiprocessing.Queue隊(duì)列 109
9.3.4 multiprocessing.Pipe管道 112
9.3.5 multiprocessing.Lock鎖 113
9.4 多進(jìn)程爬蟲(chóng) 114
9.4.1 多進(jìn)程爬取音頻 114
9.4.2 多進(jìn)程加多線程進(jìn)行爬取 116
第10章 爬蟲(chóng)接口優(yōu)化
10.1 Gunicorn的安裝與使用 119
10.2 Gunicorn配置 121
10.2.1 配置參數(shù) 121
10.2.2 通過(guò)config文件啟動(dòng) 123
第11章 使用Docker部署爬蟲(chóng)
11.1 Docker 125
11.1.1 Docker的安裝 125
11.1.2 Docker的鏡像 125
11.1.3 構(gòu)建自己的Docker鏡像 127
11.1.4 容器使用 127
11.1.5 Dockerfile 129
11.2 爬蟲(chóng)部署 130
11.2.1 爬蟲(chóng)接口 130
11.2.2 部署爬蟲(chóng)接口 131
第二篇 實(shí)戰(zhàn)案例
第12章 實(shí)戰(zhàn)1:建立代理IP池
12.1 爬取免費(fèi)代理IP 136
12.1.1 爬取代理IP 136
12.1.2 檢驗(yàn)代理IP 138
12.2 建立代理IP池 138
12.2.1 檢驗(yàn)代理IP 138
12.2.2 Redis消息隊(duì)列 140
12.2.3 master爬蟲(chóng) 142
第13章 實(shí)戰(zhàn)2:磁力鏈接搜索器
13.1 爬取磁力搜索平臺(tái) 145
13.1.1 磁力平臺(tái) 145
13.1.2 slave爬蟲(chóng) 146
13.2 實(shí)現(xiàn)磁力搜索器 148
13.2.1 展示與交互 148
13.2.2 數(shù)據(jù)查詢 150
第14章 實(shí)戰(zhàn)3:爬蟲(chóng)管家
14.1 QQ機(jī)器人 152
14.1.1 qqbot 152
14.1.2 基本操作 152
14.1.3 實(shí)現(xiàn)自己的機(jī)器人 153
14.2 爬蟲(chóng)監(jiān)控機(jī)器人 153
第15章 實(shí)戰(zhàn)4:數(shù)據(jù)可視化
15.1 可視化包Pyecharts 156
15.1.1 Pyecharts的安裝 156
15.1.2 地圖展示數(shù)據(jù) 157
15.2 爬取最低價(jià)機(jī)票數(shù)據(jù) 158
15.2.1 破解旅游網(wǎng)站價(jià)格日歷接口 159
15.2.2 爬取旅游網(wǎng)站 160
15.2.3 將數(shù)據(jù)可視化 161
第16章 實(shí)戰(zhàn)5:爬取貼吧中的郵箱
16.1 爬取網(wǎng)站 164
16.1.1 爬取高校名單 164
16.1.2 利用正則表達(dá)式匹配號(hào)碼 165
16.2 分析貼吧搜索頁(yè)面并提取號(hào)碼 165
16.3 使用Scrapy開(kāi)始編碼 167
16.3.1 創(chuàng)建貼吧Scrapy項(xiàng)目 167
16.3.2 新建爬蟲(chóng)并編寫(xiě)爬蟲(chóng)邏輯 168
16.3.3 數(shù)據(jù)處理 170
第17章 實(shí)戰(zhàn)6:批量爬取企業(yè)信息
17.1 從第三方平臺(tái)獲取企業(yè)名 172
17.2 如何爬取企業(yè)詳細(xì)信息 174
第18章 實(shí)戰(zhàn)7:爬取公眾號(hào)歷史文章
18.1 分析公眾號(hào)接口 177
18.1.1 開(kāi)始抓包 177