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