3小時的Python學習成果展示(附源碼)
背景
前天買了個新玩具叫樹莓派,研究了不少資料後發現,大家基本上都會使用自帶的Python來寫一些程序,實現一些好玩的東西。
於是就開始找一些Python的基礎資料開始學習,這裡推薦廖雪峰的Python教程
突然想起一個編程經驗分享里提到,帶著目的直接開始寫,遇到問題搜索解決,這樣學習才是更自然的方法。
於是搜了一個實戰的項目案例:Python爬蟲實戰一之爬取糗事百科段子
為什麼選擇採集項目?
因為目前做互聯網產品,經常需要採集一些數據做分析,學會使用Python做數據採集,應用場景廣泛,Python語言據說也很適合這方面的工作。
具體代碼(注釋說明)
# _*_coding:utf-8_*_ n# 引入採集用的http類庫,以下庫都是python自帶 nimport urllibnimport urllib2n# 引入正則表達式庫nimport ren# 引入csv庫nimport csvn# 之前沒加下面的內容會報錯,說什麼ACSII碼兼容之類的問題nimport sysnreload(sys)nsys.setdefaultencoding(utf-8)nnn# 定義一個把採集到的欄位寫入CSV的方法ndef createListCSV(fileName = , dataList = []):ntwith open(fileName, w) as csvFile:ntt# 這句很重要,寫入BOM頭,否則Mac上的Excel打開文件亂碼(被坑了半天,這句網上搜到的,管用)nttcsvFile.write(xEFxBBxBF);nttcsvWriter = csv.writer(csvFile, delimiter = ,)ntt# 寫個表格的頭,方便Excel上的篩選操作nttcsvWriter.writerow([u"作者", u"內容", u"點贊數", u"評論數"]) nttfor data in dataList:ntttcsvWriter.writerow(data)ntttcsvFile.closenn# 採集的第二頁做測試npage = 2n# 模擬瀏覽器Header,不寫的話很多網站是禁止採集的nuser_agent = Mozilla/4.0 (compatible; MSIE 10.0; Windows NT)nheaders = {}nheaders[User-Agent] = user_agentnurl = http://www.qiushibaike.com/hot/page/ + str(page)ntry:nt# 創建請求並獲取到內容對象ntrequest = urllib2.Request(url, headers = headers)ntresponse = urllib2.urlopen(request)nt# 把獲取的內容對象轉化為utf-8文本ntcontent = response.read().decode(utf-8)nt# 寫正則匹配需要的欄位,先通過sublime的正則驗證無誤後填進去ntpattern = re.compile("<div.*>s*<div.*>s*<a.*s*<img.*s*</a>s*<a.*>s*<h2>(.*?)</h2>s*</a>s*</div>s*<div.*s*(.*)s*</div>s*<div.*s*<span.*?><i.*?>(d+)<.*s*<span.*s*<span.*s<a.*s<i.*?>(d+)")nt# 找到所有匹配的數據ntitems = re.findall(pattern, content)nt# 創建一個存儲採集內容的列表ntqiushiData = []ntfor item in items:ntt# 替換<br />為換行符nttreplaceBR = re.compile(<br/>)ntttext = re.sub(replaceBR, "n", item[1])ntt# 列印內容到Terminalnttprint text+"n"nttprint u"作者:%st點贊:%st評論:%s" %(item[0], item[2], item[3]) + "n"ntt# 把數據寫到列表對象中nttqiushiData.append([item[0], text, item[2], item[3]])nt# 把列表寫入CSVntcreateListCSV("test.csv", qiushiData)n# 不懂,抄過來的異常處理代碼nexcept urllib2.URLError, e:ntif hasattr(e, "code"):nttprint e.codentif hasattr(e, "reason"):nttprint e.reasonn
運行代碼後的控制台輸出結果如下:
生成的CSV文件,通過Excel篩選處理後結果:
總結
去年學習過一點Nodejs開發,所以學起來Python覺得不算很難,而且發現基礎知識都是相通的,就像李笑來老師說的:「知識獲取的越多,學習速度會越來越快。」
會編程真的是很實用的技能,立馬感覺手裡多了把「瑞士軍刀」。
一些經驗分享
遇到出錯提示,找到對應行去解決。
多用搜索引擎搜索,你遇到的問題別人早就遇到並解決了。比如遇到CSV亂碼時,搜「python csv 中文亂碼」
基礎知識很重要,一定要刻意練習,比如正則表達式。
帶著想法去找解決方案。比如一開始只是採集輸出到控制台,但想到如何存CSV跟別人分享或導入資料庫,就開始了CSV讀寫方面的研究。
最好有「科學上網」工具,這樣訪問國外資料網站會順暢很多,能提高效率。
推薦閱讀:
※如何理解用戶行為事件?
※如何看待APP採集用戶數據?
※如何分析國內知名採集工具的優缺點?
※嚴重數據傾斜文本分類,比如正反比1:20~100,適合什麼model,查准一般要做到多少可以上線?
※爬蟲訪問中,如何解決網站限制IP的問題?