最近,為了公眾號的圖文,上網瘋狂的收集和看了一些有深度的新聞和有趣的引人深思的文字評論,並選擇了幾篇極品發布出去。但感覺一篇一篇的看實在是麻煩死了。想找一個簡單的解決辦法,看能不能自動把網上的資料收集起來,然後自己用統一篩選。不巧,最近準備學習下網路爬蟲相關知識,於是按照網上的教程自己學著試寫了一個小小的爬蟲,嘻嘻,是用來爬韓寒部落格的。
先把完整的代碼貼上來,如果朋友們需要實驗下,請先安裝python相關環境,然後在複製粘貼儲存,再按F5運行。
#匯入urllib庫,python訪問網頁必須庫import urllib#時間類庫import time#定義一個URL數組用來存放捕獲的URL地址,也就是需要爬的文字地址路徑url = [''] * 50#定義link變數,用來記錄第幾個URL地址link = 1#迴圈捕獲部落格目錄第一頁所有的文章連結,並下載#定義con變數來儲存urllib.urlopen開啟韓寒部落格的目錄位址,特別注意下'+str(page)+',用來變化每一頁目錄位址的con = urllib.urlopen('http://blog.sina.com.cn/s/articlelist_1191258123_0_1.html').read()#變數title用來儲存con變數中找到<a title=開頭元素的位置title = con.find(r'<a title=')#變數href用來儲存con變數中找到href='開頭元素的位置href = con.find(r'href=',title)#變數html用來儲存con變數中找到.html開頭元素的位置html = con.find(r'.html',href)#儲存第一個串連地址url[0] = con[href + 6:html + 5]content = urllib.urlopen(url[0]).read()open(r'hanhan/'+url[0][-26:],'w+').write(content)print '0 have downloaded',url[0]#迴圈捕獲每一篇文章的地址,並儲存在URL數組中while title != -1 and href != -1 and html != -1 and link < 50: #con[href + 6:html + 5]是用來取con字串href後6位到html倒數5位之間的字串 url[link] = con[href + 6:html + 5] #開啟讀取每一篇文章地址,並儲存在content中 content = urllib.urlopen(url[link]).read() #開啟hanhan這個檔案夾,如果裡面沒有url[link][-26:]這個字串命名的檔案,便將content裡的內容寫入,命名為url[link][-26:] open(r'hanhan/'+url[link][-26:],'w+').write(content) print link,'have downloaded',url[link] title = con.find(r'<a title=',html) href = con.find(r'href=',title) html = con.find(r'.html',href) #自增記數 link = link +1
這個爬蟲實現的功能還是很簡陋的,但作為入門我覺得還是夠的。它只是實現了儲存部落格第一頁目錄所有文章的HTML檔案,並沒有抓取特定的內容予以儲存。
還有我覺得有編程基礎的人,看起來應該不是很費力,基本的思想很簡單,就是先爬地址,然後爬一個地址就下地址對應的網頁,接著儲存為。我個人覺得,這段代碼還是有點邋遢,不夠簡潔明了。希望通過以後的學習能寫出品質更高的代碼。
裡面涉及到的一些方法通過尋找python文檔都能找到,也不難,裡面每一個語句我幾乎都標有備忘。
運行: