Python 3 網路爬蟲學習建議?
如題,題主python只是比較熟悉numpy和scipy、matplotlib這三個包,都是做科研的時候在用。最近心血來潮自己寫了幾個機器學習演算法,然後想去網站上去爬一些東西玩玩,因為以後可能會想把它接到自己還沒寫完的自動交易程序里,但也只是個雛形,還有很長的路要走。
但在辦公室琢磨了一下午,發現網路爬蟲這裡又是個大坑,現階段了解的就是scrapy其實並不適合python3,於是我現在只是在學習requests和beautifulsoup這倆包了。想請教網路爬蟲這一塊的行家,有沒有什麼推薦看的教程或者教學、博客什麼的,真的想在這塊在仔細學習一下。
先謝過啦!
用py3寫爬蟲的話,強力推薦這本書,應該是目前最系統最完善介紹python爬蟲的書。可以去圖靈社區買電子版。書的內容很新也很系統,從beautifulSoup,requests到ajax,圖像識別,單元測試。比起絕大多數blog零散的教程要好的多,看完書後就可以去做些實戰項目,這個時候可以去github上找類似的項目借鑒下。
英文版pdf: https://pan.baidu.com/s/1nvQ1Kpj 密碼: 82m9(個人覺得英文版更好)
中文版pdf: 圖靈社區 : 圖書 : Python網路數據採集 (支持正版)
-------------
更新:有評論說這本書內容比較淺,我表示贊同。但是對於新手來說,看完這本書,對於爬蟲基礎的應用與概念絕對有了初步的了解。其實國內有一本講爬蟲的好書,《自己動手寫網路爬蟲》,這本書除了介紹爬蟲基本原理,包括優先順序,寬度優先搜索,分散式爬蟲,多線程,還有雲計算,數據挖掘內容。只不過用了java來實現,但是思路是相同的。
在我博客連載的我寫的爬蟲系列教程,歡迎與我聯繫探討~~~~
希望能幫到你
爬蟲教程(1)基礎入門
爬蟲教程(2)性能進階
知乎用戶信息爬蟲(規模化爬取)
用scrapy爬取豆瓣電影新片榜
用scrapy對豆瓣top250頁面爬取(多頁面爬取)
用scrapy自動爬取下載圖片
用scrapy自動下載石原sama的豆瓣影人圖集(727張圖片,自動下載)requests,re,threading,Queue,os有這幾個包基本上就夠用了。當初學習爬蟲的時候一點都不懂,甚至連爬蟲是什麼都不知道就在學了,但是懷著不懂裝懂的精神,到現在基本上也算對爬蟲了解一二。
正如你所說,爬蟲是個大坑!因為這不僅僅是Python的事,想要學好爬蟲,需要學習:網路基礎知識(post/get/抓包)、(推薦)正則表達式(re模塊)、多線程/多進程、資料庫(儲存)。
還有各種各樣的問題:Python蛋疼的編碼問題、遇到Ajax就要用selenium(效率低)、遇到驗證碼腫么辦(我放棄)、需要模擬登錄(我直接用cookies,在這裡推薦requests,用法是:requests.get(url,cookies=cookies))、被網站禁ip等等
所以,如果你是想學爬蟲,那麼就慢慢磨吧。但是你是想學習機器學習,網上那麼多的數據集,可以不必專門學謝謝邀請!
寫python爬蟲2年多了,主要用的scrapy。關於python3,還沒有開始學;在這方面,我算是傳統的。一直在思考什麼時候轉python3。我主要關注的是我常用的python庫是否支持,一旦支持,就立刻轉python3.從最早的django、MySQLdb、PIL(Pillow)不支持,但現在這三者都支持了。所以在做web項目的時候是可以直接用python3了。所以現在的計劃是今年下半年轉python3。
說回爬蟲。scrapy確實使用者眾,可惜還不支持python3。所以現在的爬蟲項目還是用python2.7。現在用著非常順手。我的思路是,用django開發業務邏輯,根據業務邏輯建立的model,用scrapy抓取。是的,我的項目將django和scrapy代碼放在一個repo了。也可以分開。另外,scrapy的調度使用的是celery,所有爬蟲的調度時間和頻率都是用celery控制的。django、scrapy、celery是我做開發的三大法器。
如果你不想使用scrapy等框架,像上面的回答一樣,用一些請求庫和解析庫也能搭建出來。但我傾向於用django、celery、scrapy搭建通用的抓取系統。簡單說,用django建立模型,scrapy做一些常用爬蟲,規則定義模塊;celery制定調度策略,可以非常快地建立一套系統。
規則定義模塊 不是說的scrapy的Rule,而是我自定義的一套規則。它描述了抓取的起始URL如何獲取,如何發現需要的url及處理動作,需要抓取哪個Item, Item中每個Field的規則定義(xpath、css、json, processors,default value,是否需要更新等)。這裡說不完整,確實比較發雜。對於熟悉這套規則的人來說,比較簡單,抓取過程變成了定義item及規則,寫好調度策略即可。
這樣做的另一個好處是,有利於經驗積累。因為在抓取過程中遇到過各種各樣的坑,都在這套系統上解決,這樣一套好用、穩定的爬蟲系統就建立了。
想過把這些代碼產品化,但確實太複雜了,還在不斷完善中。但好處已經出現。新開始一個項目非常快,非常簡單。
寫得有點亂。歡迎隨時交流!直接用我在另外一個問題上的答案吧:
Python爬蟲還算比較簡單的。我學習Python爬蟲的步驟大概是:
1. 學習Python基本語法,並熟練使用
2. 學習Python中關於爬蟲的幾個重要的內置庫:urllib/http/Cookie等
3. 學習正則表達式,beautifulsoup等解析網頁的工具或包
4. 利用上幾步學習的至少爬取比較簡單的網站,比如一些應用市場等等,不需要登陸
5. 學習利用工具分析網頁請求流程、學習模擬登陸,拿新浪微博、知乎等需要登陸的網站進行練習
6. 學習Python中關於多線程、多進程的東西,將以前寫的代碼改為多線程版本,提高效率
7. 學習Python中的爬蟲框架,或者自己寫一個爬蟲框架。
更高級的,還有驗證碼識別、js動態請求、js執行、代理IP等等。
推薦一個我自己的專欄:擼代碼,學知識 - 知乎專欄,裡邊有一些爬蟲的基礎,以及自己嘗試寫的一個小型爬蟲框架。
對這個問題,最佳的答案就是:lining0806/PythonSpiderNotes
Python入門網路爬蟲之精華版
Python學習網路爬蟲主要分3個大的版塊:抓取,分析,存儲
另外,比較常用的爬蟲框架Scrapy,這裡最後也詳細介紹一下。
首先列舉一下本人總結的相關文章,這些覆蓋了入門網路爬蟲需要的基本概念和技巧:寧哥的小站-網路爬蟲
當我們在瀏覽器中輸入一個url後回車,後台會發生什麼?比如說你輸入http://www.lining0806.com/,你就會看到寧哥的小站首頁。
簡單來說這段過程發生了以下四個步驟:
- 查找域名對應的IP地址。
- 向IP對應的伺服器發送請求。
- 伺服器響應請求,發回網頁內容。
- 瀏覽器解析網頁內容。
網路爬蟲要做的,簡單來說,就是實現瀏覽器的功能。通過指定url,直接返回給用戶所需要的數據,而不需要一步步人工去操縱瀏覽器獲取。
抓取
這一步,你要明確要得到的內容是什麼?是HTML源碼,還是Json格式的字元串等。
1. 最基本的抓取
抓取大多數情況屬於get請求,即直接從對方伺服器上獲取數據。
首先,Python中自帶urllib及urllib2這兩個模塊,基本上能滿足一般的頁面抓取。另外,requests也是非常有用的包,與此類似的,還有httplib2等等。
Requests:
import requests
response = requests.get(url)
content = requests.get(url).content
print "response headers:", response.headers
print "content:", content
Urllib2:
import urllib2
response = urllib2.urlopen(url)
content = urllib2.urlopen(url).read()
print "response headers:", response.headers
print "content:", content
Httplib2:
import httplib2
http = httplib2.Http()
response_headers, content = http.request(url, "GET")
print "response headers:", response_headers
print "content:", content
此外,對於帶有查詢欄位的url,get請求一般會將來請求的數據附在url之後,以?分割url和傳輸數據,多個參數用連接。
data = {"data1":"XXXXX", "data2":"XXXXX"}
Requests:data為dict,json
import requests
response = requests.get(url=url, params=data)
Urllib2:data為string
import urllib, urllib2
data = urllib.urlencode(data)
full_url = url+"?"+data
response = urllib2.urlopen(full_url)
相關參考:網易新聞排行榜抓取回顧
參考項目:網路爬蟲之最基本的爬蟲:爬取網易新聞排行榜
2. 對於登陸情況的處理
2.1 使用表單登陸
這種情況屬於post請求,即先向伺服器發送表單數據,伺服器再將返回的cookie存入本地。
data = {"data1":"XXXXX", "data2":"XXXXX"}
Requests:data為dict,json
import requests
response = requests.post(url=url, data=data)
Urllib2:data為string
import urllib, urllib2
data = urllib.urlencode(data)
req = urllib2.Request(url=url, data=data)
response = urllib2.urlopen(req)
2.2 使用cookie登陸
使用cookie登陸,伺服器會認為你是一個已登陸的用戶,所以就會返回給你一個已登陸的內容。因此,需要驗證碼的情況可以使用帶驗證碼登陸的cookie解決。
import requests
requests_session = requests.session()
response = requests_session.post(url=url_login, data=data)
若存在驗證碼,此時採用response = requests_session.post(url=url_login, data=data)是不行的,做法應該如下:
response_captcha = requests_session.get(url=url_login, cookies=cookies)
response1 = requests.get(url_login) # 未登陸
response2 = requests_session.get(url_login) # 已登陸,因為之前拿到了Response Cookie!
response3 = requests_session.get(url_results) # 已登陸,因為之前拿到了Response Cookie!
相關參考:網路爬蟲-驗證碼登陸
參考項目:網路爬蟲之用戶名密碼及驗證碼登陸:爬取知乎網站
3. 對於反爬蟲機制的處理
3.1 使用代理
適用情況:限制IP地址情況,也可解決由於「頻繁點擊」而需要輸入驗證碼登陸的情況。
這種情況最好的辦法就是維護一個代理IP池,網上有很多免費的代理IP,良莠不齊,可以通過篩選找到能用的。對於「頻繁點擊」的情況,我們還可以通過限制爬蟲訪問網站的頻率來避免被網站禁掉。
proxies = {"http":"http://XX.XX.XX.XX:XXXX"}
Requests:
import requests
response = requests.get(url=url, proxies=proxies)
Urllib2:
import urllib2
proxy_support = urllib2.ProxyHandler(proxies)
opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler)
urllib2.install_opener(opener) # 安裝opener,此後調用urlopen()時都會使用安裝過的opener對象
response = urllib2.urlopen(url)
3.2 時間設置
適用情況:限制頻率情況。
Requests,Urllib2都可以使用time庫的sleep()函數:
import time
time.sleep(1)
3.3 偽裝成瀏覽器,或者反「反盜鏈」
有些網站會檢查你是不是真的瀏覽器訪問,還是機器自動訪問的。這種情況,加上User-Agent,表明你是瀏覽器訪問即可。有時還會檢查是否帶Referer信息還會檢查你的Referer是否合法,一般再加上Referer。
headers = {"User-Agent":"XXXXX"} # 偽裝成瀏覽器訪問,適用於拒絕爬蟲的網站
headers = {"Referer":"XXXXX"}
headers = {"User-Agent":"XXXXX", "Referer":"XXXXX"}
Requests:
response = requests.get(url=url, headers=headers)
Urllib2:
import urllib, urllib2
req = urllib2.Request(url=url, headers=headers)
response = urllib2.urlopen(req)
4. 對於斷線重連
不多說。
def multi_session(session, *arg):
retryTimes = 20
while retryTimes&>0:
try:
return session.post(*arg)
except:
print ".",
retryTimes -= 1
或者
def multi_open(opener, *arg):
retryTimes = 20
while retryTimes&>0:
try:
return opener.open(*arg)
except:
print ".",
retryTimes -= 1
這樣我們就可以使用multi_session或multi_open對爬蟲抓取的session或opener進行保持。
5. 多進程抓取
這裡針對華爾街見聞進行並行抓取的實驗對比:Python多進程抓取 與 Java單線程和多線程抓取
相關參考:關於Python和Java的多進程多線程計算方法對比
6. 對於Ajax請求的處理
對於「載入更多」情況,使用Ajax來傳輸很多數據。
它的工作原理是:從網頁的url載入網頁的源代碼之後,會在瀏覽器里執行JavaScript程序。這些程序會載入更多的內容,「填充」到網頁里。這就是為什麼如果你直接去爬網頁本身的url,你會找不到頁面的實際內容。
這裡,若使用Google Chrome分析」請求「對應的鏈接(方法:右鍵→審查元素→Network→清空,點擊」載入更多「,出現對應的GET鏈接尋找Type為text/html的,點擊,查看get參數或者複製Request URL),循環過程。
- 如果「請求」之前有頁面,依據上一步的網址進行分析推導第1頁。以此類推,抓取抓Ajax地址的數據。
- 對返回的json格式數據(str)進行正則匹配。json格式數據中,需從"uxxxx"形式的unicode_escape編碼轉換成u"uxxxx"的unicode編碼。
7. 自動化測試工具Selenium
Selenium是一款自動化測試工具。它能實現操縱瀏覽器,包括字元填充、滑鼠點擊、獲取元素、頁面切換等一系列操作。總之,凡是瀏覽器能做的事,Selenium都能夠做到。
這裡列出在給定城市列表後,使用selenium來動態抓取去哪兒網的票價信息的代碼。
參考項目:網路爬蟲之Selenium使用代理登陸:爬取去哪兒網站
8. 驗證碼識別
對於網站有驗證碼的情況,我們有三種辦法:
- 使用代理,更新IP。
- 使用cookie登陸。
- 驗證碼識別。
使用代理和使用cookie登陸之前已經講過,下面講一下驗證碼識別。
可以利用開源的Tesseract-OCR系統進行驗證碼圖片的下載及識別,將識別的字元傳到爬蟲系統進行模擬登陸。當然也可以將驗證碼圖片上傳到打碼平台上進行識別。如果不成功,可以再次更新驗證碼識別,直到成功為止。
參考項目:驗證碼識別項目第一版:Captcha1
爬取有兩個需要注意的問題:
- 如何監控一系列網站的更新情況,也就是說,如何進行增量式爬取?
- 對於海量數據,如何實現分散式爬取?
分析
抓取之後就是對抓取的內容進行分析,你需要什麼內容,就從中提煉出相關的內容來。
常見的分析工具有正則表達式,BeautifulSoup,lxml等等。
存儲
分析出我們需要的內容之後,接下來就是存儲了。
我們可以選擇存入文本文件,也可以選擇存入MySQL或MongoDB資料庫等。
存儲有兩個需要注意的問題:
- 如何進行網頁去重?
- 內容以什麼形式存儲?
Scrapy
Scrapy是一個基於Twisted的開源的Python爬蟲框架,在工業中應用非常廣泛。
相關內容可以參考基於Scrapy網路爬蟲的搭建,同時給出這篇文章介紹的微信搜索爬取的項目代碼,給大家作為學習參考。
參考項目:使用Scrapy或Requests遞歸抓取微信搜索結果
爬蟲不是很難。
掌握以下知識
1、了解基本html知識
2、抓包
3、標準庫urllib2 或python3 的urllib
4、第三方庫requests,lxml,selenium,phantomjs等使用
5、用上面的庫取到html 的pagesource,有2種方式可以獲取需要的信息。正則或xpath。
6、抓取ajax 等javascript生成的網頁。
7、抓取手機app的數據。
8、注意編碼處理(python 2)
...............
GitHub - xchaoinfo/fuck-login: 模擬登錄一些知名的網站,為了方便爬取需要登錄的網站
模擬登錄的一個項目,已經解決了,知乎,微博,百度等網站。
實現一個網站的模擬登錄,對於爬蟲來說就入門了。
另外可以看看我關於 Python 入門的回答 如何入門 Python 爬蟲? - xchaoinfo 的回答
取匿..
python只是比較熟悉numpy和scipy、matplotlib這三個包,都是做科研的時候在用。最近心血來潮自己寫了幾個機器學習演算法,然後想去網站上去爬一些東西玩玩,因為以後可能會想把它接到自己還沒寫完的自動交易程序里,但也只是個雛形,還有很長的路要走。
但在辦公室琢磨了一下午,發現網路爬蟲這裡又是個大坑,現階段了解的就是scrapy其實並不適合python3,於是我現在只是在學習requests和beautifulsoup這倆包了。想請教網路爬蟲這一塊的行家,有沒有什麼推薦看的教程或者教學、博客什麼的,真的想在這塊在仔細學習一下。
現在信息更新的非常快速,又迎來了大數據的時代, 各行各業如果不與時俱進,都將面臨優勝劣汰,知識是不斷的更新的,只有一技之長,才能立於不敗之地。
學習Python編程語言,是大家走入編程世界的最理想選擇,在初期入門階段就可以自己動手做一些實用的小項目,這樣會極大的增進我們學習編程的 熱情。
很多朋友都是零基礎,沒有過編程的經驗或者一知半解,在選擇編程語言的時候面臨著眾多選擇,不知道哪種語言才是適合自己去深入學習的。 現在全世界大約有幾百萬以上的Python語言的用戶,大家可以看一下我在百度指數截圖的趨勢圖片,其實通過玩蛇網LEO多年學習和使用Python的經驗,發現大家選擇Python做為編程開發語言,主要有以下幾種原因:
首先,Python編寫代碼的速度非常的快,而且非常注重代碼的可讀性,非常適合多人參與的項目。它具備了比以前傳統的腳本語言更好的可重用性,維護起來也很方便。與現在流行的編程語言Java、C、C++等相比較,同樣是完成一個功能,Python編寫的代碼短小精幹,開發的效率是其它語言的好幾倍。
再者,Python支持多平台開發,用它編寫的代碼可以不經過任何轉換就能在Linux與Windows系統任何移植,在蘋果OS系統也沒有任何兼容性的問題. 不單單是你自己編寫的代碼具有可移植性,就連繫統提供的一些GUI圖形化編程、資料庫操作、網頁網路編程介面都可以耗不費力的移植到任何系統中。
還有,最重要的一點是Python有非常豐富的標準庫(Standard Library),標準庫連Python安裝程序已經直接安裝到你的系統當中去了,無需另外下載。 標準庫的這些模塊從字元串到網路腳本編程、遊戲開發、科學計算、資料庫介面等都給我們提供超級多的功能應用,不需要我們自己再去造輪子了。
哪些人適合學習Python?
1.編程菜鳥新手:非常喜愛編程,以後想從事相關工作,但是零基礎,不知道入門選擇什麼編程語言的朋友,其實是最適合選擇Python編程語言的。
2.網站前端的開發人員:平常只關注div+css這些頁面技術,很多時候其實需要與後端開發人員進行交互的;
3.一些工程師以前在做很多SEO優化的時候,苦於不會編程,一些程序上面的問題,得不到解決,只能做做簡單的頁面優化。 現在學會Python之後,你和我一樣都可以編寫一些查詢收錄,排名,自動生成網路地圖的程序,解決棘手的SEO問題,本站站長Leo有10年個人站長和SEO經驗,有興趣的朋友,互相交流一下。
4.在校學生:想有一技之長,或者是自學編程的愛好者,希望快速入門,少走彎路,都可以選擇Python語言。
5.Java程序員:現在有很多Java程序在轉到Python語言,他們都被Python代碼的優美和開發效率所折服,你還等什麼呢!
以上列舉了一些學習Python語言的原因和選擇的理由,當然還有更多的因素決定大家是否學習Python。
無論是學習任何一門語言,基礎知識,就是基礎功非常的重要,找一個有豐富編程經驗的老師或者師兄帶著你會少走很多彎路, 你的進步速度也會快很多,無論我們學習的目的是什麼,不得不說Python真的是一門值得你付出時間去學習的優秀編程
語言。
誰會成為AI 和大數據時代的第一開發語言?這本已是一個不需要爭論的問題。如果說三年前,Matlab、Scala、R、Java 和 Python還各有機會,局面尚且不清楚,那麼三年之後,趨勢已經非常明確了,特別是前兩天 Facebook 開源了 PyTorch 之後,Python 作為 AI 時代頭牌語言的位置基本確立,未來的懸念僅僅是誰能坐穩第二把交椅。
不過聲音市場上還有一些雜音。最近一個有意學習數據科學的姑娘跟我說,她的一個朋友建議她從 Java 入手,因為 Hadoop 等大數據基礎設施是用 Java 寫的。
無獨有偶,上個月 IBM developerWorks 發表的一篇個人博客,用職位招聘網站indeed 上的數據做了一個統計。這篇文章本身算得上是客觀公正,實事求是,但傳到國內來,就被一些評論者曲解了本意,說 Python 的優勢地位尚未確立,鹿死誰手尚未可知,各位學習者不可盲目跟風啊,千萬要多方押寶,繼續撒胡椒面不要停。
在這裡我要明確表個態,對於希望加入到 AI 和大數據行業的開發人員來說,把雞蛋放在 Python 這個籃子里不但是安全的,而且是必須的。或者換個方式說,如果你將來想在這個行業混,什麼都不用想,先閉著眼睛把 Python 學會了。
當然,Python不是沒有它的問題和短處,你可以也應該有另外一種甚至幾種語言與 Python 形成搭配,但是Python 將坐穩數據分析和 AI 第一語言的位置,這一點毫無疑問。
我甚至認為,由於 Python 坐穩了這個位置,由於這個行業未來需要大批的從業者,更由於Python正在迅速成為全球大中小學編程入門課程的首選教學語言,這種開源動態腳本語言非常有機會在不久的將來成為第一種真正意義上的編程世界語。
討論編程語言的優劣興衰一直被認為是一個口水戰話題,被資深人士所不屑。但是我認為這次 Python 的上位是一件大事。
請設想一下,如果十五年之後,所有40歲以下的知識工作者,無分中外,從醫生到建築工程師,從辦公室秘書到電影導演,從作曲家到銷售,都能使用同一種編程語言進行基本的數據處理,調用雲上的人工智慧 API,操縱智能機器人,進而相互溝通想法,那麼這一普遍編程的協作網路,其意義將遠遠超越任何編程語言之爭。
目前看來,Python 最有希望擔任這個角色。
Python 的勝出令人意外,因為它缺點很明顯。它語法上自成一派,讓很多老手感到不習慣;「裸」 Python 的速度很慢,在不同的任務上比C 語言大約慢數十倍到數千倍不等;
由於全局解釋器鎖(GIL)的限制,單個Python 程序無法在多核上並發執行;
Python 2 和 Python 3 兩個版本長期並行,很多模塊需要同時維護兩個不同的版本,給開發者選擇帶來了很多不必要的混亂和麻煩;
由於不受任何一家公司的控制,一直以來也沒有一個技術巨頭肯死挺 Python ,所以相對於 Python 的應用之廣泛,其核心基礎設施所得到的投入和支持其實是非常薄弱的。
直到今天,26歲的Python 都還沒有一個官方標配的 JIT 編譯器,相比之下, Java 語言在其發布之後頭三年內就獲得了標配 JIT 。
另一個事情更能夠說明問題。Python 的 GIL 核心代碼 1992 年由該語言創造者 Guido van Rossum 編寫,此後十八年時間沒有一個人對這段至關重要的代碼改動過一個位元組。
十八年!直到2010年,Antoine Pitrou才對 GIL 進行了近二十年來的第一次改進,而且還僅在 Python 3.x 版本中使用。這也就是說,今天使用 Python 2.7 的大多數開發者,他們所寫的每一段程序仍然被26年前的一段代碼牢牢制約著。
說到 Python 的不足,我就想起發生在自己身上的一段小小的軼事。我多年前曾經在一篇文章里聲明自己看好 Python,而不看好 Ruby。
大概兩年多以前,有一個網友在微博里找到我,對我大加責備,說因為當年讀了我這篇文章,誤聽讒言,鬼迷心竅,一直專攻 Python,而始終對 Ruby 敬而遠之。
結果他Python 固然精通,但最近一學 Ruby,如此美好,如此甜蜜,喜不自勝,反過來憤然意識到,當年完全被我誤導了,在最美的年華錯過了最美的編程語言。我當時沒有更多的與他爭辯,也不知道他今天是否已經從Python後端、大數據分析、機器學習和 AI 工程師成功轉型為Rails快速開發高手。
我只是覺得,想要真正認識一件事物的價值,確實也不是一件容易的事情。
Python 就是這樣一個帶著各種毛病衝到第一方陣的賽車手,但即便到了幾年前,也沒有多少人相信它有機會摘取桂冠,很多人認為 Java 的位置不可動搖,還有人說一切程序都將用 JavaScript重寫。
但今天我們再看,Python 已經是數據分析和 AI的第一語言,網路攻防的第一黑客語言,正在成為編程入門教學的第一語言,雲計算系統管理第一語言。Python 也早就成為Web 開發、遊戲腳本、計算機視覺、物聯網管理和機器人開發的主流語言之一,隨著 Python 用戶可以預期的增長,它還有機會在多個領域裡登頂。
而且不要忘了,未來絕大多數的 Python 用戶並不是專業的程序員,而是今天還在使用 Excel、PowePoint、SAS、Matlab和視頻編輯器的那些人。
就拿 AI 來說,我們首先要問一下,AI 的主力人群在哪裡?如果我們今天靜態的來談這個話題,你可能會認為 AI 的主力是研究機構里的 AI 科學家、擁有博士學位的機器學習專家和演算法專家。
但上次我提到李開復的「AI紅利三段論」明確告訴我們,只要稍微把眼光放長遠一點,往後看三至五年,你會看到整個 AI 產業的從業人口將逐漸形成一個巨大的金字塔結構,上述的 AI 科學家僅僅是頂端的那麼一點點,95% 甚至更多的 AI 技術人員,都將是AI 工程師、應用工程師和AI 工具用戶。
我相信這些人幾乎都將被Python 一網打盡,成為 Python 陣營的龐大後備軍。這些潛在的 Python 用戶至今仍然在技術圈子之外,但隨著 AI 應用的發展,數百萬之眾的教師、公司職員、工程師、翻譯、編輯、醫生、銷售、管理者和公務員將裹挾著各自領域中的行業知識和數據資源,湧入 Python 和 AI 大潮之中,深刻的改變整個 IT,或者說 DT (數據科技)產業的整體格局和面貌。
為什麼 Python 能夠後來居上呢?
如果泛泛而論,我很可以列舉 Python 的一些優點,比如語言設計簡潔優雅,對程序員友好,開發效率高。但我認為這不是根本原因,因為其他一些語言在這方面表現得並不差。
還有人認為 Python 的優勢在於資源豐富,擁有堅實的數值演算法、圖標和數據處理基礎設施,建立了非常良好的生態環境,吸引了大批科學家以及各領域的專家使用,從而把雪球越滾越大。但我覺得這是倒因為果。為什麼偏偏是 Python 能夠吸引人們使用,建立起這麼好的基礎設施呢?
為什麼世界上最好的語言 PHP 裡頭就沒有 numpy 、NLTK、sk-learn、pandas 和 PyTorch 這樣級別的庫呢?為什麼 JavaScript 極度繁榮之後就搞得各種程序庫層次不齊,一地雞毛,而 Python 的各種程序庫既繁榮又有序,能夠保持較高水準呢?
我認為最根本的原因只有一點:Python 是眾多主流語言中唯一一個戰略定位明確,而且始終堅持原有戰略定位不動搖的語言。相比之下,太多的語言不斷的用戰術上無原則的勤奮去侵蝕和模糊自己的戰略定位,最終只能等而下之。
Python 的戰略定位是什麼?其實很簡單,就是要做一種簡單、易用但專業、嚴謹的通用組合語言,或者叫膠水語言,讓普通人也能夠很容易的入門,把各種基本程序元件拼裝在一起,協調運作。
正是因為堅持這個定位,Python 始終把語言本身的優美一致放在奇技妙招前面,始終把開發者效率放在CPU效率前面,始終把橫向擴張能力放在縱向深潛能力之前。長期堅持這些戰略選擇,為 Python 帶來了其他語言望塵莫及的豐富生態。
比如說,任何一個人,只要願意學習,可以在幾天的時間裡學會Python基礎部分,然後干很多很多事情,這種投入產出比可能是其他任何語言都無法相比的。
再比如說,正是由於 Python 語言本身慢,所以大家在開發被頻繁使用的核心程序庫時,大量使用 C 語言跟它配合,結果用 Python 開發的真實程序跑起來非常快,因為很有可能超過 80% 的時間系統執行的代碼是 C 寫的。
相反,如果 Python 不服氣,非要在速度上較勁,那麼結果很可能是裸速提高個幾倍,但這樣就沒人有動力為它開發 C 模塊了,最後的速度遠不如混合模式,而且很可能語言因此會變得更複雜,結果是一個又慢又醜陋的語言。
更重要的是,Python 的包裝能力、可組合性、可嵌入性都很好,可以把各種複雜性包裝在 Python 模塊里,暴露出漂亮的介面。很多時候,一個程序庫本身是用 C/C++ 寫的,但你會發現,直接使用 C 或者 C++ 去調用那個程序庫,從環境配置到介面調用,都非常麻煩,反而隔著一層,用其python 包裝庫更加清爽整潔,又快又漂亮。
這些特點到了 AI 領域中,就成了 Python 的強大優勢。Python 也藉助 AI 和數據科學,攀爬到了編程語言生態鏈的頂級位置。Python 與 AI綁在一起,對它們來說,無論是電子商務、搜索引擎、社交網路還是智能硬體,未來都只是生態鏈下游的數據奶牛、電子神經和執行工具,都將聽命於自己。
對編程語言發展歷史缺乏了解的人可能會覺得,Python 的戰略定位是犬儒主義和缺乏進取心的。但事實證明,能同時做到簡單而嚴謹、易用而專業,是很難的,而能夠堅守膠水語言的定位,更是難上加難。
有的語言,從一開始就是出於學術而非實用的目的,學習曲線過於陡峭,一般人很難接近。有的語言,過於依賴背後金主的商業支持,好的時候風光無限,一旦被打入冷宮,連生存下去都成問題。
有的語言,設計的時候有明確的假想場景,要麼是為了解決大規模並發,要麼是為了解決矩陣運算,要麼是為了做網頁渲染模板,一旦離開這個場景,就各種不爽。
更多的語言,剛剛取得一點成功,就迫不及待的想成為全能冠軍,在各個方向上拚命的伸展觸角,特別是在增強表達能力和提升性能方面經常過分積極,不惜將核心語言改得面目全非,最後變成誰都無法掌控的龐然大物。
相比之下,Python 是現代編程語言設計和演化當中的一個成功典範。
Python 之所以在戰略定位上如此清晰,戰略堅持上如此堅定,歸根結底是因為其社區構建了一個堪稱典範的決策和治理機制。
這個機制以 Guido van Rossum (BDFL,Pythoners 都知道這是什麼意思), DavidBeazley, Raymond Hettinger 等人為核心,以 PEP 為組織平台,民主而有序,集中而開明。只要這個機制本身得以維繫,Python 在可見的未來里仍將一路平穩上行。
最有可能向 Python 發起挑戰的,當然是Java。Java 的用戶存量大,它本身也是一種戰略定位清晰而且非常堅定的語言。但我並不認為 Java 有很大的機會,因為它本質上是為構造大型複雜系統而設計的。
什麼是大型複雜系統?就是由人清清楚楚描述和構造出來的系統,其規模和複雜性是外生的,或者說外界賦予的。而 AI 的本質是一個自學習、自組織的系統,其規模和複雜性是一個數學模型在數據的餵養下自己長出來的,是內生的。
因此,Java大多數的語言結構對於大數據的處理和 AI 系統的開發顯得使不上勁,你強的東西這裡用不上,這裡需要的東西你做起來又彆扭。而 Python 在數據處理方面的簡潔強悍早就盡人皆知。對比兩個功能相同的 Java 和 Python 機器學習程序,正常人只要看兩眼就能做出判斷,一定是 Python 程序更加清爽痛快。
大概在 2003 或者 2004 年的時候,我買過一本 Python 的書,作者是一位巴西人。他說自己之所以堅定的選擇 Python,是因為他小時候經常夢到未來世界將由一條大蟒蛇(蟒蛇的英文為python)統治。我當時覺得這哥們好可憐,做個夢都能夢到這麼恐怖的場景。但今天來看,也許他只是像黑客帝國里的程序員安德森一樣,不小心穿越到未來,並且窺探到了世界的真相。
最後:自己多問下為什麼學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學習交流群,在群里我們相互幫助,相互關心,相互分享內容,這樣出問題幫助你的人就比較多,群號是304050799,這樣就可以找到大神聚合的群,如果你只願意別人幫助你,不願意分享或者幫助別人,那就請不要加了,你把你會的告訴別人這是一種分享。
直接上手幾個項目,入門的話 無非就是 urllib的用法。
書倒不要看很多, 多搞幾個項目,培養下興趣,你就有動力去做了。
這裡有一些練手的項目
Python 的練手項目有哪些值得推薦? - 知乎用戶的回答
python 獲取 中國證券網 的公告
抓取 知乎日報 中的 大誤 系類文章,生成電子書推送到kindle
python爬蟲 推送知乎文章到kindle電子書
Python3爬蟲視頻學習教程 | 靜覓
大綱是這個樣子的:
一、環境篇
- Python3+Pip環境配置
- MongoDB環境配置
- Redis環境配置
- MySQL環境配置
- Python多版本共存配置
- Python爬蟲常用庫的安裝
二、基礎篇
- 爬蟲基本原理
- Urllib庫基本使用
- Requests庫基本使用
- 正則表達式基礎
- BeautifulSoup詳解
- PyQuery詳解
- Selenium詳解
三、實戰篇
- 使用Requests+正則表達式爬取貓眼電影
- 分析Ajax請求並抓取今日頭條街拍美圖
- 使用Selenium模擬瀏覽器抓取淘寶商品美食信息
- 使用Redis+Flask維護一個動態代理池
- 使用代理處理反爬抓取微信文章
四、框架篇
- PySpider框架基本使用及抓取TripAdvisor實戰
- PySpider架構概述及用法詳解
- Scrapy框架的安裝
- Scrapy框架基本使用
- Scrapy命令行詳解
- Scrapy中選擇器的用法
- Scrapy中Spiders的用法
- Scrapy中Item Pipeline的用法
- Scrapy中Download Middleware的用法
- Scrapy爬取知乎用戶信息實戰
五、分散式篇
- Scrapy分散式原理及Scrapy-Redis源碼解析
- Scrapy分散式架構搭建抓取知乎
- Scrapy分散式的部署詳解
大家好哈,現在呢靜覓博客已經兩年多啦,可能大家過來更多看到的是爬蟲方面的博文,首先非常感謝大家的支持,希望我的博文對大家有幫助!
之前我寫了一些Python爬蟲方面的文章,Python爬蟲學習系列教程,涉及到了基礎和進階的一些內容,當時更多用到的是Urllib還有正則,後來又陸續增加了一些文章,在學習過程中慢慢積累慢慢成型了一套算不上教程的教程,後來有越來越多的小夥伴學習和支持我感到非常開心,再次感謝大家!
不過其實這些教程總的來說有一些問題:
- 當時用的Python2寫的,剛寫的時候Scrapy這個框架也沒有支持Python3,一些Python3爬蟲庫也不怎麼成熟,所以當時選擇了Python2。但到現在,Python3發展迅速,爬蟲庫也越來越成熟,而且Python2在不久的將來就會停止維護了,所以慢慢地,我的語言重心也慢慢轉向了Python3,我也相信Python3會成為主流。所以說之前的一套課程算是有點過時了,相信大家肯定還在尋找Python3的一些教程。
- 當時學習的時候主要用的urllib,正則,所以這些文章的較大篇幅也都是urllib和正則的一些東西,後來的一些高級庫都是在後面慢慢加的,而且一些高級的框架用法也沒有做深入講解,所以感覺整個內容有點頭重腳輕,安排不合理。而且現在分散式越來越火,那麼分散式爬蟲的應用相必也是越來越廣泛,之前的課程也沒有做系統講解。
- 在介紹一些操作的時候可能介紹不全面,環境的配置也沒有兼顧各個平台,所以可能有些小夥伴摸不著頭腦,可能卡在某一步不知道接下來是怎麼做的了。
那麼綜合上面的問題呢,最近我花了前前後後將近一個月的時間錄製了一套新的Pyhthon3爬蟲視頻教程,將我之前做爬蟲的一些經驗重新梳理和整合,利用Python3編寫,從環境配置、基礎庫講解到案例實戰、框架使用,最後再到分散式爬蟲進行了比較系統的講解。
上面就是課程大綱。
整個課程是從小白起點的,從環境配置和基礎開始講起,環境安裝部分三大平台都有介紹,實戰的部分我是一邊寫一邊講解,還有一些分散式爬蟲的搭建流程也做了介紹。
不過這個課程是收費的,其實裡面也包含了我學習爬蟲以來的經驗和汗水,我在做講解的時候也會把我學習爬蟲的一些思路和想法講解出來,避免大家走一些彎路,希望大家可以支持一下!
不過在這裡有免費的視頻,是屬於整個課程的一部分,大家可以直接觀看
Python3爬蟲三大案例實戰分享整套視頻課程放在天善智能這邊了,大家如果感興趣的話可以直接在這裡購買,499元。
課程鏈接如下:
自己動手,豐衣足食!Python3網路爬蟲實戰案例最後的最後希望大家可以多多支持!非常感謝!知識就是力量!也希望我的課程能為您創造更大的財富!
urllib2 urllib
這麼多人推薦beautifulsoup的話 其實我想推薦pyQuery這個包
如果你對jQuery有所了解的話 這個包會比beautifulsoup更好上手
學會瀏覽器抓包 像chrome的Network欄的抓包功能就很好用
python2的話編碼是坑 我暫時還沒有用過python3寫爬蟲……
像反反爬蟲策略一般是看見了再慢慢解決
東西都是從寫代碼裡面學來的 不是看文檔看會的
如果不是為了快速投入生產,只是為了學習,我不建議直接上框架,建議直接從http層開始手動寫.
1. html parser
2. http 層 以及websocket
3. javascript
4. 一些登陸協議 如oauth,ntml等
5. 一些mime解析規範,以及一些第三方解析協議例如adobe AMF3
6. 一些加密技術
7. 了解一些流媒體技術
8.驗證碼識別
1??:先說html xml parser,不是因為他簡單,而是入門門檻低,理解門檻低,不考慮效率的話可以說你只要會正則表達式,就能寫一個基本的html解析器,基本就是就是尖括弧入棧出棧解析tag 與 attributes ,然後tag 出棧入棧解析各個層次 ,html 本質是一個允許重名key值 的字典 ,html ,dict, windows註冊表,路由器命令行,linux路徑本質是同一種東西,他們可以互相轉化 . 照著html標準實現自己能實現多少是多少,然後你在這個過程中不由自主的就會找到lxml這個庫,然後你不由自主就會學習xpath,xpath的主要目的是定位元素,進而你就會對javascript jQuery產生興趣,你就會想怎麼在xpath語法和jQuery語法之間構建橋樑(這樣的庫已經有了),然後你難道不想在字典結構和html結構之間構建橋樑?.......後面的事情就自然而然了,該用什麼庫你就知道去github有目的的搜索了,如果的想研究的深這方面大有學問可做:你試過解析大小可以達到2G的命令行文本嗎?(這不是隨便想的問題,cisco的高端路由器命令行全部dump出來差不多2G)你試過在firebug 里載入一個非常大的 json 結構嗎?......
2??http 層 ,爬蟲最開始遇到的問題就是cookie ,怎樣更新cookie ,cookie 的相關欄位 path, expire,httponly, secure....你自己全部按照瀏覽器和 server 的標準行為實現一遍 ,實現這個的門檻很低,只要會正則表達式,會創建文件夾就可以,你不用全實現,你慢慢的 就會學會 各種緩存規則,各種expire,etag,last-modified,if-none-match.....的具體用法,你會學到不少瀏覽器和server端知識,可能會了解些apache 的知識,可能會讀很多http 相關rfc ,這是你可能會找到curl 庫,cookiejar 庫幫助你,更重要的是 你在自己實現過程中學會了自己按照自己的需求改庫. http 層的很多協議,不追求效率的話,會處理字元串就可以自己實現. 有些數據是用類似websocket之類的協議帶外傳輸的.websocket的rfc很短 演算法也簡單,websocket用fiddle是抓不到的(現在版本的charles不知道)所以你可以嘗試自己實現,在實現過程中你可能會找到ws 或者socketio庫,還是那句話,你造輪子不白造,你可能積攢下了修這些庫的技能.
3??javascript ,做爬蟲可以不會用javascript編程,但是必須能看懂javadcript,因為既然是學習,我認為大部分人不具備實現一個javascript解析器的功底,而現代網頁已經脫離不開javascript了,可讀性的javascript有現成的庫可以壓縮,但是我還沒見過可以把壓縮過的javascript 代碼 轉換回可讀性javascript的工具,不是所有的js 都有.min 和完全版的文件的 ,所以很多時候需要你人力去讀,然後用python 把js 重寫! 在這個過程中你可能會搜到 selenium phantomjs等庫,你實力夠powerful 就可以自己寫js解析器,同時你爬的網頁多了就會或多或少學到一些js框架 :jQuery,Ext,dwr.......
4??:oauth 不說了twitter google都有,ntlm有over http版本的,我以前公司內部的workbench就是ntlm認證,為何不照著微軟文檔自己實現一遍練練呢?所以我練了.........
5??:http body中用了很多mime協議 例如傳大量數據 或者圖片等用的multipart/form-data 協議 ,以及一些老的網站用到的AMF3 協議,multipart 也是只要會正則照著rfc實現就完事了,在這個過程中你還會學到很多email的知識,email也用很多mime, AMF3 稍微複雜些,但是原理也就是層層嵌套,文檔adobe也有(charles可以解析)......你自己嘗試實現 ,在這個過程中你肯定會去搜現有庫,順帶搜adobe的時候就會學到postscript pdf......一舉多得
6??:現在大部分加密在https上做了,但是難免有例外,早起的weibo,我爬的時候,有一個密碼是 實現在http之上的RSA,現在不知道是不是了..........
7??:youtube,bilibili ....
8??: 這個我搞不定,但是現在有付費的驗證碼識別API 不貴……這個超出我能力範疇了,我沒有太多經驗
,搜庫很多是需要餵養學習的庫
爬蟲可以學很多東西,我的觀點:如果你是工程項目,重複造輪子是大忌,如果是學習,輪子盡量自己造.
另外當你掌握了上面的,你就會追求高並發爬,就會 追求高效爬,就會遇到代理什麼的,那麼你在搜索過程中就會搜到nginx ,haproxy ......等等更多的框架,CDN知識應該也積累了,一併學或者了解下. 順帶的 twisted 什麼的可能都會搜到順便學習. ....
css 等與可視化有關的內容與爬蟲無關,但是你搜索庫的過程中可能會遇到,然後可能不由自主的就遇到webkit,有了上面的積累 和庫的選擇,你做個粗糙的瀏覽器也就不是看上去那麼難了……
願你爬出一片天! 不用花很多時間,我主要職業是安裝網線的布線工,業餘時間多學多想多練.
我從寫爬蟲受益匪淺,共勉。
不要為爬蟲而爬蟲,除非這是你的工作或者你的興趣。
對於我而言,爬蟲的本質是減輕工作量的,如果手動操作需要兩天的任務,我會花一天時間寫個爬蟲,然後一個晚上就可以把數據爬取下來。如果你不確定用一半時間是否能寫出一個像樣的爬蟲,而且這個任務很趕也是一次性的,那還是手動操作。
如果你只是為了用爬蟲的話,我不建議從造輪子開始,而是選擇好輪子做一些拼裝工作。如果你只是想要相關的金融數據,你可以考慮引入tushare這個第三方包,或者先找找有沒有相關的,先搞清楚你的需求是什麼。學還是用?這個問題還是挺重要的。
最近寫一個不到40行小腳本(用了request、 BeautifulSoup、you-get),足夠讓我把某課程網站全部視頻下載了。用第三個輪子拼裝成一輛車,比先造三個輪子再拼裝要簡單得多。謝邀。
對python使用不是很深入,只是某次同學要讓幫忙搞定一個需求,才上手。 我寫爬蟲更多的是使用php,自己特意寫了一個php框架,GitHub - numberwolf/RollerPHP_framework: RollerPHP, 一款輕型PHP框架,支持PDO 和 Memcache,可拓展性高。
題注可以看一下,其實爬蟲不是什麼高技術東西,web後端語言寫出來也都大同小異,我身邊拿java寫的也一大票,關鍵在於你對於語言的理解,包括計算機網路,在http1中你對於header在抓取信息所取作用的理解。
對於爬蟲:我給lz幾點建議。
1.首先,你先了解一下python基礎語法。
2、了解基礎語法之後,你就可以試著用簡單的py來寫一個單線程爬蟲,要那種不需要登陸驗證的。在這期間,你也應該好好複習或者預習 and 學習一下簡單的正則表達式,這是在抓取信息中必不可少的,我曾經做iOS應用期間,使用爬蟲爬取自己學校的成績單,導json。
3.再正則表達式之後,你就應該了解一下session和cookie,之後可以模擬登陸一下http://zhihu.com的首頁,這一步完成之後,恭喜你,您已經入門了!
接下來的發展就看你自己了。
簡單粗暴:
網易雲課堂,搜索Python爬蟲實戰。
有一周免費版,也有四周收費版。
既然你學的是機器學習,建議免費版之後上收費班,絕對物有所值。
隨手截了幾張課程的章節
順便 @林茜茜
利息相關:第一批學員
首先要找個師傅,有人帶你感覺會完全不同
如果沒有師傅,你要有想法,要不會很無措
掌握好requeats,beautifulsoup這兩個庫,這是兩把鎚子,有了它看誰都像釘子
學會re正則,輪子哥是你的榜樣
文件讀寫,至少你要能寫csv,然後是excel等格式,資料庫讀寫
有了以上這些,政府網站,二逼頁面都能拿來練手了,最好找個黃網爬,sis,1024這類,還有那些用動力社區搭建的PHP網站為你提供無盡的資源,同時是你司機之路的助推器
接下來遇到需要註冊的網站,試試cookie和最簡單的圖像識別
遇到反爬了UA和IP池維護
數據結構的優化
謝邀
有幾個基本的庫要掌握:
1、提取網頁信息,發送表單,模擬登陸等用requests。
2、解析網頁內容,提取自己想要的東西用BeautifulSoup,這個庫真的很好用,多看一下官方文檔。
3、提取到的東西寫入文檔或者表格後續處理用python的doc模塊和csv模塊,如果要存到資料庫中用mysql。
4、ajax等動態頁面的提取用selenium。
5、多線程爬蟲用threading模塊或者multiprocessing pool庫下的map函數。
scrapy已經支持py3了,不過windows平台還是不支持py3+,學python還是換Linux或Mac好,不然裝各種第三方包依賴都裝到心累
還是找本書系統的看一下比較好。。。
推薦閱讀: