python有各類庫的支持,寫起爬蟲來十分方便。剛開始學時,使用了標準庫中的urllib, urllib2, re,還算比較容易,後來使用了bs4和requests的組合,感受就更加方便快捷了。html
本文中urllib庫用於封裝HTTP post的數據,它裏面還有不少方法,如urllib.urlretrieve能夠接收url對於的圖片或視頻文件;urllib2庫中,urllib2.Request(url, data, headers)用於設置請求的頭部,傳輸的數據等,urllib2.urlopen用於打開請求,獲取返回數據,還能夠設置超時時間,避免等待時間過長;re庫,用於從返回數據中提取本身想要的結果,經常使用的方法又search,match,findall等,具體正則匹配的知識能夠google或百度。python
個人python版本是2.7,2.x默認編碼是ascii,會遇到不少編碼問題,各個網頁的編碼也不盡相同,咱們須要根據實際狀況進行decode 和encode 。python3.x默認是unicode編碼,編碼問題少一些,可是對於gbk等編碼的網頁一樣須要decode,encode等操做。對於具體的網頁,咱們能夠經過瀏覽器打開網頁源碼,肯定好編碼。python3.x
如下我寫的第一個爬蟲:主要實現對目標url進行post訪問,傳遞搜索關鍵字 'keyWord': '什麼',獲取搜索結果中的文章標題及對應的url連接,保存到本地文件中。網頁是gbk編碼的,因此在post訪問時 'keyWord': '什麼' 須要編碼成gbk。瀏覽器
1 # coding:utf-8 2 import urllib 3 import urllib2 4 import re 5 6 #請求地址 7 url = 'http://www.chinagscourt.gov.cn/WebSearch/result.htm?site=lanzhou' 8 #設置請求頭部 9 user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' 10 headers = {'User-Agent': user_agent} 11 #封裝post的數據 12 values = {'keyWord': '什麼'.decode('utf-8').encode('gbk')} 13 data = urllib.urlencode(values) 14 #設置正則匹配模式 15 pattern = re.compile('<div class="list_tit">.*?<a href="(?P<url>.*?)".*?title=(?P<title>.*?)>',re.S) 16 try: 17 #設置請求 18 request = urllib2.Request(url, data, headers=headers) 19 #打開請求,獲取返回結果 20 response = urllib2.urlopen(request) 21 content = response.read().decode('gbk').encode('utf-8') 22 #匹配獲得想要的數據 23 items = re.findall(pattern,content) 24 25 except urllib2.URLError, e: 26 if hasattr(e, "code"): 27 print e.code 28 if hasattr(e, "reason"): 29 print e.reason 30 #寫入文件 31 with open("item.txt","w") as f: 32 for item in items: 33 f.write(item[0]+';'+item[1]+'\n')
如下是代碼執行後,item.txt中的結果:post
1 ../zyDetail.htm?id=924739;"爲何有最高人民法院的批示,個人案子仍是沒人處理" 2 ../zyDetail.htm?id=152422;"什麼是執行風險?" 3 ../zyDetail.htm?id=152426;"什麼是先予執行?"
對比網頁上輸入 "什麼" 後的搜索結果:google
總結:如今來看本身當時寫的第一個爬蟲,感受用urllib,urllib2,re作爬蟲確實有點麻煩,一樣的爬蟲,用requsts 和bs4來作,要簡單不少。此外,這個小爬蟲對於返回結果是多頁的狀況沒有考慮,有興趣的同窗能夠繼續實現。編碼
題外話:逛博客園不到一年,很慶幸實習時的同事推薦了這裏,讓我瞭解了許多知識,註冊後一直想本身也寫寫,但是總感受本身這麼菜能寫什麼,看了 你爲何不分享http://www.cnblogs.com/coffeedeveloper/p/4825177.html以後,感受本身不必顧忌那麼多,以前看了不少技術博客,受益不淺,如今稍微入門一點,但願也能幫上其它同窗。url