python爬蟲入門,10分鐘就夠了碴倾,這可能是我見過最簡單的基礎教學

一逗噩、基礎入門

1.1什么是爬蟲

爬蟲(spider,又網(wǎng)絡爬蟲)跌榔,是指向網(wǎng)站/網(wǎng)絡發(fā)起請求异雁,獲取資源后分析并提取有用數(shù)據(jù)的程序。

從技術(shù)層面來說就是 通過程序模擬瀏覽器請求站點的行為僧须,把站點返回的HTML代碼/JSON數(shù)據(jù)/二進制數(shù)據(jù)(圖片纲刀、視頻) 爬到本地,進而提取自己需要的數(shù)據(jù)担平,存放起來使用示绊。


1.2爬蟲基本流程

用戶獲取網(wǎng)絡數(shù)據(jù)的方式:

方式1:瀏覽器提交請求--->下載網(wǎng)頁代碼--->解析成頁面

方式2:模擬瀏覽器發(fā)送請求(獲取網(wǎng)頁代碼)->提取有用的數(shù)據(jù)->存放于數(shù)據(jù)庫或文件中

爬蟲要做的就是方式2芥挣。

如果你不想錯過Python這么好的工具,又擔心自學遇到問題無處解決耻台,現(xiàn)在就可以Python的學習q u n 2270-435-450可以來了解一起進步一起學習!免費分享視頻資料

1

發(fā)起請求

使用http庫向目標站點發(fā)起請求空另,即發(fā)送一個Request

Request包含:請求頭盆耽、請求體等

Request模塊缺陷:不能執(zhí)行JS 和CSS 代碼

2

獲取響應內(nèi)容

如果服務器能正常響應,則會得到一個Response

Response包含:html扼菠,json摄杂,圖片,視頻等

3

解析內(nèi)容

解析html數(shù)據(jù):正則表達式(RE模塊)循榆、xpath(主要使用)析恢、beautiful soup、css

解析json數(shù)據(jù):json模塊

解析二進制數(shù)據(jù):以wb的方式寫入文件

4

保存數(shù)據(jù)

數(shù)據(jù)庫(MySQL秧饮,Mongdb映挂、Redis)或 文件的形式。

1.3http協(xié)議 請求與響應

http協(xié)議

Request:用戶將自己的信息通過瀏覽器(socket client)發(fā)送給服務器(socket server)

Response:服務器接收請求盗尸,分析用戶發(fā)來的請求信息柑船,然后返回數(shù)據(jù)(返回的數(shù)據(jù)中可能包含其他鏈接,如:圖片泼各,js鞍时,css等)

ps:瀏覽器在接收Response后,會解析其內(nèi)容來顯示給用戶扣蜻,而爬蟲程序在模擬瀏覽器發(fā)送請求然后接收Response后逆巍,是要提取其中的有用數(shù)據(jù)。

1.3.1

request

(1) 請求方式

常見的請求方式:GET / POST

(2)請求的URL

url全球統(tǒng)一資源定位符莽使,用來定義互聯(lián)網(wǎng)上一個唯一的資源 例如:一張圖片锐极、一個文件、一段視頻都可以用url唯一確定

(3)請求頭

User-agent:請求頭中如果沒有user-agent客戶端配置吮旅,服務端可能將你當做一個非法用戶host溪烤;

cookies:cookie用來保存登錄信息

注意:一般做爬蟲都會加上請求頭。

請求頭需要注意的參數(shù):

Referrer:訪問源至哪里來(一些大型網(wǎng)站庇勃,會通過Referrer 做防盜鏈策略檬嘀;所有爬蟲也要注意模擬)

User-Agent:訪問的瀏覽器(要加上否則會被當成爬蟲程序)

cookie:請求頭注意攜帶

(4)請求體

請求體 如果是get方式,請求體沒有內(nèi)容 (get請求的請求體放在 url后面參數(shù)中责嚷,直接能看到) 如果是post方式鸳兽,請求體是format data

ps:1、登錄窗口罕拂,文件上傳等揍异,信息都會被附加到請求體內(nèi) 2全陨、登錄,輸入錯誤的用戶名密碼衷掷,然后提交辱姨,就可以看到post,正確登錄后頁面通常會跳轉(zhuǎn)戚嗅,無法捕捉到post

1.3.2

response

(1)響應狀態(tài)碼

200:代表成功

301:代表跳轉(zhuǎn)

404:文件不存在

403:無權(quán)限訪問

502:服務器錯誤

(2)response header

響應頭需要注意的參數(shù):Set-Cookie:BDSVRTM=0; path=/:可能有多個雨涛,是來告訴瀏覽器,把cookie保存下來

