Python 語(yǔ)言
大部分人學(xué) Python 都是作為第二語(yǔ)言來(lái)學(xué)的, 所以既然已經(jīng)有了其它語(yǔ)言的基礎(chǔ), 我就推薦 2 個(gè)小而美的教程, 百頁(yè)左右, 不啰嗦
先看完這 2 個(gè)教程其一, 就可以開始寫 Python 了... 遇到不明確的地方再去詳細(xì)了解, 比如 generator
, yield
等
HTML & CSS & JS
w3school 是入門基礎(chǔ), 要用爬蟲獲取數(shù)據(jù), 必須先了解 HTML 的結(jié)構(gòu)
爬蟲
網(wǎng)站爬蟲的大體思路是 :
- 模擬網(wǎng)站登錄請(qǐng)求
- 網(wǎng)絡(luò)請(qǐng)求獲取網(wǎng)頁(yè)源代碼
- CSS selector 或 xpath 選定需要的元素, 獲取內(nèi)容屬性等
- 結(jié)構(gòu)化數(shù)據(jù)并存儲(chǔ)到數(shù)據(jù)庫(kù)
- 定時(shí),并發(fā)執(zhí)行爬蟲
- 關(guān)于 iOS 的爬蟲, 可以參考我之前的文章 iOS 抓取 HTML ,CSS XPath 解析數(shù)據(jù)
Python 爬蟲
要寫一個(gè)爬蟲, 可以用一些基本的庫(kù), 也可以用爬蟲框架 :
基本庫(kù)
- Beautiful Soup : 從 HTML 獲取指定的節(jié)點(diǎn)及數(shù)據(jù)
- Requests: HTTP for Humans : 網(wǎng)絡(luò)請(qǐng)求庫(kù)
最核心的就是這 2 個(gè)模塊, 其它的數(shù)據(jù)存儲(chǔ), 定時(shí)任務(wù), 多線程等都是錦上添花
不錯(cuò)的教程
Python爬蟲利器一之Requests庫(kù)的用法
Python爬蟲利器二之Beautiful Soup的用法
Scrapy筆記11- 模擬登錄
Scrapy隨機(jī)更換User-Agent和實(shí)現(xiàn)IP代理池
爬蟲框架
由于公司原因, 我接觸的是 Scrapy
Scrapy 是一個(gè)相對(duì)成熟的框架, 多線程, 并發(fā)數(shù), 中間件, 超時(shí), 自定義 header, UA, 數(shù)據(jù)庫(kù)存儲(chǔ), Log, 部署 等等都有成熟的解決方案和示例, 這也是我選擇使用它的原因.
不錯(cuò)的教程
scrapy爬蟲框架教程(一)-- Scrapy入門
利用Scrapy爬取所有知乎用戶詳細(xì)信息并存至MongoDB(附視頻和源碼)
部署
在 Scrapy 官網(wǎng) 可以看到, 官方的部署指南,
- scrapy/scrapyd 用來(lái)本地部署
- Scrapinghub Platform 是一個(gè)類似 Heroku 的云平臺(tái), 專門部署 Scrapy 爬蟲
動(dòng)態(tài)頁(yè)面
- 有些頁(yè)面的數(shù)據(jù)是 JS 動(dòng)態(tài)加載的, 比如懶加載圖片, 滾動(dòng)加載更多等
- 此時(shí), 我們直接發(fā)送網(wǎng)絡(luò)請(qǐng)求獲取到的頁(yè)面, 并沒(méi)有執(zhí)行 JS 代碼, 所以懶加載的元素都尚為加載出來(lái), 我們需要下面 2 個(gè)庫(kù).
- Python 代碼控制 PhantomJS 加載頁(yè)面, 然后 Selenium 模擬用戶點(diǎn)擊, 滾動(dòng)屏幕, 觸發(fā)網(wǎng)頁(yè)中的 AJAX 加載更多內(nèi)容的請(qǐng)求, 等元素都加載完全, 再爬取數(shù)據(jù)
Selenium : web的自動(dòng)測(cè)試工具, 模擬點(diǎn)擊按鈕, 滾動(dòng)頁(yè)面等
PhantomJS : 沒(méi)有界面的瀏覽器
不錯(cuò)的教程
Python爬蟲利器五之Selenium的用法
Python爬蟲利器四之PhantomJS的用法
其它
1. 又或者, 你學(xué)習(xí)爬蟲只是想快捷的抓取數(shù)據(jù), 你可以嘗試下面的軟件(網(wǎng)站), 可以不用寫代碼, 可視化的編寫抓取數(shù)據(jù)的任務(wù)
2. 如果你沒(méi)有自己的服務(wù)器, VPS , 可以使用
mLab : 云 MongoDB 服務(wù)
Ref
最后
文章是我爬取 V2EX 的學(xué)習(xí)整理
我的 V2 爬蟲 : V2EX_Crawler