python官网学习爬虫资料_Python爬虫学习?
1 爬蟲(chóng)是互聯(lián)網(wǎng)上最常見(jiàn)的一種東西了吧。
爬蟲(chóng)這東西每天都在網(wǎng)上爬大量的信息,各大搜索引擎廠商每天都有上百萬(wàn)的爬蟲(chóng)在網(wǎng)絡(luò)上活動(dòng),這些爬蟲(chóng)的作用就是給搜索引擎采集互聯(lián)網(wǎng)上最新的內(nèi)容,采集來(lái)的內(nèi)容經(jīng)過(guò)分類(lèi)、加工之后,進(jìn)入搜索引擎的索引。這是爬蟲(chóng)最常見(jiàn)的應(yīng)用。
關(guān)于搜索引擎的理論非常多,應(yīng)該已經(jīng)形成系統(tǒng)的理論和方法了。這里不再多追求搜索引擎的細(xì)節(jié),只來(lái)看看爬蟲(chóng)如何爬有效的信息。
ps. 這個(gè)博客已經(jīng)很久沒(méi)有更新了?,F(xiàn)在時(shí)間越來(lái)越少,平時(shí)鮮有時(shí)間來(lái)更新博客了。
最近某人發(fā)現(xiàn),python其實(shí)是一種很適合寫(xiě)爬蟲(chóng)的語(yǔ)言,而且python越用越順手?,F(xiàn)在若是有人問(wèn)我“c++和c#學(xué)哪一個(gè)?“之類(lèi)的問(wèn)題的時(shí)候,我一定會(huì)說(shuō),學(xué)python吧,因?yàn)樯虝?#xff0c;你應(yīng)該學(xué)習(xí)python。
所謂爬蟲(chóng),就是把網(wǎng)頁(yè)的html下載下來(lái),然后從里面提取出來(lái)有用的信息,這些有用的信息一般就是正文,圖片,鏈接一類(lèi)的信息。
針對(duì)特定網(wǎng)站的爬蟲(chóng)就更好寫(xiě)了,用正則表達(dá)式,把網(wǎng)頁(yè)里的鏈接信息找到,然后找到需要的信息,保存在本地,然后進(jìn)入下一個(gè)鏈接重復(fù)上一次的過(guò)程。
下面的腳本演示如何從加菲貓的官網(wǎng)上把從1978年至今的所有漫畫(huà)全部下載下來(lái)
import os,urllib,urllib2,re
hosts = "http://www.gocomics.com"
#initpos = "/mobile/garfield/1978/06/19"
initpos ="/mobile/garfield/1979/08/08"
pname = re.compile('''.+?(.*?)''')
pcomic = re.compile('''
''')pnext = re.compile('''''')
def getpage(url):
print url
req = urllib2.Request(url)
req.add_header("User-Agent","Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0")
req.add_header("If-None-Match","c1858c2845ca9501136ca83d624f8d4d")
u = urllib2.urlopen(req).read()
return u
def getnextpos(content,patten):
r = patten.findall(content)
for x in r:
print 'find next: ',x
return x
def savecomic(content,patten):
r = patten.findall(content)
print 'find commic:',r
r2 = pname.findall(content)
print 'find name:',r2
urlcomic = r[0]
u = urllib.urlopen(urlcomic).read()
name = r2[0].replace(' ','').split(',')
year = name[-1]
day = name[-2]
filename = 'test.jpg'
if not os.path.exists(year):
os.makedirs(year)
# is gif file ,the name the file as gif
if ((u[0] is 'G') and (u[1] is 'I') and (u[2] is 'F')):
filename = year+day+'.gif'
else:
filename = year+day+'.jpg'
f = file(year+"/"+filename,"wb+")
f.write(u)
f.close()
def main():
url = hosts+initpos
while(True):
c = getpage(url)
savecomic(c,pcomic)
u = getnextpos(c,pnext)
if u is None:
break
else:
url = hosts+u
if __name__ == '__main__':
main()
2
想學(xué)習(xí)python的爬蟲(chóng),除了python的四大經(jīng)典爬蟲(chóng)模塊外,那就不得不說(shuō)說(shuō)scrapy了,scrapy簡(jiǎn)單來(lái)說(shuō)就是為了爬取我們想要的數(shù)據(jù)而編寫(xiě)的一個(gè)應(yīng)用框架。更專(zhuān)業(yè)點(diǎn)的說(shuō)法是:scrapy是python開(kāi)發(fā)的一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫(xiě)的應(yīng)用框架,可以應(yīng)用在數(shù)據(jù)挖掘、信息處理、存儲(chǔ)歷史數(shù)據(jù)等一些列的程序中,框架內(nèi)包含的各種接口,可以讓我們靈活的將其應(yīng)用于各種需求中。
那么,scrapy到底為我們提供了哪些高效的特性來(lái)簡(jiǎn)化我們的工作呢:
對(duì)html,xml源數(shù)據(jù)的選擇和提取的支持,提供了selector選擇器和Xpath表達(dá)式進(jìn)行處理,使用正則表達(dá)式來(lái)提取數(shù)據(jù)。提供交互式的shell終端,為編寫(xiě)過(guò)程中驗(yàn)證部分提取數(shù)據(jù)提供了便利(selector、xpath)通過(guò)feed為導(dǎo)出的數(shù)據(jù)提供了多種格式(json、csv、xml),多種存儲(chǔ)端(ftp、s3、本地文件系統(tǒng))的內(nèi)置支持。提供一些列在spider之間共享的可復(fù)用的過(guò)濾器即Item Loaders,內(nèi)置的服務(wù)可以更好的進(jìn)行智能文件爬取數(shù)據(jù)。針對(duì)非英語(yǔ)語(yǔ)系中不標(biāo)準(zhǔn)或者錯(cuò)誤的編碼聲明,提供了自動(dòng)檢測(cè)以及健壯的編碼支持。具有高擴(kuò)展性,通過(guò)使用signals,使用設(shè)計(jì)好的API如中間件、extensions、pipelines來(lái)實(shí)現(xiàn)自己所需的功能。內(nèi)置的中間件及擴(kuò)展可以為cookies and session處理、Http壓縮、HTTP認(rèn)證、HTTP緩存、user-agent、robots.txt等功能提供支持。內(nèi)置Telent終端,通過(guò)在Scrapy進(jìn)程中鉤入Python終端,使您可以查看并調(diào)試爬蟲(chóng)。
網(wǎng)絡(luò)上最流行的scrapy架構(gòu)為:
Scrapy Engine(爬蟲(chóng)引擎):核心部分,用來(lái)處理整個(gè)系統(tǒng)的數(shù)據(jù)流。scheduler(調(diào)度器):用來(lái)接收引擎發(fā)過(guò)來(lái)的requests,并在引擎再次發(fā)來(lái)請(qǐng)求的時(shí)候,返回信息。Downloader(下載器):從scheduler處獲取目標(biāo)網(wǎng)頁(yè)數(shù)據(jù),并將數(shù)據(jù)返回給spiderSpiders(蜘蛛):主要用它指定域名和網(wǎng)頁(yè)的解析規(guī)則,并編寫(xiě)用于分析經(jīng)response返回的item的類(lèi)以及額外跟進(jìn)的URL類(lèi)。每個(gè)Spider負(fù)責(zé)處理相應(yīng)的網(wǎng)站。Item Pipeline(項(xiàng)目管道):負(fù)責(zé)處理spiders提取出來(lái)的item,并對(duì)其進(jìn)行驗(yàn)證、存儲(chǔ)。Downloader Middlewares(下載器中間件):位于Scrapy engine和downloader之間的鉤子,通過(guò)插入自定義的代碼,來(lái)擴(kuò)展scrapy的功能,并處理Scrapy引擎與下載器之間的requests和response。Spider Middlewares(蜘蛛中間件):介于Scrapy engine和spider之間的鉤子,主要工作是處理spide的響應(yīng)輸入和請(qǐng)求輸出。Scheduler Middlewares(調(diào)度中間件):介于Scrapy engine和scheduler之間的鉤子,從Scrapy引擎發(fā)送到調(diào)度的請(qǐng)求和響應(yīng)。
整個(gè)爬蟲(chóng)的工作流程可簡(jiǎn)單理解為:
從初始URL開(kāi)始,Scheduler會(huì)將其交給Downloader進(jìn)行下載,Spider會(huì)對(duì)Downloader下載下來(lái)的數(shù)據(jù)進(jìn)行分析。經(jīng)Spider的分析有兩種結(jié)果:如果是需要進(jìn)一步抓取的鏈接,則這些東西會(huì)被傳回Scheduler,;另一種是需要保存的數(shù)據(jù),則被送到Item Pipeline那里經(jīng)第三步,如果是第一種則再次回到第一步進(jìn)行。如果是第中則對(duì)數(shù)據(jù)進(jìn)行后期處理(詳細(xì)分析、過(guò)濾、存儲(chǔ)等)。另外,在數(shù)據(jù)流動(dòng)的通道里還可以安裝各種中間件,進(jìn)行必要的處理。
而在爬蟲(chóng)的過(guò)程中,數(shù)據(jù)流懂得過(guò)程為:
引擎按照給定的初始網(wǎng)址,打開(kāi)網(wǎng)站,找到處理該網(wǎng)站的Spider并向Spider請(qǐng)求要爬取的第一個(gè)網(wǎng)頁(yè)地址。引擎獲得地址后,使用scheduler進(jìn)行request。處理完第一個(gè)網(wǎng)址后,引擎向調(diào)度器請(qǐng)求下一個(gè)目標(biāo)網(wǎng)址。scheduler向引擎返回一個(gè)新的網(wǎng)址,引擎通過(guò)下載中間件將該網(wǎng)址轉(zhuǎn)給downloader。downloader繼續(xù)從網(wǎng)絡(luò)中獲取所需數(shù)據(jù),下載完成后,返回一個(gè)response,攜帶者這些數(shù)據(jù)通過(guò)下載中間件流向引擎。引擎將收到的response通過(guò)Spider中間件流向Spider,交由Spider處理。Spider處理這個(gè)response并返回爬取到item或者新的request給引擎。引擎如果收到的是item則將其流向item Pipeline引擎如果收到的是新的request,則將其發(fā)向調(diào)度器。重復(fù)上述操作,直至沒(méi)有新的request,引擎關(guān)閉該網(wǎng)站,此次爬取結(jié)束。
本期對(duì)scrapy的簡(jiǎn)單介紹就到這里,以后的文章將會(huì)從項(xiàng)目入手學(xué)習(xí)scrapy,如果你對(duì)scrapy也感興趣,可以關(guān)注一下以便系統(tǒng)為您繼續(xù)推薦。謝謝!
自己多問(wèn)下為什么學(xué)python
如果一門(mén)語(yǔ)言沒(méi)有改變你的編程思維,那么它不值得你去學(xué)習(xí)”。如果這么說(shuō),我們大學(xué)的時(shí)候,學(xué)習(xí)了c,c++,java,C#,算是值得學(xué)習(xí)么?很多時(shí)候是不值得,我覺(jué)得我們大學(xué)的課程就是用java,c#,c++把"C程序設(shè)計(jì)"又上了一遍.
這是因?yàn)?#xff0c;學(xué)校的老師會(huì)C和java之類(lèi)的,所以要跟著規(guī)矩開(kāi)這門(mén)課,(這也就是為什么,許多學(xué)校還在教vb,),這也就是為什么,你所以為的一樣就是大家都有For都有while,都有switch..都有Class...都有int 都有float,所謂的不一樣就是用C有指針,java沒(méi)有,這就是為什么教育是失敗的,這也就是為什么,我目前認(rèn)識(shí)的幾個(gè)編程大牛
python的優(yōu)點(diǎn):簡(jiǎn)單 我所說(shuō)的簡(jiǎn)單,是相比于象C和C++這樣的語(yǔ)言,你為了編程,要學(xué)習(xí)許多偏底層的東西.在比如,你在學(xué)習(xí)一個(gè)新的編程范式,或者想要馬上做個(gè)例子看看,試驗(yàn)?zāi)硞€(gè)API,如果你是寫(xiě)java的,你不得不去寫(xiě)一個(gè)main,寫(xiě)一些構(gòu)造,即使有IDE這樣的東西,能夠?yàn)槟銕?lái)代碼生成器,而我做得就是寫(xiě)一段“腳本”,或者打開(kāi)python交互式解釋器就行了。
自己認(rèn)識(shí)的python朋友出去工作,工資比較高,然后自己又剛剛好是會(huì)python所以選擇學(xué)習(xí)python,這樣的人比較危險(xiǎn)但是也比較有激勵(lì),還有就是覺(jué)得python比其他開(kāi)發(fā)語(yǔ)言好用。
學(xué)完python前景會(huì)咋樣
其實(shí)我個(gè)人是很看好python未來(lái)的就業(yè)前景的,因?yàn)槲艺J(rèn)識(shí)太多的工程師都已經(jīng)在學(xué)python,很多都是月收入大幾萬(wàn)的
我個(gè)人也并非一直用python。前些年主要用c/c++以及java開(kāi)發(fā)一些通信,移動(dòng)系統(tǒng),互聯(lián)網(wǎng)通信。近3年開(kāi)始才轉(zhuǎn)向python。坦白的說(shuō),這可能與你相處的公司以及環(huán)境不大一樣。隨便舉個(gè)例子,google的protocol buffer協(xié)議一出來(lái)就具有c++/python/java三種語(yǔ)言支持。google的廣告系統(tǒng)早在03,04年左右就一并對(duì)python進(jìn)行了webservice支持,大部分涉及基礎(chǔ)核心系統(tǒng)的公司,都開(kāi)始對(duì)python進(jìn)行了擴(kuò)展支持。甚至開(kāi)源社區(qū)的postgresql數(shù)據(jù)庫(kù),除了自身的ansi SQL,pgsql,pg/TCL,PG/PERL之外對(duì)python進(jìn)行了內(nèi)嵌支持,唯獨(dú)卻沒(méi)有呼聲很高的java。在FREEBSD(MIT)/LINUX(GPL)平臺(tái)上,對(duì)java可能排斥性比較大,但綜合而言,目前python發(fā)展還沒(méi)有java那種普及,主要是python大部分工作仍然是在較為深入地系統(tǒng)層和框架層做設(shè)計(jì)開(kāi)發(fā),例如django,SQLAlchemy,fail2ban,mail郵件系統(tǒng),twisted等等。這部分對(duì)于那種習(xí)慣應(yīng)用前輩們框架的編碼人員而言,缺乏創(chuàng)造力的他們根本無(wú)法適用這種開(kāi)發(fā)。尤其在python涉及一些系統(tǒng)層面需要有較強(qiáng)的c/c++能力,這部分人在國(guó)內(nèi)要么就累得要死沒(méi)時(shí)間,要么就啥都不會(huì)就會(huì)拷貝代碼,而國(guó)內(nèi)公司也鮮有主動(dòng)去做這部分基礎(chǔ)勞動(dòng)的,大多都是等別人做好了在直接拿來(lái)用,所以造就了任何技術(shù)性的東西出來(lái),國(guó)內(nèi)都是先等等看,然后抄襲應(yīng)用。
大環(huán)境如此,但千萬(wàn)誤認(rèn)為先等等看吧。對(duì)于一個(gè)技術(shù)人員而言,缺乏對(duì)新技術(shù)的渴望與熱情,這是一種非常危險(xiǎn)的事情。我工作8年了,按照國(guó)內(nèi)很多的人的說(shuō)法早已不做代碼了,但又一次在聽(tīng)一個(gè)老外的演講,他說(shuō)他50多歲仍然每天堅(jiān)持寫(xiě)代碼,了解最新的動(dòng)態(tài),所以他才能做到他們公司的首席科學(xué)家,因此它才能時(shí)刻指導(dǎo)項(xiàng)目團(tuán)隊(duì)前進(jìn)并保證項(xiàng)目的質(zhì)量。他坦言對(duì)于一個(gè)不寫(xiě)代碼并且不了解最新的技術(shù)動(dòng)態(tài)的技術(shù)人員或者技術(shù)團(tuán)隊(duì)的負(fù)責(zé)人而言,這種團(tuán)隊(duì)也就足夠做作小項(xiàng)目,一旦壓力和項(xiàng)目過(guò)大,就會(huì)有很多問(wèn)題漏出來(lái)。
對(duì)于新人而言,無(wú)論學(xué)習(xí)什么技術(shù),都要以鼓勵(lì)的姿態(tài)出現(xiàn)。太多用薪水和你個(gè)人所看到的現(xiàn)狀去衡量一門(mén)技術(shù),那絕對(duì)是欠缺眼光的。任何一門(mén)技術(shù),一旦有人學(xué)習(xí),他有可能逐漸成為這個(gè)領(lǐng)域的專(zhuān)家,即便再濫再?zèng)]有人用的開(kāi)發(fā)語(yǔ)言技術(shù),他也有可能就是明日的奠基者或者大師。
自己如何確定目標(biāo)
在生活中學(xué)會(huì)不斷挖掘自己的潛力。我們都是一個(gè)普通人,可能并不清楚自己到底在哪方面占有優(yōu)勢(shì)。所以,學(xué)著在生活中找到自己的優(yōu)勢(shì),并根據(jù)優(yōu)勢(shì)選擇一定的就業(yè)方向。
不隨波逐流。不要看周?chē)娜俗鍪裁?#xff0c;自己就做什么,也許別人做的并不適合你。別人的優(yōu)勢(shì)很可能會(huì)成為你的劣勢(shì)。所以,堅(jiān)定自己的想法,讓自己知道那些方面適合自己,自己可以勝任。
不斷嘗試可能成為自己的優(yōu)勢(shì)。你不知道什么適合自己,所以才要大膽、勇敢地嘗試。找到一種可以屬于你的獨(dú)特的優(yōu)勢(shì)。
堅(jiān)定信念。一旦你堅(jiān)定了自己的信念,就不要被別人的意見(jiàn)或是諷刺或是嘲笑所干擾。別人不是你,不懂的你在想什么,不清楚你開(kāi)始這件事的源頭。你的事情,不了解你的人,沒(méi)有資格輕易評(píng)說(shuō)。
不茫然,不多想。別讓太多的事干擾到你奮斗下去的信念。夢(mèng)想不容許太多的雜念。那些雜念只會(huì)讓你的心愈來(lái)愈脆弱,多為一個(gè)人考慮,到頭來(lái),傷害的還是自己。
選擇自己學(xué)習(xí)方法
每個(gè)人都有適合自己的方法,有的人去選擇自學(xué),有的人選擇看視頻學(xué)習(xí),有的人選擇報(bào)名培訓(xùn)班,那在這個(gè)時(shí)候,你就要自己考慮清楚,到底那樣對(duì)的幫助是最大的,個(gè)人覺(jué)得是跟著培訓(xùn)班最好的,畢竟人家的實(shí)戰(zhàn)項(xiàng)目多,我們學(xué)軟件開(kāi)發(fā)的都知道實(shí)戰(zhàn)項(xiàng)目對(duì)于學(xué)好一門(mén)語(yǔ)言是 很重要的。
學(xué)習(xí)python有那些誤區(qū)
具體里面的誤區(qū)非常的多,那些就不需要我去寫(xiě)出來(lái),我給你說(shuō)的一般都是心態(tài)的問(wèn)題,首先一個(gè)覺(jué)得自己會(huì)java和c++,然后我學(xué)習(xí)python就很牛,但是你要知道語(yǔ)言是有很多相同的地方,但是不是通用,一定要自己學(xué)習(xí)的仔細(xì)。還有一種就是覺(jué)得我不會(huì)英語(yǔ),我要先去把英語(yǔ)學(xué)習(xí)好在來(lái)學(xué)python。因?yàn)樽约合脒€壞主意然后學(xué)習(xí),這樣的都是容易找進(jìn)誤區(qū)的。
怎么樣才能學(xué)好python
學(xué)好python你需要一個(gè)良好的環(huán)境,一個(gè)優(yōu)質(zhì)的開(kāi)發(fā)交流群,群里都是那種相互幫助的人才是可以的,我有建立一個(gè)python學(xué)習(xí)交流群,在群里我們相互幫助,相互關(guān)心,相互分享內(nèi)容,這樣出問(wèn)題幫助你的人就比較多,群號(hào)是483,還有546,最后是416,這樣就可以找到大神聚合的群,如果你只愿意別人幫助你,不愿意分享或者幫助別人,那就請(qǐng)不要加了,你把你會(huì)的告訴別人這是一種分享。
總結(jié)
以上是生活随笔為你收集整理的python官网学习爬虫资料_Python爬虫学习?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: QC4+充电协议_原来那么多手机支持QC
- 下一篇: 3DMAX渲染AO(白膜)图的三种方法