什么是python爬蟲?
很多人學(xué)習(xí)python編程語言之后耸袜,不知道爬蟲是什么友多,相信大家對“爬蟲”這個(gè)詞并不陌生,在不了解爬蟲的人群中堤框,就會覺得這是個(gè)很高端神秘的技術(shù)域滥。
如果我們把互聯(lián)網(wǎng)比作一張大的蜘蛛網(wǎng),數(shù)據(jù)便是存放于蜘蛛網(wǎng)的各個(gè)節(jié)點(diǎn)蜈抓,而爬蟲就是一只小蜘蛛骗绕,
沿著網(wǎng)絡(luò)抓取自己的獵物(數(shù)據(jù))爬蟲指的是:向網(wǎng)站發(fā)起請求,獲取資源后分析并提取有用數(shù)據(jù)的程序资昧;
從技術(shù)層面來說就是 通過程序模擬瀏覽器請求站點(diǎn)的行為酬土,把站點(diǎn)返回的HTML代碼/JSON數(shù)據(jù)/二進(jìn)制數(shù)據(jù)(圖片、視頻) 爬到本地格带,進(jìn)而提取自己需要的數(shù)據(jù)撤缴,存放起來使用。
python爬蟲原理
模擬用戶在瀏覽器或者App應(yīng)用上的操作叽唱,把操作的過程屈呕、實(shí)現(xiàn)自動化的程序,大致分為以下4個(gè)基本流程:
(1)發(fā)起請求
通過HTTP庫向目標(biāo)站點(diǎn)發(fā)起請求棺亭,也就是發(fā)送一個(gè)Request虎眨,請求可以包含額外的header等信息,等待服務(wù)器響應(yīng)镶摘。
(2)獲取響應(yīng)內(nèi)容
如果服務(wù)器能正常響應(yīng)嗽桩,會得到一個(gè)Response,Response的內(nèi)容便是所要獲取的頁面內(nèi)容凄敢,類型可能是HTML,Json字符串碌冶,二進(jìn)制數(shù)據(jù)(圖片或者視頻)等類型。
(3)解析內(nèi)容
得到的內(nèi)容可能是HTML,可以用正則表達(dá)式涝缝,頁面解析庫進(jìn)行解析扑庞,可能是Json,可以直接轉(zhuǎn)換為Json對象解析譬重,可能是二進(jìn)制數(shù)據(jù),可以做保存或者進(jìn)一步的處理罐氨。
(4)保存數(shù)據(jù)
保存形式多樣臀规,可以存為文本,也可以保存到數(shù)據(jù)庫栅隐,或者保存特定格式的文件塔嬉。
python爬蟲能干什么?
現(xiàn)在爬蟲可以做的事情非常多约啊,數(shù)據(jù)邑遏、信息佣赖、電影恰矩、資料等,你技術(shù)過關(guān)了憎蛤,愛咋爬咋爬外傅,仔細(xì)觀察,加上你如果認(rèn)真觀察俩檬,就會發(fā)現(xiàn)學(xué)習(xí)爬蟲的人越來越多萎胰,一點(diǎn)是互聯(lián)網(wǎng)對于信息數(shù)據(jù)的需求越來越多,第二點(diǎn)是Python這種強(qiáng)大又簡單的編程語言容易學(xué)習(xí)棚辽,而且世界上80%的爬蟲都是由它來完成的技竟,簡單、易上手是它的優(yōu)勢屈藐。
爬蟲的入門選擇Python最好的方法榔组,因?yàn)镻ython有很多應(yīng)用的方向,如后臺開發(fā)联逻、web開發(fā)搓扯、科學(xué)計(jì)算等等,但爬蟲對于初學(xué)者而言更友好包归,原理簡單锨推,幾行代碼就能實(shí)現(xiàn)基本的爬蟲,學(xué)習(xí)的過程更加平滑公壤,你能體會更大的成就感换可。
掌握基本的爬蟲后,你再去學(xué)習(xí)Python數(shù)據(jù)分析厦幅、web開發(fā)甚至機(jī)器學(xué)習(xí)锦担,都會更得心應(yīng)手。因?yàn)檫@個(gè)過程中慨削,Python基本語法洞渔、庫的使用套媚,以及如何查找文檔你都非常熟悉了。
如何學(xué)習(xí)python爬蟲磁椒?
對于新手來說堤瘤,爬蟲也許是非常復(fù)雜、技術(shù)門檻很高的事情浆熔。比如有人認(rèn)為學(xué)爬蟲必須精通 Python本辐,然后埋頭苦干學(xué)習(xí) Python 的每個(gè)知識點(diǎn)、狂敲各種代碼医增,直到很久之后慎皱,發(fā)現(xiàn)仍然爬不了數(shù)據(jù),又懊惱實(shí)在太難了叶骨;有的人則認(rèn)為先要掌握網(wǎng)頁的知識茫多,遂開始學(xué)習(xí)HTMLCSS,結(jié)果走了歪路忽刽,并在這條路上越走越遠(yuǎn)直到頭發(fā)掉光......
其實(shí)掌握正確的方法天揖,在短時(shí)間內(nèi)做到能夠爬取主流網(wǎng)站的數(shù)據(jù),其實(shí)非常容易實(shí)現(xiàn)跪帝,但建議你從一開始就要有一個(gè)具體的目標(biāo)今膊。
在這里給大家推薦的這本《python3網(wǎng)絡(luò)爬蟲開發(fā)實(shí)戰(zhàn)》的作者是崔慶才,靜覓博客的博主(https://cuiqingcai.com/)伞剑。
這本書涵蓋的知識范圍很廣斑唬,比如基礎(chǔ)的:
HTTP基本原理和網(wǎng)頁的基本原理。建議大家如果以代碼為生黎泣,至少多多少少都提前了解一點(diǎn)html恕刘。說不定實(shí)習(xí)的第一個(gè)任務(wù)就是制作某一個(gè)debug工具展示在網(wǎng)頁上。
會話和Cookies聘裁。實(shí)際上是網(wǎng)頁端認(rèn)證雪营。如果需要爬取需要登錄的頁面(比如微博),這個(gè)知識是必須要掌握的衡便。
正則表達(dá)式献起。正則表達(dá)式是各種編程語言之間通用的一套進(jìn)行字符串匹配和處理的一套定式。當(dāng)你需要在一個(gè)奇奇怪怪但又有點(diǎn)規(guī)律的字符串里提取出你想要的信息的時(shí)候镣陕,正則表達(dá)式是最有用的武器谴餐。
Python中的urllib和requests庫。常見的與網(wǎng)頁交互的方法都在這兩個(gè)庫中維護(hù)呆抑。
Python中的一些常見的解析庫岂嗓。因?yàn)镠TML是一種特殊的字符串,所以我們可能不需要那么累構(gòu)造正則表達(dá)式去匹配鹊碍,用一些通用的解析庫就可以把HTML解析出來更方便的拿到元素信息厌殉。其中名氣比較大的庫應(yīng)該是BeautifulSoup
Python中的數(shù)據(jù)存儲方式食绿。比如你想把爬取下來的數(shù)據(jù)存儲在哪里?txt, csv這樣的文件里公罕,當(dāng)時(shí)MySQL數(shù)據(jù)庫里器紧,或者一些KV存儲的架構(gòu)比如MongoDB或者Redis?
本書都對上述這些基礎(chǔ)的概念做了簡單的介紹楼眷。還有各種爬蟲場景和可能遇到的問題:
不需要登陸的頁面爬取铲汪。(這個(gè)應(yīng)該是最簡單的爬蟲項(xiàng)目了)
Ajax數(shù)據(jù)爬取。現(xiàn)在越來越多的網(wǎng)頁出于效率的考慮罐柳,都是Ajax異步加載數(shù)據(jù)掌腰,這樣可以提高用戶體驗(yàn),但對爬蟲來說需要額外處理一下张吉。
動態(tài)渲染頁面爬取齿梁。有時(shí)候不能直接在網(wǎng)頁源代碼上看到真正的HTML,這些HTML可能是訪問的時(shí)刻通過JavaScript渲染的芦拿。不過這個(gè)時(shí)候就可以通過模擬瀏覽器登錄來進(jìn)行操作士飒。最近幫理波特寫的一個(gè)爬蟲就是通過這種方式實(shí)現(xiàn)的查邢。
如何識別驗(yàn)證碼蔗崎。雖說驗(yàn)證碼的出現(xiàn)就是為了防止爬蟲抓取的,但當(dāng)然也是有辦法破解的扰藕。
代理的使用缓苛。當(dāng)我們需要大批量的高頻率的爬取信息的時(shí)候,有時(shí)候會被一些有反爬蟲機(jī)制的網(wǎng)站封掉IP邓深,這時(shí)候我們就需要把我們偽裝成一個(gè)新的IP來進(jìn)行繼續(xù)爬蟲操作未桥,這時(shí)候就需要代理來維護(hù)和管理自己的可用IP。
模擬登錄芥备。當(dāng)我們爬取一些需要登錄才能看到的信息的時(shí)候冬耿,就必須先模擬登錄,才能進(jìn)行進(jìn)一步的爬蟲操作萌壳。
App的爬取亦镶。上述的都是網(wǎng)頁端的爬蟲任務(wù),但是現(xiàn)在越來越多的信息都只能在手機(jī)上看到袱瓮,這種信息可不可以爬蟲獲取呢缤骨?本書對于這一部分也是有比較詳細(xì)的介紹和案例,甚至還有朋友圈的爬取尺借。事實(shí)上這塊我目前也不是很熟悉绊起,這也是我下一步要學(xué)習(xí)的地方。
難能可貴的時(shí)候燎斩,每次介紹新的概念和場景的時(shí)候虱歪,除了介紹概念蜂绎,作者都是附上實(shí)際操作的源碼。照著做可以很快的上手笋鄙。
最后還有兩個(gè)經(jīng)典的爬蟲框架荡碾,pyspider和scrapy,這兩個(gè)框架在進(jìn)行大批量的爬取可能會比較有幫助【肿埃現(xiàn)在我對這兩個(gè)框架也沒有研究過坛吁,還需要進(jìn)一步的學(xué)習(xí)。比如scrapy在分布式場景下的部署和應(yīng)用铐尚,本書都是有所涉及的拨脉。
?話不多說,直接來展示:
第1章 開發(fā)環(huán)境配置
1.1 Python 3的安裝
1.1.1 Windows下的安裝
1.1.2 Linux下的安裝
1.1.3 Mac下的安裝
1.2 請求庫的安裝
1.2.1 requests的安裝
1.2.2 Selenium的安裝
1.2.3 ChromeDriver的安裝
1.2.4 GeckoDriver的安裝
1.2.5 PhantomJS的安裝
1.2.6 aiohttp的安裝
1.3 解析庫的安裝
1.3.1 lxml的安裝
1.3.2 Beautiful Soup的安裝
1.3.3 pyquery的安裝
1.3.4 tesserocr的安裝
1.4 數(shù)據(jù)庫的安裝
1.4.1 MySQL的安裝
1.4.2 MongoDB的安裝
1.4.3 Redis的安裝
1.5 存儲庫的安裝
1.5.1 PyMySQL的安裝
1.5.2 PyMongo的安裝
1.5.3 redis-py的安裝
1.5.4 RedisDump的安裝
1.6 Web庫的安裝
1.6.1 Flask的安裝
1.6.2 Tornado的安裝
......
第2章 爬蟲基礎(chǔ)
2.1 HTTP基本原理
2.1.1 URI和URL
2.1.2 超文本
2.1.3 HTTP和HTTPS
2.1.4 HTTP請求過程
2.1.5 請求
2.1.6 響應(yīng)
2.2 網(wǎng)頁基礎(chǔ)
2.2.1 網(wǎng)頁的組成
2.2.2 網(wǎng)頁的結(jié)構(gòu)
2.2.3 節(jié)點(diǎn)樹及節(jié)點(diǎn)間的關(guān)系
2.2.4 選擇器
2.3 爬蟲的基本原理
2.3.1 爬蟲概述
2.3.2 能抓怎樣的數(shù)據(jù)
2.3.3 JavaScript渲染頁面
2.4 會話和Cookies
2.4.1 靜態(tài)網(wǎng)頁和動態(tài)網(wǎng)頁
2.4.2 無狀態(tài)HTTP
2.4.3 常見誤區(qū)
2.5 代理的基本原理
2.5.1 基本原理
2.5.2 代理的作用
2.5.3 爬蟲代理
2.5.4 代理分類
2.5.5 常見代理設(shè)置
第3章 基本庫的使用
3.1 使用urllib
3.1.1 發(fā)送請求
3.1.2 處理異常
3.1.3 解析鏈接
3.1.4 分析Robots協(xié)議
3.2 使用requests
3.2.1 基本用法
3.2.2 高級用法
3.3 正則表達(dá)式
3.4 抓取貓眼電影排行
第4章 解析庫的使用
4.1 使用XPath
4.2 使用Beautiful Soup
4.3 使用pyquery
第5章 數(shù)據(jù)存儲
5.1 文件存儲
5.1.1 TXT文本存儲
5.1.2 JSON文件存儲
5.1.3 CSV文件存儲
5.2 關(guān)系型數(shù)據(jù)庫存儲
5.2.1 MySQL的存儲
5.3 非關(guān)系型數(shù)據(jù)庫存儲
5.3.1 MongoDB存儲
5.3.2 Redis存儲
?第6章 Ajax數(shù)據(jù)爬取
6.1 什么是Ajax
6.2 Ajax分析方法
6.3 Ajax結(jié)果提取
6.4 分析Ajax爬取今日頭條街拍美圖
第7章 動態(tài)渲染頁面爬取
7.1 Selenium的使用 ???????
7.2 Splash的使用
7.3 Splash負(fù)載均衡配置
7.4 使用Selenium爬取淘寶商品
第8章 驗(yàn)證碼的識別
8.1 圖形驗(yàn)證碼的識別
8.2 極驗(yàn)滑動驗(yàn)證碼的識別
8.3 點(diǎn)觸驗(yàn)證碼的識別
8.4 微博宮格驗(yàn)證碼的識別
第9章 代理的使用
?9.1 代理的設(shè)置
9.2 代理池的維護(hù)
9.3 付費(fèi)代理的使用
9.4 ADSL撥號代理
9.5 使用代理爬取微信公眾號文章
第10章 模擬登錄
10.1 模擬登錄并爬取GitHub
10.2 Cookies池的搭建
第11章 App的爬取
11.1 Charles的使用
11.2 mitmproxy的使用
11.3 mitmdump爬取“得到”App電子書
信息
11.4 Appium的基本使用
11.5 Appium爬取微信朋友圈
11.6 Appium+mitmdump爬取京東商品
第12章 pyspider框架的使用
12.1 pyspider框架介紹
12.2 pyspider的基本使用
12.3 pyspider用法詳解
第13章 Scrapy框架的使用
13.1 Scrapy框架介紹
13.2 Scrapy入門
13.3 Selector的用法
13.4 Spider的用法
13.5 Downloader Middleware的用法
13.6 Spider Middleware的用法
13.7 Item Pipeline的用法
13.8 Scrapy對接Selenium
13.9 Scrapy對接Splash
13.10 Scrapy通用爬蟲
13.11 Scrapyrt的使用
13.12 Scrapy對接Docker
13.13 Scrapy爬取新浪微博
第14章 分布式爬蟲?
14.1 分布式爬蟲原理
14.2 Scrapy-Redis源碼解析
14.3 Scrapy分布式實(shí)現(xiàn)
14.4 Bloom Filter的對接
第15章 分布式爬蟲的部署
15.1 Scrapyd分布式部署
15.2 Scrapyd-Client的使用
15.3 Scrapyd對接Docker
15.4 Scrapyd批量部署
15.5 Gerapy分布式管理
由于文章內(nèi)容比較多宣增,篇幅不允許玫膀,部分未展示內(nèi)容以截圖方式展示。如有需要獲取完整的資料文檔的朋友點(diǎn)贊+評論《python3網(wǎng)絡(luò)爬蟲開發(fā)實(shí)戰(zhàn)》爹脾,即可免費(fèi)獲取帖旨。