Python爬蟲學習路線

(一)如何學習Pythonpython

學習Python大體能夠分爲如下幾個階段:mysql

1.剛上手的時候確定是先過一遍Python最基本的知識,好比說:變量、數據結構、語法等,基礎過的很快,基本上1~2周時間就能過完了,我當時是在這兒看的基礎:Python 簡介 | 菜鳥教程程序員

2.看完基礎後,就是作一些小項目鞏固基礎,比方說:作一個終端計算器,若是實在找不到什麼練手項目,能夠在 Codecademy - learn to code, interactively, for free 上面進行練習。web

  1. 若是時間充裕的話能夠買一本講Python基礎的書籍好比《Python編程》,閱讀這些書籍,在鞏固一遍基礎的同時你會發現本身諸多沒有學習到的邊邊角角,這一步是對本身基礎知識的補充。

4.Python庫是Python的精華所在,能夠說Python庫組成而且造就了Python,Python庫是Python開發者的利器,因此學習Python庫就顯得尤其重要:The Python Standard Library ,Python庫不少,若是你沒有時間所有看完,不妨學習一遍經常使用的Python庫:Python經常使用庫面試

5.Python庫是開發者利器,用這些庫你能夠作不少不少東西,最多見的網絡爬蟲、天然語言處理、圖像識別等等,這些領域都有很強大的Python庫作支持,因此當你學了Python庫以後,必定要第一時間進行練習。正則表達式

6.學習使用了這些Python庫,此時的你應該是對Python十分滿意,也十分激動能遇到這樣的語言,就是這個時候不妨開始學習Python數據結構與算法,Python設計模式,這是你進一步學習的一個重要步驟:faif/python-patterns算法

7.當度過艱難的第六步,此時選擇你要研究的方向,若是你想作後端開發,不妨研究研究Django,再日後,就是你本身自由發揮了sql

(二)一些Python免費課程推薦數據庫

如下課程都爲免費課程編程

1.python零基礎相關

適用人羣:Python零基礎的初學者、Web開發程序員、運維人員、有志於從事互聯網行業以及各領域應用Python的人羣,咱們的python,q,qun,784758214 行業資訊,技術分享,實戰練習

Ø 瘋狂的Python:快速入門精講

Ø 零基礎入門學習Python

Ø 玩轉Python語言

Ø Python語言程序設計

Ø 程序設計入門

Ø 可汗學院公開課:計算機科學

Ø python 入門到精通

Ø Python交互式編程入門的課程主頁

Ø Python交互編程入門(第2部分)的課程主頁

2.python web方向
Python Django 快速Web應用開發入門

3.python爬蟲
Python實戰:一週學會爬取網頁

4.python數據分析方向
數據分析實戰基礎課程

(三)Python爬蟲須要哪些知識?

要學會使用Python爬取網頁信息無外乎如下幾點內容:
一、要會Python
二、知道網頁信息如何呈現
三、瞭解網頁信息如何產生
四、學會如何提取網頁信息

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

Ø 數據類型和變量

Ø 字符串和編碼

Ø 使用list和tuple

Ø 條件判斷、循環

Ø 使用dict和set

你甚至不須要掌握函數、異步、多線程、多進程,固然若是想要提升本身小爬蟲的爬蟲效率,提升數據的精確性,那麼記住最好的方式是去系統的學習一遍Python,去哪兒學習?Python教程

假設已經熟悉了最基礎的Python知識,那麼進入第二步:知道網頁信息如何呈現?你首先要知道所須要抓取的數據是怎樣的呈現的,就像是你要學作一幅畫,在開始以前你要知道這幅畫是用什麼畫出來的,鉛筆仍是水彩筆...可能種類是多樣的,可是放到網頁信息來講這兒只有兩種呈現方式:

一、HTML (HTML 簡介)
二、JSON (JSON 簡介)
HTML是用來描述網頁的一種語言
JSON是一種輕量級的數據交換格式

假設你如今知道了數據是由HTML和JSON呈現出來的,那麼咱們緊接着第三步:數據怎麼來?數據固然是從服務器反饋給你的,爲何要反饋給你?由於你發出了請求。

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

這個請求是什麼請求?要搞清楚這一點你須要瞭解一下http的基礎知識,更加精確來講你須要去了解GET和POST是什麼,區別是什麼。

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

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

第一招:萬能鑰匙

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

第二招:笑裏藏刀

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

第三招:雙劍合璧

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

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

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

一些教學項目你值得擁有:

Ø 03. 豆瓣電影TOP250

Ø 04. 另外一種抓取方式

(四)Python爬蟲進階

