用Python爬網頁需要了解什麼背景知識?

最近在學Python爬蟲,寫腳本進行模擬登錄時,對很多名詞一知半解,例如:

cookie, header, agent, proxy, timeout, HTTPError, URLError……

感覺這些詞多少都聽過,但也談不上真的知道。所以跟著教程寫東西時,稍微需要點變通就容易束手無策。


求問有什麼書或者網路資源,是可以比較系統性的介紹這塊內容的嗎?


要學會使用Python爬取網頁信息無外乎以下幾點內容:
1、要會Python
2、知道網頁信息如何呈現
3、了解網頁信息如何產生
4、學會如何提取網頁信息

第一步Python是工具,所以你必須熟練掌握它,要掌握到什麼程度呢?如果你只想寫一寫簡單的爬蟲,不要炫技不考慮爬蟲效率,你只需要掌握:

  • 數據類型和變數
  • 字元串和編碼
  • 使用list和tuple
  • 條件判斷、循環
  • 使用dict和set

你甚至不需要掌握函數、非同步、多線程、多進程,當然如果想要提高自己小爬蟲的爬蟲效率,提高數據的精確性,那麼記住最好的方式是去系統的學習一遍Python,去哪兒學習?Python教程

假設已經熟悉了最基礎的Python知識,那麼進入第二步:知道網頁信息如何呈現?你首先要知道所需要抓取的數據是怎樣的呈現的,就像是你要學做一幅畫,在開始之前你要知道這幅畫是用什麼畫出來的,鉛筆還是水彩筆...可能種類是多樣的,但是放到網頁信息來說這兒只有兩種呈現方式:
1、HTML (HTML 簡介)
2、JSON (JSON 簡介)
HTML是用來描述網頁的一種語言
JSON是一種輕量級的數據交換格式

假設你現在知道了數據是由HTML和JSON呈現出來的,那麼我們緊接著第三步:數據怎麼來?數據當然是從伺服器反饋給你的,為什麼要反饋給你?因為你發出了請求。

「Hi~ ,伺服器我要這個資源」
「正在傳輸中...」
「已經收到HTML或者JSON格式的數據」

這個請求是什麼請求?要搞清楚這一點你需要了解一下http的基礎知識,更加精確來說你需要去了解GET和POST是什麼,區別是什麼。也許你可以看看這個:淺談HTTP中Get與Post的區別 - hyddd - 博客園

很高興你使用的是Python,那麼你只需要去掌握好快速上手 - Requests 2.10.0 文檔,requests可以幫你模擬發出GET和POST請求,這真是太棒了。

飯菜已經備好,兩菜一湯美味佳肴,下面就是好好享受了。現在我們已經拿到了數據,我們需要在這些錯亂的數據中提取我們需要的數據,這時候我們有兩個選擇。

第一招:萬能鑰匙
Python正則表達式指南 ,再大再亂的內容,哪怕是大海撈針,只要告訴我這個針的樣子我都能從茫茫大海中撈出來,強大的正則表達式是你提取數據的不二之選。

第二招:笑裡藏刀
Beautiful Soup 4.2.0 文檔,或許我們有更好的選擇,我們把原始數據和我們想要的數據的樣子扔個這個Beautifulsoup,然後讓它幫我們去尋找,這也是一個不錯的方案,但是論靈活性,第二招還是略遜於第一招。

第三招:雙劍合璧
最厲害的招式莫過於結合第一招和第二招了,打破天下無敵手。

基礎知識我都會,可是我還是寫不了一個爬蟲啊!
客觀別急,這還沒完。

以下這些項目,你拿來學習學習練練手。

@xlzd的教學項目你值得擁有:

  • 03. 豆瓣電影TOP250
  • 04. 另一種抓取方式

還不夠?這兒有很多:

  • 知乎--你需要這些:Python3.x爬蟲學習資料整理
  • 如何學習Python爬蟲[入門篇]? - 知乎專欄
  • 知乎--Python學習路徑及練手項目合集

很多人問我如何學習Python爬蟲,為此我整理編寫了一本Python爬蟲相關的電子書,主要包括Python入門、Python爬蟲入門到進階、Python爬蟲面試總結等等。可以在微信公眾號【一個程序員的日常】後台回復關鍵詞【1】獲取這本電子書。


大部分爬蟲其實都是寫體力活,這些入門足矣(由於時間原因,所以不保證文中的方法現在依然可用,也不保證其準確性,僅供參考~):

  • 爬蟲必備——requests
  • 01. 準備
  • 02. 簡單的嘗試
  • 番外篇. 搭建稱手的Python開發環境
  • 03. 豆瓣電影TOP250
  • 04. 另一種抓取方式
  • 05. 存儲
  • 06. 海量數據的抓取策略
  • 07. 反爬機制&<1&>
  • 08. 模擬登錄
  • 09. 通過爬蟲找出我和輪子哥之間的最短關注鏈

  • 本質上,爬蟲是模擬瀏覽器發送HTTP請求,因此了解HTTP協議是寫爬蟲最基礎的背景知識了。能把《 圖解HTTP協議 》和《HTTP權威指南》兩本書中的內容讀懂60%就能勝任絕大部分爬蟲的請求策略了。還可以看下這篇文章:一次完整的HTTP請求過程

    Python的基礎知識不用說,肯定是要掌握的,此外正則表達式也要掌握,Python正則表達式指南 - AstralWind ,如果想進一步了解正則,看這本書:精通正則表達式

    爬蟲還需要了解字元編碼的處理,不同的網站,用的編碼格式不盡相同,難免會遇到編碼問題,尤其是python2,編碼問題真是蛋疼,看Python 編碼錯誤的本質原因

    爬下來的數據要存儲,MySQL,mongodb都是不錯的資料庫,了解基本資料庫CRUD操作是必須的,基礎書 MySQL必知必會 (豆瓣),進階書:高性能MySQL (豆瓣)

    終極問題:如何高效地爬取數據?涉及到防反爬策略,分散式爬取數據。Redis,消息隊列,等等,慢慢來吧....

    任何一個系統都是從0到1的過程。沒有一蹴而就的方案。


    我是公司里專職採集的,完成的多機器分散式爬蟲一直都在運行。前陣子從基礎到複雜反爬寫了博文,如果你用Python. 那可以來我博客,數據挖掘分類中找一找,有比較細緻的分析和源代碼,希望能幫到你。http://www.urlteam.org


    分享一個案例:

    背景

    中秋的時候,一個朋友給我發了一封郵件,說他在爬鏈家的時候,發現網頁返回的代碼都是亂碼,讓我幫他參謀參謀(中秋加班,真是敬業= =!),其實這個問題我很早就遇到過,之前在爬小說的時候稍微看了一下,不過沒當回事,其實這個問題就是對編碼的理解不到位導致的。

    問題

    很普通的一個爬蟲代碼,代碼是這樣的:

    # ecoding=utf-8 import re import requests import sys reload(sys) sys.setdefaultencoding("utf8") url = "http:///ershoufang/rs%E6%8B%9B%E5%95%86%E6%9E%9C%E5%B2%AD/" res = requests.get(url) print res.text

    目的其實很簡單,就是爬一下鏈家的內容,但是這樣執行之後,返回的結果,所有涉及到中文的內容,全部會變成亂碼,比如這樣

    &

    問題分析

    這裡的問題很明顯了,就是文字的編碼不正確,導致了亂碼。

    查看網頁的編碼

    從爬取的目標網頁的頭來看,網頁是用utf-8來編碼的。

    &

    所以,最終的編碼,我們肯定也要用utf-8來處理,也就是說,最終的文本處理,要用utf-8來解碼,也就是:decode("utf-8")

    文本的編碼解碼

    Python的編碼解碼的過程是這樣的,源文件 ===》 encode(編碼方式) ===》decode(解碼方式),在很大的程度上,不推薦使用

    import sys reload(sys) sys.setdefaultencoding("utf8")

    這種方式來硬處理文字編碼。不過在某些時候不影響的情況下,偷偷懶也不是什麼大問題,不過比較建議的就是獲取源文件之後,使用encode和decode的方式來處理文本。

    回到問題

    現在問題最大的是源文件的編碼方式,我們正常使用requests的時候,它會自動猜源文件的編碼方式,然後轉碼成Unicode的編碼,但是,畢竟是程序,是有可能猜錯的,所以如果猜錯了,我們就需要手工來指定編碼方式。官方文檔的描述如下:

    When you make a request, Requests makes educated guesses about the encoding of the response based on the HTTP headers. The text encoding guessed by Requests is used when you access r.text. You can find out what encoding Requests is using, and change it, using the r.encoding property.

    所以我們需要查看requests返回的編碼方式到底是什麼?

    # ecoding=utf-8 import re import requests from bs4 import BeautifulSoup import sys reload(sys) sys.setdefaultencoding("utf8") url = "http:///ershoufang/rs%E6%8B%9B%E5%95%86%E6%9E%9C%E5%B2%AD/" res = requests.get(url) print res.encoding

    列印的結果如下:

    ISO-8859-1

    也就是說,源文件使用的是ISO-8859-1來編碼。百度一下ISO-8859-1,結果如下:

    ISO8859-1,通常叫做Latin-1。Latin-1包括了書寫所有西方歐洲語言不可缺少的附加字元。

    問題解決

    發現了這個東東,問題就很好解決了,只要指定一下編碼,就能正確的打出中文了。代碼如下:

    # ecoding=utf-8 import requests import sys reload(sys) sys.setdefaultencoding("utf8") url = "http:///ershoufang/rs%E6%8B%9B%E5%95%86%E6%9E%9C%E5%B2%AD/" res = requests.get(url) res.encoding = ("utf8") print res.text

    列印的結果就很明顯,中文都正確的顯示出來了。

    另一種方式是在源文件上做解碼和編碼,代碼如下:

    # ecoding=utf-8 import requests import sys reload(sys) sys.setdefaultencoding("utf8") url = "http:///ershoufang/rs%E6%8B%9B%E5%95%86%E6%9E%9C%E5%B2%AD/" res = requests.get(url) # res.encoding = ("utf8") print res.text.encode("ISO-8859-1").decode("utf-8")

    另:ISO-8859-1也叫做latin1,使用latin1做解碼結果也是正常的。

    關於字元的編碼,很多東西可以說,想了解的朋友可以參考以下大神的資料。

    ?《The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)》


    你想更深入了解學習Python知識體系,你可以看一下我們花費了一個多月整理了上百小時的幾百個知識點體系內容:

    【超全整理】《Python自動化全能開發從入門到精通》筆記全放送


    謝邀
    學習 Python 爬蟲,需要掌握如下知識點

    • 1. Python 的基礎知識
    • 2. html 的簡單知識
    • 3. http 的一些簡單知識
    • 4. 數據的存儲

    一、Python 基本知識
    既然是學習 Python 爬蟲,請確保你掌握了 Python 的基礎知識,例如

    • 1. 你至少要了解 Python str set list tuple dict 這些內置類型的基本使用方法
    • 2. 你只要應該懂得如何去安裝 第三方的模塊,例如 pip 的使用,如果 pip 安裝出現問題怎麼解決
    • 3. 會看文檔,不管是 Python 標準庫的文檔,還是第三方的文檔
    • 4. 提取網頁的方法,re,BeautifulSoup4, xpath 這些你至少會一種

    二、Html 基礎知識

    • 1. html 是超文本標記語言,並不難,去 w3cschool 去看個半小時就會了。
    • 2. 一些基本的標籤 body class id div 這些都是什麼意思

    三、HTTP 的一些簡單知識

    • 1. url 的構成
    • 2. http 請求的幾種方式,你至少應該是知道什麼是 get post

    下面說個故事,來幫助你理解下。

    1. xchaoinfo 同學是個不安分的孩子,他想從一個叫 "瀏覽器" 的地方到一個叫 "伺服器" 的地方拿點東西,可是伺服器裡面有好多東西,剛開始的時候,xchaoinfo 同學 做著 Request header 這個交通工具,通過 URL 定位到自己要拿的東西,輕而易舉的拿到了東西。
    2. 但是後來呢,到伺服器拿東西的人越來越多了,伺服器受不了,就設立一個新規則,乘坐的 Request header 必須要有 user-agent 才讓進入,一下子來伺服器拿東西的人少了,但是好景不長,機智如 xchaoinfo 同學很快想到,可以乘坐同一個 Request header 但是換不同的 user-agent 來伺服器拿東西,這樣一來,伺服器就又受不了。
    3. 伺服器又想了個新辦法,每次 header request 進入伺服器要先報出伺服器的小名是什麼,機智的 xchaoinfo 同學,在乘坐的 request header 上安裝了 Host 自動報小名裝置,拿起東西一樣十分順手。
    伺服器又受不了。
    4. 伺服器又出了新規則,想要進入伺服器,要先證明是自己人,「自己人」認證後發給一個認證的憑據 cookie , 只有帶著 cookie 的 Request header 才能來伺服器拿東西,這樣伺服器舒服多了。
    5. 沒過多久,伺服器發現了 xchaoinfo 同學經常換不同的 cookie 來拿東西,這下子伺服器不爽了,又出了一個新規則,限制每個地方拿東西的時間,伺服器又舒服了
    6. 這怎麼能難倒機智的 xchaoinfo 同學,他很快發明了一個 proxy 的裝置,這個裝置,可以不停地換地方,這樣又可以愉快的到伺服器拿東西了。
    7. 雖然 xchaoinfo 經常想各種方法到伺服器拿東西,但是 xchaoinfo 很傲嬌,他給自己設置了一個 timeout 規定自己如果短時間內拿不到東西,就放棄。

    四、數據的存儲

    • 1. json csv txt xml 這樣文件的讀寫要會點吧
    • 2. MySQL mongodb 資料庫你至少要會一種吧。

    學無止境,所見即所得。

    你既然在學模擬登錄,那 GitHub - xchaoinfo/fuck-login: 模擬登錄一些知名的網站,為了方便爬取需要登錄的網站 或許對你有幫助。

    微信公眾號: xchaoinfo

    也會寫點 Python 和 Python 爬蟲相關的東西。

    http://7xti71.com1.z0.glb.clouddn.com/xchaoinfo.jpg (二維碼圖片,點擊後掃一掃)


    這些名詞可以按順序google,對於一些簡單的爬蟲來說這些不是特別重要,在慢慢的深入爬蟲的時候就需要了。爬蟲程序一般分為三個模塊:網頁下載、網頁解析、信息提取存儲。以上的這些名詞大多會出現在網頁下載模塊,建議先不管這些找一些網站直接練手,遇到了問題再去學習。


    需要網頁編程基礎,懂一些簡單的ajax,需要會一種網頁抓包調試工具。在Mozilla里有一個firebug。 如果有人教你,幾天。我遇到一個人,教了她一個星期也沒有弄會。 自己摸索有些難。可能也需要一個星期左右時間。
    搜索引擎的實現過程,可以看作三步:1. 從互聯網上抓取網頁 2. 對網頁進行處理,建立索引資料庫 3. 進行查詢。因此無論什麼樣的搜索引擎,都必須要有一個設計良好的爬蟲來支持。
    1. Heritrix
    優點:Heritrix是SourceForge上基於 Java 的開源爬蟲,它可以通過 Web 用戶界面來啟動、設置爬行參數並監控爬行,同時開發者可以隨意地擴展它的各個組件,來實現自己的抓取邏輯,因其方便的可擴展性而深受廣大搜索引擎愛好者的喜愛。
    缺點:雖然Heritrix功能強大,但其配置複雜,而且官方只在 Linux 系統上測試通過,用戶難以上手。
    根據網上來看這個軟體還沒有完善

    現在信息更新的非常快速,又迎來了大數據的時代, 各行各業如果不與時俱進,都將面臨優勝劣汰,知識是不斷的更新的,只有一技之長,才能立於不敗之地。


    學習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,這樣就可以找到大神聚合的群,如果你只願意別人幫助你,不願意分享或者幫助別人,那就請不要加了,你把你會的告訴別人這是一種分享。


    大部分人寫的都好長,我寫一個簡單有效的。

    1. 首先要熟悉python,能寫簡單的程序

    2. 會寫python的多線程,多進程操作(如果需要爬取大量的數據)

    3. 會使用requests庫,懂得簡單的http協議

    4. 會解析網頁,比如使用lxml或BeautifulSoup

    5. 會用chrome的開發者工具查看請求,並能用requests構造出相同的請求

    6. 熟練後,可以學習一下scrapy框架


    如果網站有反爬邏輯,可能需要使用代理,可以花錢購買代理,這種代理質量有保證


    謝謝邀請

    首先要自己會寫代碼解決問題。

    學習爬蟲可以從下面一些知識點入手學習。
    1、http相關知識。
    2、瀏覽器攔截、抓包。
    3、python2 中編碼知識,python3 中bytes 和str類型轉換。
    4、抓取javascript 動態生成的內容。
    4、模擬post、get,header等
    5、cookie處理,登錄。
    6、代理訪問。
    7、多線程訪問、python 3 asyncio 非同步。
    8、正則表達式、xpath等
    等等。。。。
    還有scrapy requests等第三方庫的使用。
    請看看
    Python爬蟲聯想詞視頻和代碼
    https://zhuanlan.zhihu.com/p/21430020
    跟黃哥學Python爬蟲抓取代理IP和驗證。
    https://zhuanlan.zhihu.com/p/21648138
    跟黃哥學Python爬蟲抓取代理IP
    https://zhuanlan.zhihu.com/p/21638222


    你和爬蟲之間只有一個f12的距離~~~


    感覺樓上的回答都不靠譜,我看不下去了……

    爬蟲的本質就是模擬瀏覽器發送HTTP請求,並從返回的結果中解析自己想要的數據。所以,爬蟲的本質是HTTP編程,首先需要了解是HTTP知識。大家可以看看《圖解HTTP協議》

    其次,作為中國人,總免不了與中文打交道,再次,需要了解字符集編碼。

    最後,發送HTTP請求不用urllib和urllib2,因為這兩個庫都難用得要命。簡單的可以用requests,複雜的可以用Scrapy爬蟲框架。那些推薦urllib和urllib2的,我都不知道說什麼好。

    解析HTML也不用正則表達式了,用BeautifulSoup和XPath,讓你的生活更美好。

    Python爬蟲推薦requests+BeautifulSoup和Scarpy+XPath這兩套組合。我這裡正好有兩個例子:

    1. 使用BeautifulSoup爬蟲(以知乎為例) | 賴明星
    2. 有一個scrapy的例子,每一個commit都可以運行,大家可以看看:lalor/scrapy_example


    需要網頁編程基礎,懂一些簡單的ajax,需要會一種網頁抓包調試工具。在Mozilla里有一個firebug。 如果有人教你,幾天。我遇到一個人,教了她一個星期也沒有弄會。 自己摸索有些難。可能也需要一個星期左右時間。


    糟糕,只注意了幾個答案卻沒怎麼看題主的問題,下面的內容白扯了。。。
    如果要推薦書的話推薦《Python網路數據採集》,很不錯的書,系統是有的,內容也還差不多,但是基本沒有涉及框架方面了。另外這本書是基於Python3的。
    還有一本《用Python寫網路爬蟲》,基於2.7,也還好吧,但主要是提出目標,代碼演示這種形式,系統,唔,大概也有吧。

    ==============下面是原答案,手打的刪掉很可惜,我就留下了-_-

    畢業設計做的爬蟲,雖然還沒完成,但是已經可以開始穩定爬行了。

    先說整體套路:
    1.發起請求
    2.把相應的內容轉換成目標格式(gzip、編碼解碼這類)
    3.引入解析庫獲取頁面內容(BeautifulSoup、lxml,用正則表達式也可以)
    4.存儲

    首先構造一個請求對象,使用:urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

    url是必填的。就是一個網頁地址,例如:

    https://www.zhihu.com/question/50015995/answer/126041539

    但是有可能會出現轉義這類問題,所以建議用原始字元串:

    r"https://www.zhihu.com/question/50015995/answer/126041539"

    到這一步的代碼是:

    import urllib.request as request

    url = r"https://www.zhihu.com/question/50015995/answer/126041539"

    request_instance = request.Request(url)

    如果這裡的網頁地址不正確(比如說沒有http://這種前綴),會產生一個TypeError。但是我認為不用處理也可以。url不對程序是沒法運行的。

    data是要提交的數據,首先要經過urllib.parse.urlencode()(參數可以是字典,也可以是以兩個元組為元素的序列)的處理,然後要編碼成位元組,因為python3默認是utf8編碼類型,所以用encode("utf-8")就可以了。一般來說,如果不是要模擬登錄或者獲取頁面動態內容,這項保持默認就可以。
    所以代碼為:

    import urllib.request as request
    import urllib.parse as parse

    url = r"https://www.zhihu.com/question/50015995/answer/126041539"

    # 這是方式1
    data_origin = {
    "key1": "value1",
    "key2": "value2",
    "key3": "value1"
    }

    # 這是方式2
    data_origin = (("key1", "value1"), ("key2", "value2"), ("key3", "value3"))

    data_unencode = parse.urlencode(data_oringin)

    data_encode = data_unencode.encode("utf-8")

    request_instance = request.Request(url, data_encode)

    用了多個變數主要是為了展示步驟,覺得這麼寫很羅嗦的可以自行精簡。

    headers的意義是讓伺服器以為爬蟲是瀏覽器,不至於你一運行就封掉你帳號或者ip。可以用字典添加(以含兩個元素的元組為元素的序列也可以),根據不同網站填的內容可能不盡相同。所以應該首先用瀏覽器訪問url的網站,以chrome為例可以按F12,選中network,選擇分項里的doc,如果沒有內容F5一下,然後選中一項,複製他的request headers即可。在這兒還有個黑魔法,headers會有Cookies一項(並不是100%有),如果你登陸了,把內容複製下來,添加進headers,就相當於登陸了。(但是似乎好多人都是模擬提交post請求,獲取cookies來著)
    接著擴充:

    import urllib.request as request
    import urllib.parse as parse

    url = r"https://www.zhihu.com/question/50015995/answer/126041539"

    data_origin = {
    "key1": "value1",
    "key2": "value2",
    "key3": "value1"
    }

    data_unencode = parse.urlencode(data_origin)

    data_encode = data_unencode.encode("utf-8")

    headers = {
    "key1": "value1",
    "key2": "value2",
    "key3": "value1"
    }

    request_instance = request.Request(url, data_encode, headers)

    多說一下,如果data或者headers的形式不對,會產生一個TypeError。私以為這個異常不處理也沒關係,因為處理掉也沒辦法讓程序跑起來,除非把正確的形式寫在except塊里。但是既然能把正確的形式寫出來何必要處理不會發生的異常呢?

    然後可以用urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)提交請求,Request對象當成url參數傳進去就好。然後會返迴響應,使用read()方法就可以得到沒有經過解碼的HTML了。要解碼的話首先需要正確的編碼格式,這會兒用正則表達式是不行的(因為是位元組內容)。所以暫時可以先用瀏覽器訪問url,然後右鍵,選擇查看網頁源代碼,找到(搜索)charset之後的編碼格式進行解碼。

    import urllib.request as request

    url = r"https://www.zhihu.com/question/50015995/answer/126041539"

    headers = {
    "key1": "value1",
    "key2": "value2",
    "key3": "value1"
    }

    request_instance = request.Request(url=url, headers=headers)

    response = request.urlopen(Request)

    bytes_page = response.read()

    page_decode = "utf-8" # 這裡需要自行查看了

    decode_page = bytes_page.decode(page_decode)

    如果一切正常,目前的decode_page列印出來應該和在瀏覽器中右鍵查看網頁源代碼是相同的。
    如果url格式正確,但不是一個有效的url,比如:

    r"http://www.fgdkfbdgjkdfgjbxcv.com"

    就會產生一個urllib.error.URLError,如果想要處理這個異常應該先導入:

    import urllib.request as request
    import urllib.error

    url = r"https://www.zhihu.com/question/50015995/answer/126041539"

    headers = {
    "key1": "value1",
    "key2": "value2",
    "key3": "value1"
    }

    request_instance = request.Request(url=url, headers=headers)

    try:
    response = request.urlopen(Request)
    except urllib.error.URLError as e:
    pass

    bytes_page = response.read()

    page_decode = "utf-8" # 這裡需要自行查看了

    decode_page = bytes_page.decode(page_decode)

    如果解碼方式不正確,會產生一個UnicodeDecodeError,這個並不需要導入,就不演示了。(當然了,這兩個異常我也建議不處理,總之是得不到結果。)

    現在談一下gzip問題,一些網頁傳輸的時候會用gzip壓縮提高傳輸速度(知乎就是),現在我演示一下處理過程:

    import urllib.request as request
    import urllib.error
    import gzip

    url = r"https://www.zhihu.com/question/50015995/answer/126041539"

    headers = {
    "key1": "value1",
    "key2": "value2",
    "key3": "value1"
    }

    request_instance = request.Request(url=url, headers=headers)

    response = request.urlopen(Request)

    bytes_page = response.read()

    # unzip_page = gzip.decompress(bytes_page) # 其實就是調用gzip模塊的decompress方法
    # 但是如果網頁沒用gzip壓縮的話會產生異常(OSError),這個異常建議處理掉,寫成如下形式:
    try:
    unzip_page = gzip.decompress(bytes_page)
    except OSError as e:
    unzip_page = bytes_page

    page_decode = "utf-8" # 這裡需要自行查看了

    decode_page = unzip_page.decode(page_decode)

    上述代碼就是第一階段的完整版了。

    到這兒應該就可以看到HTML了,解析部分晚些更新。


    本來以為沒人看,有人看我再更新一下。

    我大概說一下吧。之前也做過挺多相關項目。
    1. html 與 css 你得會,其實知道幾個標籤和大體結構。懂class和id這樣你就能定位你要的資源就行
    2. 會用谷歌f12開發者工具。主要是會看network知道請求。至於http協議,你做著可能會遇到相關問題。到時候再查。不需要剛一入門就會。
    (可選)3. js 這個主要應對的是模擬登陸之類的。有的時候網頁會在發請求之前進行一些操作,你得先找js代碼,再用你使用的語言對數據進行相同的處理

    爬蟲不難,但高性能,可維護的爬蟲難。介面可能會變,反扒措施也會有。最後提醒盡量不要頻率太高,不要給別人伺服器造成麻煩。

    入門:
    python + requests + BeautifulSoup
    按說一些簡單的爬取入門的工具夠了,不過對於一些較大規模的還是無法勝任,一是太慢,二是不穩定。對於requests你可能會遇到莫名其妙中斷情況,如果此時你沒有相關備用手段,會不得已重爬。。
    進階:
    1. 使用多進程與多線程
    這兩個都會使爬取過程加速。不過你需要增加管理模塊即任務分配模塊。避免出現爬取重複問題和負載不均衡問題。一般用隊列實現。
    2. 使用序列化存儲模塊。用數據存儲,以便應對爬取中斷問題。
    3. 如果之前都是自行解析html的話,盡量嘗試一下用 network查找相關網路請求。找到相關介面,解析出json數據。也可以搜索相關非官方介面這會快很多。

    以上都是自己寫爬蟲的方式。其實可以用現有的爬蟲框架來進行爬取。框架中有很多優化,會很友好,效率也挺高。

    如果還想更快,可以嘗試其他語言。。
    由於本人水平有限,無法深入更多,希望大家也能進行指教。


    年輕人,我建議你不要看需要什麼基礎,上手先運行一個demo是最重要的事。
    第一件事是抓取百度的網頁標題。
    第二件事是學會正則表達式或者xpath,能夠找到頁面內的數據。
    第三件事是學會分析url鏈接,找到規律,能夠翻頁爬取。
    第四件事是學會獲取html中找不到的數據。
    第五件事是學會怎麼存儲抓取到的數據,文本存儲,資料庫存儲。
    第六件事是學會突破爬蟲封鎖。

    自己正在總結一些爬蟲小知識到博客

    1、學習資料、python環境和編輯器 - 三木成舟

    2、第一個python爬蟲 - 三木成舟

    3、安裝額外python庫與簡單使用 - 三木成舟

    4、爬蟲數據存儲介紹與爬蟲實戰 - 三木成舟


    20170427更新,blog換了程序,鏈接變了,歡迎來交換友鏈


    這我看不下去了。。恕我直言,就寫個爬蟲 你推薦別人單獨去看一下http協議之類的, 我打包票,看不到十頁你就不想寫爬蟲了。寫爬蟲開始的時候最有趣了,推薦用python來入門,看一下request,你先自己試著把百度或者一些簡單的源碼列印出來,然後自己試著用一下正則來提取數據,然後接著可以處理一下動態載入的網頁,ajax什麼的,提取數據也可以用xpath,還有模擬登錄什麼的,找個網頁,知乎或者豆瓣什麼的,自己去挑戰一下,遇見問題就百度或者谷歌,這樣學得快一點,看書太慢了,等學了個大概以後再回去看書,事半功倍。手機碼字,可能回去會補點代碼吧。。如果有爬蟲不懂的也可以私信我。。我們一起討論學習下。。


    熟悉python的 urllib、urllib2、正則表達式、re、BeautifulSoup4這幾個模塊,寫簡單的爬蟲就夠用了。

    例如:
    python 簡單的爬蟲獲取網站信息


    http相關: "get"和"post","cookie"和"session"

    Python: 網頁請求庫(例如requests),數據解析庫(例如bs4,正則表達式也要會比較好),數據存儲庫(例如操縱mongo的pymongo等)

    資料庫: 初期可以以excel或word存儲,後期數據一多就需要資料庫了,sql語句要會吧,最好mysql和nosql都要會…

    還有一些反爬蟲網站,學會驗證碼,代理池…這些到了以後會用的到的,還有很多,到時候你自己會主動去學的。個人的小建議,初期還是不要用爬蟲框架,自己多動手寫寫代碼,理解了以後框架用起來很容易上手


    爬蟲就是利用程序爬取網站代碼,拉取自己需要的數據, 或者模仿登錄,註冊等操作.

    python爬蟲通常用到urllib庫, 或者調用瀏覽器驅動打開網頁自動化測試的selenium庫或者splinter庫.(相關的代碼網上一搜一片, 沒什麼好說的.)

    爬蟲:

    爬任何一個網站的代碼都是簡單的. 沒有什麼技術含量, 純html解析或調用的擼碼工作量而已.

    如果這個網站的安全策略做的差, 那就隨便爬.

    如果做的好, 一般都會有如下兩點: 1.同一個外網IP的訪問次數限制. 2: 身份驗證, Header, Cookie校驗.

    舉例: 微信網頁.

    1. 同一個外網IP訪問次數的限制, 如下圖:

    2: 身份驗證, Header, Cookie校驗. 如下圖:

    原網站是微信的一個投票的網站. (幫朋友的親戚刷票的)

    在手機上: 連WIFI, 最初幾次可以正常打開. 但是訪問次數一旦多了, 微信就會提示您可能有攻擊行為. 換成4G後,又可以正常打開. 這就是相同ip的訪問次數限制.

    把原鏈接複製到chrome瀏覽器裡面. 打開顯示圖2. 提示必須到微信打開此鏈接. 這就是身份驗證,cookie校驗.

    通常網站都會在你登錄成功後,生成token寫到cookie里. 圖2就是該域下面沒有對應的cookie, 所以進行身份驗證oauth的時候,就驗證失敗.

    成功打開一次該頁面,通過抓包工具獲取cookie寫到瀏覽器中就可以訪問了. 如下圖:


    推薦閱讀:

    python IDE 新手用什麼比較好?
    為什麼Python爬蟲很少有人爬QQ空間呢?
    Python3新手爬蟲求教?
    python正則表達式抓取數據時,有些標籤下有內容,有些標籤下沒有時怎麼辦?
    新手小白請教maya python ?

    TAG:Python | 爬蟲計算機網路 | Python入門 |