(3)preview就是網(wǎng)頁源代碼

json數(shù)據(jù)

如網(wǎng)頁html懦胞,圖片

二進制數(shù)據(jù)等

02

二替久、基礎模塊

2.1requests

requests是python實現(xiàn)的簡單易用的HTTP庫,是由urllib的升級而來。

開源地址:

https://github.com/kennethreitz/requests

中文API:

http://docs.python-requests.org/zh_CN/latest/index.html

2.2re 正則表達式

在 Python 中使用內(nèi)置的 re 模塊來使用正則表達式躏尉。

缺點:處理數(shù)據(jù)不穩(wěn)定蚯根、工作量大

2.3XPath

Xpath(XML Path Language) 是一門在 XML 文檔中查找信息的語言,可用來在 XML 文檔中對元素和屬性進行遍歷胀糜。

在python中主要使用 lxml 庫來進行xpath獲嚷埂(在框架中不使用lxml,框架內(nèi)直接使用xpath即可)

lxml 是 一個HTML/XML的解析器僚纷,主要的功能是如何解析和提取 HTML/XML 數(shù)據(jù)矩距。

lxml和正則一樣,也是用 C 實現(xiàn)的怖竭,是一款高性能的 Python HTML/XML 解析器锥债,我們可以利用之前學習的XPath語法,來快速的定位特定元素以及節(jié)點信息痊臭。

2.4BeautifulSoup

和 lxml 一樣哮肚,Beautiful Soup 也是一個HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 數(shù)據(jù)广匙。

使用BeautifulSoup需要導入bs4庫

缺點:相對正則和xpath處理速度慢

優(yōu)點:使用簡單

2.5Json

JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式允趟,它使得人們很容易的進行閱讀和編寫。同時也方便了機器進行解析和生成鸦致。適用于進行數(shù)據(jù)交互的場景潮剪,比如網(wǎng)站前臺與后臺之間的數(shù)據(jù)交互。

在python中主要使用 json 模塊來處理 json數(shù)據(jù)分唾。Json解析網(wǎng)站:

https://www.sojson.com/simple_json.html

2.6threading

使用threading模塊創(chuàng)建線程抗碰,直接從threading.Thread繼承,然后重寫__init__方法和run方法

03

三绽乔、方法實例

3.1get方法實例

demo_get.py

3.2post方法實例

demo_post.py

3.3添加代理

demo_proxies.py

3.4獲取ajax類數(shù)據(jù)實例

demo_ajax.py

3.5使用多線程實例

demo_thread.py

04

四弧蝇、爬蟲框架

4.1Srcapy框架

Scrapy是用純Python實現(xiàn)一個為了爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應用框架,用途非常廣泛看疗。

