python官网学习爬虫资料_Python爬虫学习?
1 爬蟲是互聯網上最常見的一種東西了吧。
爬蟲這東西每天都在網上爬大量的信息,各大搜索引擎廠商每天都有上百萬的爬蟲在網絡上活動,這些爬蟲的作用就是給搜索引擎采集互聯網上最新的內容,采集來的內容經過分類、加工之后,進入搜索引擎的索引。這是爬蟲最常見的應用。
關于搜索引擎的理論非常多,應該已經形成系統的理論和方法了。這里不再多追求搜索引擎的細節,只來看看爬蟲如何爬有效的信息。
ps. 這個博客已經很久沒有更新了。現在時間越來越少,平時鮮有時間來更新博客了。
最近某人發現,python其實是一種很適合寫爬蟲的語言,而且python越用越順手。現在若是有人問我“c++和c#學哪一個?“之類的問題的時候,我一定會說,學python吧,因為生命短暫,你應該學習python。
所謂爬蟲,就是把網頁的html下載下來,然后從里面提取出來有用的信息,這些有用的信息一般就是正文,圖片,鏈接一類的信息。
針對特定網站的爬蟲就更好寫了,用正則表達式,把網頁里的鏈接信息找到,然后找到需要的信息,保存在本地,然后進入下一個鏈接重復上一次的過程。
下面的腳本演示如何從加菲貓的官網上把從1978年至今的所有漫畫全部下載下來
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
想學習python的爬蟲,除了python的四大經典爬蟲模塊外,那就不得不說說scrapy了,scrapy簡單來說就是為了爬取我們想要的數據而編寫的一個應用框架。更專業點的說法是:scrapy是python開發的一個為了爬取網站數據,提取結構性數據而編寫的應用框架,可以應用在數據挖掘、信息處理、存儲歷史數據等一些列的程序中,框架內包含的各種接口,可以讓我們靈活的將其應用于各種需求中。
那么,scrapy到底為我們提供了哪些高效的特性來簡化我們的工作呢:
對html,xml源數據的選擇和提取的支持,提供了selector選擇器和Xpath表達式進行處理,使用正則表達式來提取數據。提供交互式的shell終端,為編寫過程中驗證部分提取數據提供了便利(selector、xpath)通過feed為導出的數據提供了多種格式(json、csv、xml),多種存儲端(ftp、s3、本地文件系統)的內置支持。提供一些列在spider之間共享的可復用的過濾器即Item Loaders,內置的服務可以更好的進行智能文件爬取數據。針對非英語語系中不標準或者錯誤的編碼聲明,提供了自動檢測以及健壯的編碼支持。具有高擴展性,通過使用signals,使用設計好的API如中間件、extensions、pipelines來實現自己所需的功能。內置的中間件及擴展可以為cookies and session處理、Http壓縮、HTTP認證、HTTP緩存、user-agent、robots.txt等功能提供支持。內置Telent終端,通過在Scrapy進程中鉤入Python終端,使您可以查看并調試爬蟲。
網絡上最流行的scrapy架構為:
Scrapy Engine(爬蟲引擎):核心部分,用來處理整個系統的數據流。scheduler(調度器):用來接收引擎發過來的requests,并在引擎再次發來請求的時候,返回信息。Downloader(下載器):從scheduler處獲取目標網頁數據,并將數據返回給spiderSpiders(蜘蛛):主要用它指定域名和網頁的解析規則,并編寫用于分析經response返回的item的類以及額外跟進的URL類。每個Spider負責處理相應的網站。Item Pipeline(項目管道):負責處理spiders提取出來的item,并對其進行驗證、存儲。Downloader Middlewares(下載器中間件):位于Scrapy engine和downloader之間的鉤子,通過插入自定義的代碼,來擴展scrapy的功能,并處理Scrapy引擎與下載器之間的requests和response。Spider Middlewares(蜘蛛中間件):介于Scrapy engine和spider之間的鉤子,主要工作是處理spide的響應輸入和請求輸出。Scheduler Middlewares(調度中間件):介于Scrapy engine和scheduler之間的鉤子,從Scrapy引擎發送到調度的請求和響應。
整個爬蟲的工作流程可簡單理解為:
從初始URL開始,Scheduler會將其交給Downloader進行下載,Spider會對Downloader下載下來的數據進行分析。經Spider的分析有兩種結果:如果是需要進一步抓取的鏈接,則這些東西會被傳回Scheduler,;另一種是需要保存的數據,則被送到Item Pipeline那里經第三步,如果是第一種則再次回到第一步進行。如果是第中則對數據進行后期處理(詳細分析、過濾、存儲等)。另外,在數據流動的通道里還可以安裝各種中間件,進行必要的處理。
而在爬蟲的過程中,數據流懂得過程為:
引擎按照給定的初始網址,打開網站,找到處理該網站的Spider并向Spider請求要爬取的第一個網頁地址。引擎獲得地址后,使用scheduler進行request。處理完第一個網址后,引擎向調度器請求下一個目標網址。scheduler向引擎返回一個新的網址,引擎通過下載中間件將該網址轉給downloader。downloader繼續從網絡中獲取所需數據,下載完成后,返回一個response,攜帶者這些數據通過下載中間件流向引擎。引擎將收到的response通過Spider中間件流向Spider,交由Spider處理。Spider處理這個response并返回爬取到item或者新的request給引擎。引擎如果收到的是item則將其流向item Pipeline引擎如果收到的是新的request,則將其發向調度器。重復上述操作,直至沒有新的request,引擎關閉該網站,此次爬取結束。
本期對scrapy的簡單介紹就到這里,以后的文章將會從項目入手學習scrapy,如果你對scrapy也感興趣,可以關注一下以便系統為您繼續推薦。謝謝!
自己多問下為什么學python
如果一門語言沒有改變你的編程思維,那么它不值得你去學習”。如果這么說,我們大學的時候,學習了c,c++,java,C#,算是值得學習么?很多時候是不值得,我覺得我們大學的課程就是用java,c#,c++把"C程序設計"又上了一遍.
這是因為,學校的老師會C和java之類的,所以要跟著規矩開這門課,(這也就是為什么,許多學校還在教vb,),這也就是為什么,你所以為的一樣就是大家都有For都有while,都有switch..都有Class...都有int 都有float,所謂的不一樣就是用C有指針,java沒有,這就是為什么教育是失敗的,這也就是為什么,我目前認識的幾個編程大牛
python的優點:簡單 我所說的簡單,是相比于象C和C++這樣的語言,你為了編程,要學習許多偏底層的東西.在比如,你在學習一個新的編程范式,或者想要馬上做個例子看看,試驗某個API,如果你是寫java的,你不得不去寫一個main,寫一些構造,即使有IDE這樣的東西,能夠為你帶來代碼生成器,而我做得就是寫一段“腳本”,或者打開python交互式解釋器就行了。
自己認識的python朋友出去工作,工資比較高,然后自己又剛剛好是會python所以選擇學習python,這樣的人比較危險但是也比較有激勵,還有就是覺得python比其他開發語言好用。
學完python前景會咋樣
其實我個人是很看好python未來的就業前景的,因為我認識太多的工程師都已經在學python,很多都是月收入大幾萬的
我個人也并非一直用python。前些年主要用c/c++以及java開發一些通信,移動系統,互聯網通信。近3年開始才轉向python。坦白的說,這可能與你相處的公司以及環境不大一樣。隨便舉個例子,google的protocol buffer協議一出來就具有c++/python/java三種語言支持。google的廣告系統早在03,04年左右就一并對python進行了webservice支持,大部分涉及基礎核心系統的公司,都開始對python進行了擴展支持。甚至開源社區的postgresql數據庫,除了自身的ansi SQL,pgsql,pg/TCL,PG/PERL之外對python進行了內嵌支持,唯獨卻沒有呼聲很高的java。在FREEBSD(MIT)/LINUX(GPL)平臺上,對java可能排斥性比較大,但綜合而言,目前python發展還沒有java那種普及,主要是python大部分工作仍然是在較為深入地系統層和框架層做設計開發,例如django,SQLAlchemy,fail2ban,mail郵件系統,twisted等等。這部分對于那種習慣應用前輩們框架的編碼人員而言,缺乏創造力的他們根本無法適用這種開發。尤其在python涉及一些系統層面需要有較強的c/c++能力,這部分人在國內要么就累得要死沒時間,要么就啥都不會就會拷貝代碼,而國內公司也鮮有主動去做這部分基礎勞動的,大多都是等別人做好了在直接拿來用,所以造就了任何技術性的東西出來,國內都是先等等看,然后抄襲應用。
大環境如此,但千萬誤認為先等等看吧。對于一個技術人員而言,缺乏對新技術的渴望與熱情,這是一種非常危險的事情。我工作8年了,按照國內很多的人的說法早已不做代碼了,但又一次在聽一個老外的演講,他說他50多歲仍然每天堅持寫代碼,了解最新的動態,所以他才能做到他們公司的首席科學家,因此它才能時刻指導項目團隊前進并保證項目的質量。他坦言對于一個不寫代碼并且不了解最新的技術動態的技術人員或者技術團隊的負責人而言,這種團隊也就足夠做作小項目,一旦壓力和項目過大,就會有很多問題漏出來。
對于新人而言,無論學習什么技術,都要以鼓勵的姿態出現。太多用薪水和你個人所看到的現狀去衡量一門技術,那絕對是欠缺眼光的。任何一門技術,一旦有人學習,他有可能逐漸成為這個領域的專家,即便再濫再沒有人用的開發語言技術,他也有可能就是明日的奠基者或者大師。
自己如何確定目標
在生活中學會不斷挖掘自己的潛力。我們都是一個普通人,可能并不清楚自己到底在哪方面占有優勢。所以,學著在生活中找到自己的優勢,并根據優勢選擇一定的就業方向。
不隨波逐流。不要看周圍的人做什么,自己就做什么,也許別人做的并不適合你。別人的優勢很可能會成為你的劣勢。所以,堅定自己的想法,讓自己知道那些方面適合自己,自己可以勝任。
不斷嘗試可能成為自己的優勢。你不知道什么適合自己,所以才要大膽、勇敢地嘗試。找到一種可以屬于你的獨特的優勢。
堅定信念。一旦你堅定了自己的信念,就不要被別人的意見或是諷刺或是嘲笑所干擾。別人不是你,不懂的你在想什么,不清楚你開始這件事的源頭。你的事情,不了解你的人,沒有資格輕易評說。
不茫然,不多想。別讓太多的事干擾到你奮斗下去的信念。夢想不容許太多的雜念。那些雜念只會讓你的心愈來愈脆弱,多為一個人考慮,到頭來,傷害的還是自己。
選擇自己學習方法
每個人都有適合自己的方法,有的人去選擇自學,有的人選擇看視頻學習,有的人選擇報名培訓班,那在這個時候,你就要自己考慮清楚,到底那樣對的幫助是最大的,個人覺得是跟著培訓班最好的,畢竟人家的實戰項目多,我們學軟件開發的都知道實戰項目對于學好一門語言是 很重要的。
學習python有那些誤區
具體里面的誤區非常的多,那些就不需要我去寫出來,我給你說的一般都是心態的問題,首先一個覺得自己會java和c++,然后我學習python就很牛,但是你要知道語言是有很多相同的地方,但是不是通用,一定要自己學習的仔細。還有一種就是覺得我不會英語,我要先去把英語學習好在來學python。因為自己想還壞主意然后學習,這樣的都是容易找進誤區的。
怎么樣才能學好python
學好python你需要一個良好的環境,一個優質的開發交流群,群里都是那種相互幫助的人才是可以的,我有建立一個python學習交流群,在群里我們相互幫助,相互關心,相互分享內容,這樣出問題幫助你的人就比較多,群號是483,還有546,最后是416,這樣就可以找到大神聚合的群,如果你只愿意別人幫助你,不愿意分享或者幫助別人,那就請不要加了,你把你會的告訴別人這是一種分享。
總結
以上是生活随笔為你收集整理的python官网学习爬虫资料_Python爬虫学习?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QC4+充电协议_原来那么多手机支持QC
- 下一篇: 再见PDF提取收费!我用100行Pyth