爬蟲無非分爲這幾塊:分析目標、下載頁面、解析頁面、存儲內容,其中下載頁面不提。

  1. 分析目標

所謂分析就是首先你要知道你須要抓取的數據來自哪裏?怎麼來?普通的網站一個簡單的POST或者GET請求,不加密不反爬,幾行代碼就能模擬出來,這是最基本的,進階就是學會分析一些複雜的目標,好比說:淘寶、新浪微博登錄以及網易雲的評論信息等等。

  1. 解析頁面

解析頁面主要是選擇什麼庫或者那些庫結合能使解析速度更快,可能你一開始你經過種種地方瞭解到了bs庫,因而你對這個庫很癡迷,之後只要寫爬蟲,老是先寫上:

import requests

from bs4 import BeautifulSoup

固然bs已經很優秀了,可是並不表明能夠用正則表達式解析的頁面還須要使用bs,也不表明使用lxml能解決的還要動用bs,因此這些解析庫的速度是你在進階時要考慮的問題。

  1. 存儲內容

剛開始學爬蟲,通常爬取的結果只是打印出來,最後把在終端輸出的結果複製粘貼保存就行了;後來發現麻煩會用上xlwt/openpyxl/csv的把存儲內容寫入表格,再後來使用數據庫sqlite/mysql/neo4j只要調用了庫都很簡單,固然這是入門。

進階要開始學習如何選擇合適的數據庫,或者存儲方式。當爬取的內容過千萬的時候,如何設計使存儲速度更快,好比說當既有人物關係又有人物關係的時候,必定會用neo4j來存儲關係,myslq用來存儲用戶信息,這樣分開是由於若是信息所有存入neo4j,後期的存儲速度經十分的慢。

當你每一個步驟都能作到很優秀的時候,你應該考慮如何組合這四個步驟,使你的爬蟲達到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學習不是一朝一夕的事情,建議多看看一些比較優秀的爬蟲的設計方案,好比說Scrapy。

除了爬取策略之外,還有幾點也是必備的:

  1. 代理策略以及多用戶策略

代理是爬蟲進階階段必備的技能,與入門階段直接套用代理不一樣,在進階階段你須要考慮如何設計使用代理策略,何時換代理,代理的做用範圍等等,多用戶的抓取策略考慮的問題基本上與代理策略相同。

  1. 增量式抓取以及數據刷新

好比說你抓取的是一個酒店網站關於酒店價格數據信息的,那麼會有這些問題:酒店的房型的價格是天天變更的,酒店網站天天會新增一批酒店,那麼如何進行存儲、如何進行數據刷新都是應該考慮的問題。

3.驗證碼相關的一些問題

有不少人提到驗證碼,我我的認爲驗證碼不是爬蟲主要去解決的問題,驗證碼很少的狀況考慮下載到本地本身輸入驗證碼,在多的狀況下考慮接入打碼平臺。

(五)Python爬蟲面試指南

前段時間快要畢業,而我又不想找本身的老本行Java開發了,因此面了不少Python爬蟲崗位。由於我在南京上學,因此我一開始只是在南京投了簡歷,我一共面試了十幾家企業,其中只有一家沒有給我發offer,其餘企業都願意給到10K的薪資,不要拿南京的薪資水平和北上深的薪資水平比較,結合面試常問的問題類型說一說個人心得體會。

第一點:Python

由於面試的是Python爬蟲崗位,面試官大多數會考察面試者的基礎的Python知識,包括但不限於:

Ø Python2.x與Python3.x的區別

Ø Python的裝飾器

Ø Python的異步

Ø Python的一些經常使用內置庫,好比多線程之類的

第二點:數據結構與算法

數據結構與算法是對面試者尤爲是校招生面試的一個很重要的點,固然小公司不會太在乎這些,從目前的招聘狀況來看對面試者的數據結構與算法的重視程度與企業的好壞成正比,那些從不問你數據結構的你就要小心他們是否把你當碼農用的,固然以上狀況不絕對,最終解釋權歸面試官全部。

第三點:Python爬蟲

最重要也是最關鍵的一點固然是你的Python爬蟲相關的知識與經驗儲備,這一般也是面試官考察的重點,包括但不限於:

Ø 你遇到過的反爬蟲的策略有哪些?

Ø 你經常使用的反反爬蟲的方案有哪些?

Ø 你用過多線程和異步嗎?除此以外你還用過什麼方法來提升爬蟲效率?

Ø 有沒有作過增量式抓取?

Ø 對Python爬蟲框架是否有了解?

第四點:爬蟲相關的項目經驗

爬蟲重在實踐,除了理論知識以外,面試官也會十分注重爬蟲相關的項目:

Ø 你作過哪些爬蟲項目?若是有Github最好

Ø 你認爲你作的最好的爬蟲項目是哪一個?其中解決了什麼難題?有什麼特別之處?

以上是我在面試過程當中,會碰到的一些技術相關的問題的總結,固然面試中不光是技術這一點,可是對於作技術的,過了技術面基本上就是薪資問題了。

(六)推薦一些不錯的Python博客

若是是Python基礎的話,廖雪峯的博客教程會是一個不錯的選擇:

Ø Python3教程

Ø Python 2.7教程

固然不少剛接觸Python的同窗反應廖大大的教程中部分跳躍性太大,若是以爲跳躍性太大能夠結合菜鳥教程一塊兒看:

Ø Python3 教程 | 菜鳥教程

Ø Python 基礎教程 | 菜鳥教程

(七)Python如何進階

不少人在學習編程之初都會碰到這種問題:學會了基礎的語法了,可是仍是作不了項目,不知道如何下手。

當初,我學習C的時候是這樣、Java的時候是這樣、Python的時候也是這樣,其實無論什麼語言、什麼知識都是這樣:理論基礎知識 - 能動手作項目是有一道鴻溝的。

那麼如何突破這條鴻溝?中間的橋樑是什麼?

其實題主本身已經回答出來了:照抄!

所謂照抄前提是有樣本。

首先找到一些簡單易上手的項目,這些項目大多散落在Python實踐相關的書籍中、Github上,這些實戰項目知乎上都有不少推薦。

1.一些比較好的適合初學者動手的項目:

Ø Show-Me-the-Code/show-me-the-code

Ø aosabook/500lines

2.大多數的Python書裏面(除了純理論書)都是有小項目的,並且書的一個優勢是它會一步一步解釋這樣作的緣由。

先照抄這些項目,實現這些小功能在電腦上能運行確認無誤以後,回過頭來看代碼:

Ø 有沒有你不理解的地方,不理解的地方標記去搜索引擎或者書中找解釋。

Ø 學習做者設計這個項目的思路方法,並運用到接下來的項目,若是時間充裕,建議隔天再從新再不看書的狀況下從新本身實現一遍這些小項目。

若是你是跟着實戰的書敲代碼的,不少時候項目都不會一遍運行成功,那麼你就要根據各類報錯去尋找緣由,這也是一個學習的過程。

總結起來從Python入門跳出來的過程分爲三步:照抄、照抄以後的理解、從新本身實現。

(八)Python爬蟲入門

第一:Python爬蟲學習系列教程

Python版本:3.6

總體目錄:

1、爬蟲入門

Ø Python爬蟲入門一之綜述

Ø Python爬蟲入門二之爬蟲基礎瞭解

Ø Python爬蟲入門三之Urllib庫的基本使用

Ø Python爬蟲入門四之Urllib庫的高級用法

Ø Python爬蟲入門五之URLError異常處理

Ø Python爬蟲入門六之Cookie的使用

Ø Python爬蟲入門七之正則表達式

2、爬蟲實戰

Ø Python爬蟲實戰一之爬取糗事百科段子

Ø Python爬蟲實戰二之爬取百度貼吧帖子

Ø Python爬蟲實戰三之實現山東大學無線網絡掉線自動重連

Ø Python爬蟲實戰四之抓取淘寶MM照片

Ø Python爬蟲實戰五之模擬登陸淘寶並獲取全部訂單

Ø Python爬蟲實戰六之抓取愛問知識人問題並保存至數據庫

Ø Python爬蟲實戰七之計算大學本學期績點

Ø Python爬蟲實戰八之利用Selenium抓取淘寶匿名旺旺

3、爬蟲利器

Ø Python爬蟲利器一之Requests庫的用法

Ø Python爬蟲利器二之Beautiful Soup的用法

Ø Python爬蟲利器三之Xpath語法與lxml庫的用法

Ø Python爬蟲利器四之PhantomJS的用法

Ø Python爬蟲利器五之Selenium的用法

Ø Python爬蟲利器六之PyQuery的用法

4、爬蟲進階

Ø Python爬蟲進階一之爬蟲框架概述

Ø Python爬蟲進階二之PySpider框架安裝配置

Ø Python爬蟲進階三之爬蟲框架Scrapy安裝配置

Ø Python爬蟲進階四之PySpider的用法

第二(第一的姊妹篇):Python爬蟲入門教程

Python版本:3.6

教程目錄:

Ø [Python]網絡爬蟲(一):抓取網頁的含義和URL基本構成

Ø [Python]網絡爬蟲(二):利用urllib2經過指定的URL抓取網頁內容