Scrapy 使用了 Twisted['tw?st?d](其主要對手是Tornado)異步網(wǎng)絡框架來處理網(wǎng)絡通訊沙峻,可以加快我們的下載速度,不用自己去實現(xiàn)異步框架两芳,并且包含了各種中間件接口摔寨,可以靈活的完成各種需求。

4.2Scrapy架構(gòu)圖

4.3Scrapy主要組件

Scrapy Engine(引擎): 負責Spider怖辆、ItemPipeline祷肯、Downloader、Scheduler中間的通訊疗隶,信號、數(shù)據(jù)傳遞等翼闹。

Scheduler(調(diào)度器): 它負責接受引擎發(fā)送過來的Request請求斑鼻,并按照一定的方式進行整理排列,入隊猎荠,當引擎需要時坚弱,交還給引擎。

Downloader(下載器):負責下載Scrapy Engine(引擎)發(fā)送的所有Requests請求关摇,并將其獲取到的Responses交還給Scrapy Engine(引擎)荒叶,由引擎交給Spider來處理,

Spider(爬蟲):它負責處理所有Responses,從中分析提取數(shù)據(jù)输虱,獲取Item字段需要的數(shù)據(jù)些楣,并將需要跟進的URL提交給引擎,再次進入Scheduler(調(diào)度器)宪睹,

Item Pipeline(管道):它負責處理Spider中獲取到的Item愁茁,并進行進行后期處理(詳細分析、過濾亭病、存儲等)的地方.

Downloader Middlewares(下載中間件):你可以當作是一個可以自定義擴展下載功能的組件鹅很。

Spider Middlewares(Spider中間件):你可以理解為是一個可以自定擴展和操作引擎和Spider中間通信的功能組件(比如進入Spider的Responses;和從Spider出去的Requests)

4.4Scrapy的運作流程

引擎:Hi!Spider, 你要處理哪一個網(wǎng)站罪帖?

Spider:老大要我處理xxxx.com促煮。

引擎:你把第一個需要處理的URL給我吧。

Spider:給你整袁,第一個URL是xxxxxxx.com菠齿。

引擎:Hi!調(diào)度器葬项,我這有request請求你幫我排序入隊一下泞当。

調(diào)度器:好的,正在處理你等一下。

引擎:Hi襟士!調(diào)度器盗飒,把你處理好的request請求給我。

調(diào)度器:給你陋桂,這是我處理好的request

引擎:Hi逆趣!下載器,你按照老大的下載中間件的設置幫我下載一下這個request請求

下載器:好的嗜历!給你宣渗,這是下載好的東西。(如果失斃嬷荨:sorry痕囱,這個request下載失敗了。然后引擎告訴調(diào)度器暴匠,這個request下載失敗了鞍恢,你記錄一下,我們待會兒再下載)

引擎:Hi每窖!Spider帮掉,這是下載好的東西,并且已經(jīng)按照老大的下載中間件處理過了窒典,你自己處理一下(注意蟆炊!這兒responses默認是交給def parse()這個函數(shù)處理的)

Spider:(處理完畢數(shù)據(jù)之后對于需要跟進的URL),Hi瀑志!引擎涩搓,我這里有兩個結(jié)果,這個是我需要跟進的URL劈猪,還有這個是我獲取到的Item數(shù)據(jù)缩膝。

引擎:Hi !管道 我這兒有個item你幫我處理一下岸霹!調(diào)度器疾层!這是需要跟進URL你幫我處理下。然后從第四步開始循環(huán)贡避,直到獲取完老大需要全部信息痛黎。

管道``調(diào)度器:好的,現(xiàn)在就做刮吧!

4.5制作Scrapy爬蟲4步曲

1新建爬蟲項目scrapy startproject mySpider2明確目標 (編寫items.py)打開mySpider目錄下的items.py3制作爬蟲 (spiders/xxspider.py)scrapy genspider gushi365 "gushi365.com"4存儲內(nèi)容 (pipelines.py)設計管道存儲爬取內(nèi)容

05

五湖饱、常用工具

5.1fidder

fidder是一款抓包工具,主要用于手機抓包杀捻。

5.2XPath Helper

xpath helper插件是一款免費的chrome爬蟲網(wǎng)頁解析工具井厌。可以幫助用戶解決在獲取xpath路徑時無法正常定位等問題。

谷歌瀏覽器插件xpath helper 的安裝和使用:

https://jingyan.baidu.com/article/1e5468f94694ac484861b77d.html

06

六仅仆、分布式爬蟲

6.1scrapy-redis

Scrapy-redis是為了更方便地實現(xiàn)Scrapy分布式爬取器赞,而提供了一些以redis為基礎的組件(pip install scrapy-redis)


6.2分布式策略

Master端(核心服務器) :搭建一個Redis數(shù)據(jù)庫,不負責爬取墓拜,只負責url指紋判重港柜、Request的分配,以及數(shù)據(jù)的存儲

Slaver端(爬蟲程序執(zhí)行端) :負責執(zhí)行爬蟲程序咳榜,運行過程中提交新的Request給Master

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末夏醉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涌韩,更是在濱河造成了極大的恐慌畔柔,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臣樱,死亡現(xiàn)場離奇詭異释树,居然都是意外死亡,警方通過查閱死者的電腦和手機擎淤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秸仙,“玉大人嘴拢,你說我怎么就攤上這事〖偶停” “怎么了席吴?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捞蛋。 經(jīng)常有香客問我孝冒,道長,這世上最難降的妖魔是什么拟杉? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任庄涡,我火速辦了婚禮,結(jié)果婚禮上搬设,老公的妹妹穿的比我還像新娘穴店。我一直安慰自己,他們只是感情好拿穴,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布泣洞。 她就那樣靜靜地躺著,像睡著了一般默色。 火紅的嫁衣襯著肌膚如雪球凰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機與錄音呕诉,去河邊找鬼缘厢。 笑死,一個胖子當著我的面吹牛义钉,可吹牛的內(nèi)容都是我干的昧绣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼捶闸,長吁一口氣:“原來是場噩夢啊……” “哼夜畴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起删壮,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤贪绘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后央碟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體税灌,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年亿虽,在試婚紗的時候發(fā)現(xiàn)自己被綠了菱涤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡洛勉,死狀恐怖粘秆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情收毫,我是刑警寧澤攻走,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站此再,受9級特大地震影響昔搂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜输拇,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一摘符、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧策吠,春花似錦议慰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至洽糟,卻和暖如春炉菲,著一層夾襖步出監(jiān)牢的瞬間堕战,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工拍霜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嘱丢,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓祠饺,卻偏偏與公主長得像越驻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子道偷,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容