實(shí)現(xiàn)爬蟲技術(shù)的編程環(huán)境有很多種,Java、Python、C++等都可以用來(lái)爬蟲。但很多人選擇Python來(lái)寫爬蟲,為什么呢?因?yàn)镻ython確實(shí)很適合做爬蟲,豐富的第三方庫(kù)十分強(qiáng)大,簡(jiǎn)單幾行代碼便可實(shí)現(xiàn)你想要的功能。更重要的,Python也是數(shù)據(jù)挖掘和分析的好能手。那么,Python爬蟲一般用什么框架比較好?
成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的嘉陵網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
一般來(lái)講,只有在遇到比較大型的需求時(shí),才會(huì)使用Python爬蟲框架。這樣的做的主要目的,是為了方便管理以及擴(kuò)展。本文我將向大家推薦十個(gè)Python爬蟲框架。
1、Scrapy:Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架。 可以應(yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。它是很強(qiáng)大的爬蟲框架,可以滿足簡(jiǎn)單的頁(yè)面爬取,比如可以明確獲知url pattern的情況。用這個(gè)框架可以輕松爬下來(lái)如亞馬遜商品信息之類的數(shù)據(jù)。但是對(duì)于稍微復(fù)雜一點(diǎn)的頁(yè)面,如weibo的頁(yè)面信息,這個(gè)框架就滿足不了需求了。它的特性有:HTML, XML源數(shù)據(jù) 選擇及提取 的內(nèi)置支持;提供了一系列在spider之間共享的可復(fù)用的過(guò)濾器(即 Item Loaders),對(duì)智能處理爬取數(shù)據(jù)提供了內(nèi)置支持。
2、Crawley:高速爬取對(duì)應(yīng)網(wǎng)站的內(nèi)容,支持關(guān)系和非關(guān)系數(shù)據(jù)庫(kù),數(shù)據(jù)可以導(dǎo)出為JSON、XML等。
3、Portia:是一個(gè)開源可視化爬蟲工具,可讓使用者在不需要任何編程知識(shí)的情況下爬取網(wǎng)站!簡(jiǎn)單地注釋自己感興趣的頁(yè)面,Portia將創(chuàng)建一個(gè)蜘蛛來(lái)從類似的頁(yè)面提取數(shù)據(jù)。簡(jiǎn)單來(lái)講,它是基于scrapy內(nèi)核;可視化爬取內(nèi)容,不需要任何開發(fā)專業(yè)知識(shí);動(dòng)態(tài)匹配相同模板的內(nèi)容。
4、newspaper:可以用來(lái)提取新聞、文章和內(nèi)容分析。使用多線程,支持10多種語(yǔ)言等。作者從requests庫(kù)的簡(jiǎn)潔與強(qiáng)大得到靈感,使用Python開發(fā)的可用于提取文章內(nèi)容的程序。支持10多種語(yǔ)言并且所有的都是unicode編碼。
5、Python-goose:Java寫的文章提取工具。Python-goose框架可提取的信息包括:文章主體內(nèi)容、文章主要圖片、文章中嵌入的任何Youtube/Vimeo視頻、元描述、元標(biāo)簽。
6、Beautiful Soup:名氣大,整合了一些常用爬蟲需求。它是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù)。它能夠通過(guò)你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航,查找,修改文檔的方式.Beautiful Soup會(huì)幫你節(jié)省數(shù)小時(shí)甚至數(shù)天的工作時(shí)間。Beautiful Soup的缺點(diǎn)是不能加載JS。
7、mechanize:它的優(yōu)點(diǎn)是可以加載JS。當(dāng)然它也有缺點(diǎn),比如文檔嚴(yán)重缺失。不過(guò)通過(guò)官方的example以及人肉嘗試的方法,還是勉強(qiáng)能用的。
8、selenium:這是一個(gè)調(diào)用瀏覽器的driver,通過(guò)這個(gè)庫(kù)你可以直接調(diào)用瀏覽器完成某些操作,比如輸入驗(yàn)證碼。Selenium是自動(dòng)化測(cè)試工具,它支持各種瀏覽器,包括 Chrome,Safari,F(xiàn)irefox等主流界面式瀏覽器,如果在這些瀏覽器里面安裝一個(gè) Selenium 的插件,可以方便地實(shí)現(xiàn)Web界面的測(cè)試. Selenium支持瀏覽器驅(qū)動(dòng)。Selenium支持多種語(yǔ)言開發(fā),比如 Java,C,Ruby等等,PhantomJS 用來(lái)渲染解析JS,Selenium 用來(lái)驅(qū)動(dòng)以及與Python的對(duì)接,Python進(jìn)行后期的處理。
9、cola:是一個(gè)分布式的爬蟲框架,對(duì)于用戶來(lái)說(shuō),只需編寫幾個(gè)特定的函數(shù),而無(wú)需關(guān)注分布式運(yùn)行的細(xì)節(jié)。任務(wù)會(huì)自動(dòng)分配到多臺(tái)機(jī)器上,整個(gè)過(guò)程對(duì)用戶是透明的。項(xiàng)目整體設(shè)計(jì)有點(diǎn)糟,模塊間耦合度較高。
10、PySpider:一個(gè)國(guó)人編寫的強(qiáng)大的網(wǎng)絡(luò)爬蟲系統(tǒng)并帶有強(qiáng)大的WebUI。采用Python語(yǔ)言編寫,分布式架構(gòu),支持多種數(shù)據(jù)庫(kù)后端,強(qiáng)大的WebUI支持腳本編輯器,任務(wù)監(jiān)視器,項(xiàng)目管理器以及結(jié)果查看器。Python腳本控制,可以用任何你喜歡的html解析包。
經(jīng)過(guò)前面四章的學(xué)習(xí),我們已經(jīng)可以使用Requests庫(kù)、Beautiful Soup庫(kù)和Re庫(kù),編寫基本的Python爬蟲程序了。那么這一章就來(lái)學(xué)習(xí)一個(gè)專業(yè)的網(wǎng)絡(luò)爬蟲框架--Scrapy。沒錯(cuò),是框架,而不是像前面介紹的函數(shù)功能庫(kù)。
Scrapy是一個(gè)快速、功能強(qiáng)大的網(wǎng)絡(luò)爬蟲框架。
可能大家還不太了解什么是框架,爬蟲框架其實(shí)是實(shí)現(xiàn)爬蟲功能的一個(gè)軟件結(jié)構(gòu)和功能組件的集合。
簡(jiǎn)而言之, Scrapy就是一個(gè)爬蟲程序的半成品,可以幫助用戶實(shí)現(xiàn)專業(yè)的網(wǎng)絡(luò)爬蟲。
使用Scrapy框架,不需要你編寫大量的代碼,Scrapy已經(jīng)把大部分工作都做好了,允許你調(diào)用幾句代碼便自動(dòng)生成爬蟲程序,可以節(jié)省大量的時(shí)間。
當(dāng)然,框架所生成的代碼基本是一致的,如果遇到一些特定的爬蟲任務(wù)時(shí),就不如自己使用Requests庫(kù)搭建來(lái)的方便了。
PyCharm安裝
測(cè)試安裝:
出現(xiàn)框架版本說(shuō)明安裝成功。
掌握Scrapy爬蟲框架的結(jié)構(gòu)是使用好Scrapy的重中之重!
先上圖:
整個(gè)結(jié)構(gòu)可以簡(jiǎn)單地概括為: “5+2”結(jié)構(gòu)和3條數(shù)據(jù)流
5個(gè)主要模塊(及功能):
(1)控制所有模塊之間的數(shù)據(jù)流。
(2)可以根據(jù)條件觸發(fā)事件。
(1)根據(jù)請(qǐng)求下載網(wǎng)頁(yè)。
(1)對(duì)所有爬取請(qǐng)求進(jìn)行調(diào)度管理。
(1)解析DOWNLOADER返回的響應(yīng)--response。
(2)產(chǎn)生爬取項(xiàng)--scraped item。
(3)產(chǎn)生額外的爬取請(qǐng)求--request。
(1)以流水線方式處理SPIDER產(chǎn)生的爬取項(xiàng)。
(2)由一組操作順序組成,類似流水線,每個(gè)操作是一個(gè)ITEM PIPELINES類型。
(3)清理、檢查和查重爬取項(xiàng)中的HTML數(shù)據(jù)并將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。
2個(gè)中間鍵:
(1)對(duì)Engine、Scheduler、Downloader之間進(jìn)行用戶可配置的控制。
(2)修改、丟棄、新增請(qǐng)求或響應(yīng)。
(1)對(duì)請(qǐng)求和爬取項(xiàng)進(jìn)行再處理。
(2)修改、丟棄、新增請(qǐng)求或爬取項(xiàng)。
3條數(shù)據(jù)流:
(1):圖中數(shù)字 1-2
1:Engine從Spider處獲得爬取請(qǐng)求--request。
2:Engine將爬取請(qǐng)求轉(zhuǎn)發(fā)給Scheduler,用于調(diào)度。
(2):圖中數(shù)字 3-4-5-6
3:Engine從Scheduler處獲得下一個(gè)要爬取的請(qǐng)求。
4:Engine將爬取請(qǐng)求通過(guò)中間件發(fā)送給Downloader。
5:爬取網(wǎng)頁(yè)后,Downloader形成響應(yīng)--response,通過(guò)中間件發(fā)送給Engine。
6:Engine將收到的響應(yīng)通過(guò)中間件發(fā)送給Spider處理。
(3):圖中數(shù)字 7-8-9
7:Spider處理響應(yīng)后產(chǎn)生爬取項(xiàng)--scraped item。
8:Engine將爬取項(xiàng)發(fā)送給Item Pipelines。
9:Engine將爬取請(qǐng)求發(fā)送給Scheduler。
任務(wù)處理流程:從Spider的初始爬取請(qǐng)求開始爬取,Engine控制各模塊數(shù)據(jù)流,不間斷從Scheduler處獲得爬取請(qǐng)求,直至請(qǐng)求為空,最后到Item Pipelines存儲(chǔ)數(shù)據(jù)結(jié)束。
作為用戶,只需配置好Scrapy框架的Spider和Item Pipelines,也就是數(shù)據(jù)流的入口與出口,便可完成一個(gè)爬蟲程序的搭建。Scrapy提供了簡(jiǎn)單的爬蟲命令語(yǔ)句,幫助用戶一鍵配置剩余文件,那我們便來(lái)看看有哪些好用的命令吧。
Scrapy采用命令行創(chuàng)建和運(yùn)行爬蟲
PyCharm打開Terminal,啟動(dòng)Scrapy:
Scrapy基本命令行格式:
具體常用命令如下:
下面用一個(gè)例子來(lái)學(xué)習(xí)一下命令的使用:
1.建立一個(gè)Scrapy爬蟲工程,在已啟動(dòng)的Scrapy中繼續(xù)輸入:
執(zhí)行該命令,系統(tǒng)會(huì)在PyCharm的工程文件中自動(dòng)創(chuàng)建一個(gè)工程,命名為pythonDemo。
2.產(chǎn)生一個(gè)Scrapy爬蟲,以教育部網(wǎng)站為例:
命令生成了一個(gè)名為demo的spider,并在Spiders目錄下生成文件demo.py。
命令僅用于生成demo.py文件,該文件也可以手動(dòng)生成。
觀察一下demo.py文件:
3.配置產(chǎn)生的spider爬蟲,也就是demo.py文件:
4.運(yùn)行爬蟲,爬取網(wǎng)頁(yè):
如果爬取成功,會(huì)發(fā)現(xiàn)在pythonDemo下多了一個(gè)t20210816_551472.html的文件,我們所爬取的網(wǎng)頁(yè)內(nèi)容都已經(jīng)寫入該文件了。
以上就是Scrapy框架的簡(jiǎn)單使用了。
Request對(duì)象表示一個(gè)HTTP請(qǐng)求,由Spider生成,由Downloader執(zhí)行。
Response對(duì)象表示一個(gè)HTTP響應(yīng),由Downloader生成,有Spider處理。
Item對(duì)象表示一個(gè)從HTML頁(yè)面中提取的信息內(nèi)容,由Spider生成,由Item Pipelines處理。Item類似于字典類型,可以按照字典類型來(lái)操作。
以下是爬蟲經(jīng)常用到的庫(kù)
請(qǐng)求庫(kù)
1. requests
requests庫(kù)應(yīng)該是現(xiàn)在做爬蟲最火最實(shí)用的庫(kù)了,非常的人性化。有關(guān)于它的使用我之前也寫過(guò)一篇文章 一起看看Python之Requests庫(kù) ,大家可以去看一下。
2.urllib3
urllib3是一個(gè)非常強(qiáng)大的http請(qǐng)求庫(kù),提供一系列的操作URL的功能。
3.selenium
自動(dòng)化測(cè)試工具。一個(gè)調(diào)用瀏覽器的 driver,通過(guò)這個(gè)庫(kù)你可以直接調(diào)用瀏覽器完成某些操作,比如輸入驗(yàn)證碼。
對(duì)于這個(gè)庫(kù)并非只是Python才能用,像JAVA、Python、C#等都能夠使用selenium這個(gè)庫(kù)
4.aiohttp
基于 asyncio 實(shí)現(xiàn)的 HTTP 框架。異步操作借助于 async/await 關(guān)鍵字,使用異步庫(kù)進(jìn)行數(shù)據(jù)抓取,可以大大提高效率。
這個(gè)屬于進(jìn)階爬蟲時(shí)候必須掌握的異步庫(kù)。有關(guān)于aiohttp的詳細(xì)操作,可以去官方文檔:
Python學(xué)習(xí)網(wǎng)- 專業(yè)的python自學(xué)、交流公益平臺(tái)!
解析庫(kù)
1、beautifulsoup
html 和 XML 的解析,從網(wǎng)頁(yè)中提取信息,同時(shí)擁有強(qiáng)大的API和多樣解析方式。一個(gè)我經(jīng)常使用的解析庫(kù),對(duì)于html的解析是非常的好用。對(duì)于寫爬蟲的人來(lái)說(shuō)這也是必須掌握的庫(kù)。
2、lxml
支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。
3、pyquery
jQuery 的 Python 實(shí)現(xiàn),能夠以 jQuery 的語(yǔ)法來(lái)操作解析 HTML 文檔,易用性和解析速度都很好。
數(shù)據(jù)存儲(chǔ)
1、pymysql
官方文檔:
一個(gè)純 Python 實(shí)現(xiàn)的 MySQL 客戶端操作庫(kù)。非常的實(shí)用、非常的簡(jiǎn)單。
2、pymongo
官方文檔:
顧名思義,一個(gè)用于直接連接 mongodb 數(shù)據(jù)庫(kù)進(jìn)行查詢操作的庫(kù)。
3、redisdump
redis-dump是將redis和json互轉(zhuǎn)的工具;redis-dump是基于ruby開發(fā),需要ruby環(huán)境,而且新版本的redis-dump要求2.2.2以上的ruby版本,centos中yum只能安裝2.0版本的ruby。需要先安裝ruby的管理工具rvm安裝高版本的ruby。
aiohttp:是純粹的異步框架,同時(shí)支持HTTP客戶端和服務(wù)端,可以快速實(shí)現(xiàn)異步爬蟲,并且其中的aiohttp解決了requests的一個(gè)痛點(diǎn),它可以輕松實(shí)現(xiàn)自動(dòng)轉(zhuǎn)碼,對(duì)于中文編碼就很方便了。
asks:Python自帶一個(gè)異步的標(biāo)準(zhǔn)庫(kù)asyncio,但這個(gè)庫(kù)很多人覺得并不好用,而里面的ask則是封裝了curio和trio的一個(gè)http請(qǐng)求庫(kù)。用起來(lái)和
Requests 90%相似,新手也可以很快上手。
vibora:號(hào)稱是現(xiàn)在最快的異步請(qǐng)求框架,跑分是最快的。寫爬蟲、寫服務(wù)器響應(yīng)都可以用。但這個(gè)項(xiàng)目一直在重構(gòu),現(xiàn)在頁(yè)面上還掛著項(xiàng)目正在重構(gòu)的警告,使用需謹(jǐn)慎。
Pyppeteer:是異步無(wú)頭瀏覽器,從跑分來(lái)看比Selenium+webdriver快,使用方式是最接近于瀏覽器的自身的設(shè)計(jì)接口的。它本身是來(lái)自
Google維護(hù)的puppeteer,但是按照Python社區(qū)的梗,作者進(jìn)行了封裝并且把名字中的u改成了y。
下面為大家介紹一下框架:
Grab:是很流行的漸進(jìn)式框架,Grab可以說(shuō)是爬蟲界的漸進(jìn)式框架,又十分簡(jiǎn)單的用法,封裝的也很好,是基于生成器異步的設(shè)計(jì)。
botflow:概念很新穎,定位成了處理數(shù)據(jù)工作流的框架,可以用來(lái)爬蟲、機(jī)器學(xué)習(xí)、量化交易等等。
ruia:比較接近Scrapy的使用方式,異步設(shè)計(jì)。
一、 請(qǐng)求庫(kù)
1. requests
requests 類庫(kù)是第三方庫(kù),比 Python 自帶的 urllib 類庫(kù)使用方便和
2. selenium
利用它執(zhí)行瀏覽器動(dòng)作,模擬操作。
3. chromedriver
安裝chromedriver來(lái)驅(qū)動(dòng)chrome。
4. aiohttp
aiohttp是異步請(qǐng)求庫(kù),抓取數(shù)據(jù)時(shí)可以提升效率。
二、 解析庫(kù)
1. lxml
lxml是Python的一個(gè)解析庫(kù),支持解析HTML和XML,支持XPath的解析方式,而且解析效率非常高。
2. beautifulsoup4
Beautiful Soup可以使用它更方便的從 HTML 文檔中提取數(shù)據(jù)。
3. pyquery
pyquery是一個(gè)網(wǎng)頁(yè)解析庫(kù),采用類似jquery的語(yǔ)法來(lái)解析HTML文檔。
三、 存儲(chǔ)庫(kù)
1. mysql
2. mongodb
3. redis
四、 爬蟲框架scrapy
Scrapy 是一套異步處理框架,純python實(shí)現(xiàn)的爬蟲框架,用來(lái)抓取網(wǎng)頁(yè)內(nèi)容以及各種圖片
需要先安裝scrapy基本依賴庫(kù),比如lxml、pyOpenSSL、Twisted
網(wǎng)站題目:python爬蟲函數(shù)庫(kù),Python爬蟲數(shù)據(jù)庫(kù)
標(biāo)題來(lái)源:http://sd-ha.com/article18/dssipgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、動(dòng)態(tài)網(wǎng)站、網(wǎng)站收錄、外貿(mào)建站、服務(wù)器托管、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)