Ø [Python]網絡爬蟲(三):異常的處理和HTTP狀態碼的分類

Ø [Python]網絡爬蟲(四):Opener與Handler的介紹和實例應用

Ø [Python]網絡爬蟲(五):urllib2的使用細節與抓站技巧

Ø [Python]網絡爬蟲(六):一個簡單的百度貼吧的小爬蟲

Ø [Python]網絡爬蟲(七):Python中的正則表達式教程

Ø [Python]網絡爬蟲(八):糗事百科的網絡爬蟲(v0.3)源碼及解析(簡化更新)

Ø [Python]網絡爬蟲(九):百度貼吧的網絡爬蟲(v0.4)源碼及解析

Ø [Python]網絡爬蟲(十):一個爬蟲的誕生全過程(以山東大學績點運算爲例)

Ø [Python]網絡爬蟲(11):亮劍!爬蟲框架小抓抓Scrapy閃亮登場!

Ø [Python]網絡爬蟲(12):爬蟲框架Scrapy的第一個爬蟲示例入門教程

但願以上的教程能夠幫助到你們。

(九)Python開發微信公衆號

一、須要調用微信內部功能

須要調用微信內部功能組件的好比:公衆號收發消息|圖片、頁面分享至朋友圈、用戶受權提取用戶基本信息、微信小店、微信公衆號菜單等內部功能組件,這些功能組件在微信公衆號開發者文檔裏面找到:微信公衆平臺開發者文檔

對於這些功能組件,開發者文檔都提供了詳細的接口文檔,告訴你如何調用,而你只須要用Python調用這些接口便可。好比一個很簡單的消息發送的方法以下:

固然在這全部的調用以前,須要進行一些受權驗證,一樣開發者文檔有一套完整的接入指南:接入指南 - 微信公衆平臺開發者文檔

很遺憾不少初學者在一開始看這份文檔的時候並不能看懂,因此這裏也推薦一些我之前學習摸索的過程當中使用到的一些簡單易學的教程。

你能夠先作一個簡單的微信機器人練練手(零基礎十分容易上手):

Ø 使用python一步一步搭建微信公衆平臺(一)

Ø 使用python一步一步搭建微信公衆平臺(二)----搭建一箇中英互譯的翻譯工具

Ø 使用python一步一步搭建微信公衆平臺(三)----添加用戶關注後的歡迎信息與聽音樂功能

Ø 使用python一步一步搭建微信公衆平臺(四)----將小黃雞引入微信自動回覆

Ø 使用python一步一步搭建微信公衆平臺(五)----使用mysql服務來記錄用戶的反饋

若是你已經能按照以上的教程搭建一個完整的微信機器人了,基本上對於微信收發消息等等簡單功能已經沒有什麼障礙了。下面再繼續學習以下教程,開始學習如何調用其餘一些相對來講比較複雜的接口。

Ø 微信公衆平臺開發入門教程

Ø 微信公衆平臺開發—天氣預報

Ø 微信公衆平臺開發—小黃雞

Ø 微信公衆平臺開發—人臉識別

Ø 微信公衆平臺開發—百度地圖

Ø 微信公衆平臺開發—笑話

Ø 微信公衆平臺開發—在線點歌

Ø 微信公衆平臺開發—附近查詢

Ø 微信公衆平臺開發—快遞物流

Ø 微信公衆平臺開發—一鍵關注

當你實驗瞭如上的教程以後,相信官方文檔的全部接口調用對你來講已經小菜一碟了。

二、不須要調用微信內部功能

不須要調用微信內部功能組件的,就如同正常的web頁面同樣,好比填寫表單進行進行註冊、點擊按鈕進行跳轉等等,這些都是正常的web請求,按照正常的web開發方法走便可。

(十)Python面試概念和代碼

(一)、這兩個參數是什麼意思:args,*kwargs?咱們爲何要使用它們?

答:若是咱們不肯定往一個函數中傳入多少參數,或者咱們但願以元組(tuple)或者列表(list)的形式傳參數的時候,咱們可使用args(單星號)。若是咱們不知道往函數中傳遞多少個關鍵詞參數或者想傳入字典的值做爲關鍵詞參數的時候咱們可使用*kwargs(雙星號),args、kwargs兩個標識符是約定俗成的用法。

另外一種答法:當函數的參數前面有一個星號號的時候表示這是一個可變的位置參數,兩個星號表示這個是一個可變的關鍵詞參數。星號把序列或者集合解包(unpack)成位置參數,兩個星號把字典解包成關鍵詞參數。

(二)、談一談Python的裝飾器(decorator)

裝飾器本質上是一個Python函數,它可讓其它函數在不做任何變更的狀況下增長額外功能,裝飾器的返回值也是一個函數對象。它常常用於有切面需求的場景。好比:插入日誌、性能測試、事務處理、緩存、權限校驗等。有了裝飾器咱們就能夠抽離出大量的與函數功能無關的雷同代碼進行重用。

有關於具體的裝飾器的用法看這裏:裝飾器 - 廖雪峯的官方網站

(三)、簡要描述Python的垃圾回收機制(garbage collection)

Python中的垃圾回收是以引用計數爲主,標記-清除和分代收集爲輔。

引用計數:Python在內存中存儲每一個對象的引用計數,若是計數變成0,該對象就會消失,分配給該對象的內存就會釋放出來。

標記-清除:一些容器對象,好比list、dict、tuple,instance等可能會出現引用循環,對於這些循環,垃圾回收器會定時回收這些循環(對象之間經過引用(指針)連在一塊兒,構成一個有向圖,對象構成這個有向圖的節點,而引用關係構成這個有向圖的邊)。

分代收集:Python把內存根據對象存活時間劃分爲三代,對象建立以後,垃圾回收器會分配它們所屬的代。每一個對象都會被分配一個代,而被分配更年輕的代是被優先處理的,所以越晚建立的對象越容易被回收。

若是你想要深刻了解Python的GC機制,點擊這裏:[轉載]Python垃圾回收機制--完美講解!

(四)、Python多線程(multi-threading)。這是個好主意嗎?

Python並不支持真正意義上的多線程,Python提供了多線程包。Python中有一個叫Global Interpreter Lock(GIL)的東西,它能確保你的代碼中永遠只有一個線程在執行。通過GIL的處理,會增長執行的開銷。這就意味着若是你先要提升代碼執行效率,使用threading不是一個明智的選擇,固然若是你的代碼是IO密集型,多線程能夠明顯提升效率,相反若是你的代碼是CPU密集型的這種狀況下多線程大部分是雞肋。

(五)、 說明os,sys模塊不一樣,並列舉經常使用的模塊方法?

官方文檔:

os模板提供了一種方便的使用操做系統函數的方法

sys模板可供訪問由解釋器使用或維護的變量和與解釋器交互的函數

另外一種回答:

os模塊負責程序與操做系統的交互,提供了訪問操做系統底層的接口。sys模塊負責程序與Python解釋器的交互,提供了一系列的函數和變量用戶操做Python運行時的環境。

(六)、什麼是lambda表達式?它有什麼好處?

簡單來講,lambda表達式一般是當你須要使用一個函數,可是又不想費腦殼去命名一個函數的時候使用,也就是一般所說的匿名函數。

lambda表達式通常的形式是:關鍵詞lambda後面緊接一個或多個參數,緊接一個冒號「:」,緊接一個表達式。lambda表達式是一個表達式不是一個語句。

(七)、Python中pass語句的做用是什麼?

pass語句不會執行任何操做,通常做爲佔位符或者建立佔位程序

(八)、Python是如何進行類型轉換的?

Python提供了將變量或值從一種類型轉換爲另外一種類型的內置方法。

(九)、Python裏面如何拷貝一個對象?

Python中對象之間的賦值是按引用傳遞的,若是要拷貝對象須要使用標準模板中的copy

copy.copy:淺拷貝,只拷貝父對象,不拷貝父對象的子對象。

copy.deepcopy:深拷貝,拷貝父對象和子對象。

(十)、__new__和__init__的區別。

__init__爲初始化方法,__new__方法是真正的構造函數。

__new__是實例建立以前被調用,它的任務是建立並返回該實例,是靜態方法

__init__是實例建立以後被調用的,而後設置對象屬性的一些初始值。

總結:__new__方法在__init__方法以前被調用,而且__new__方法的返回值將傳遞給__init__方法做爲第一個參數,最後__init__給這個實例設置一些參數。

(十一)、Python中單下劃線和雙下劃線分別是什麼?

__name__:一種約定,Python內部的名字,用來與用戶自定義的名字區分開,防止衝突

_name:一種約定,用來指定變量私有

__name:解釋器用_classname__name來代替這個名字用以區別和其餘類相同的命名

想要更加詳細的瞭解這二者的區別,請點擊:Python中的下劃線(譯文)

(十二)、說一說Python自省。

自省就是面向對象的語言所寫的程序在運行時,所能知道對象的類型。簡單一句話就是運行時可以得到對象的類型。好比:type()、dir()、getattr()、hasattr()、isinstance()

有關於元類以及單例模式會在後面文章中作詳細的解釋說明。

相關文章
相關標籤/搜索