如何入門 Python 爬蟲?50集免費全套教學視訊讓你輕鬆掌握

2020-08-11 17:32:56

學習Python大致可以分爲以下幾個階段:

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

2.看完基礎後,就是做一些小專案鞏固基礎,比方說:做一個終端計算器,如果實在找不到什麼練手專案,可以在 Codecademy - learn to code, interactively, for free 上面進行練習。

如果時間充裕的話可以買一本講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,再往後,就是你自己自由發揮了

一些Python免費課程推薦

以下課程都爲免費課程

1.python零基礎相關

適用人羣:Python零基礎的初學者、Web開發程式設計師、運維人員、有志於從事網際網路行業以及各領域應用Python的人羣

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

Ø 零基礎入門學習Python

Ø 玩轉Python語言

Ø Python語言程式設計

Ø 程式設計入門

Ø 可汗學院公開課:電腦科學

Ø python 入門到精通

Ø Python互動式程式設計入門的課程主頁

Ø Python互動程式設計入門(第2部分)的課程主頁

2.python web方向

Python Django 快速Web應用開發入門

3.python爬蟲

Python實戰:一週學會爬取網頁

4.python數據分析方向

數據分析實戰基礎課程

Python爬蟲需要哪些知識?

要學會使用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是什麼,區別是什麼。

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

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

第一招:萬能鑰匙

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

第二招:笑裏藏刀

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

第三招:雙劍合璧

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

基礎知識我都會,可是我還是寫不了一個爬蟲啊!

客觀別急,這還沒完。

以下這些專案,你拿來學習學習練練手。

一些教學專案你值得擁有:

Ø 03. 豆瓣電影TOP250

Ø 04. 另一種抓取方式

Python爬蟲進階

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

分析目標

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

解析頁面

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

import requests

from bs4 import BeautifulSoup

當然bs已經很優秀了,但是並不代表可以用正則表達式解析的頁面還需要使用bs,也不代表使用lxml能解決的還要動用bs,所以這些解析庫的速度是你在進階時要考慮的問題。

儲存內容

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

進階要開始學習如何選擇合適的數據庫,或者儲存方式。當爬取的內容過千萬的時候,如何設計使儲存速度更快,比如說當既有人物關係又有人物關係的時候,一定會用neo4j來儲存關係,myslq用來儲存使用者資訊,這樣分開是因爲如果資訊全部存入neo4j,後期的儲存速度經十分的慢。

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

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

1.代理策略以及多使用者策略

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

2.增量式抓取以及數據重新整理

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

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全套400集爬蟲實戰教學得話,去我同名公衆號【taskctl】後臺回覆 回復:「領取」,即可獲取

Python爬蟲入門

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

Python版本:3.6

整體目錄:

一、爬蟲入門

Ø Python爬蟲入門一之綜述

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

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

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

Ø Python爬蟲入門五之URLError例外處理

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

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

二、爬蟲實戰

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

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

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

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

Ø Python爬蟲實戰五之模擬登錄淘寶並獲取所有訂單

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

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

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

三、爬蟲利器

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

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

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

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

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

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

四、爬蟲進階

Ø 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開發微信公衆號

1、需要呼叫微信內部功能

需要呼叫微信內部功能元件的比如:公衆號收發訊息|圖片、頁面分享至朋友圈、使用者授權提取使用者基本資訊、微信小店、微信公衆號選單等內部功能元件,這些功能元件在微信公衆號開發者文件裏面找到:微信公衆平臺開發者文件

對於這些功能元件,開發者文件都提供了詳細的介面文件,告訴你如何呼叫,而你只需要用Python呼叫這些介面即可。比如一個很簡單的訊息發送的方法如下:

當然在這所有的呼叫之前,需要進行一些授權驗證,同樣開發者文件有一套完整的接入指南:接入指南 - 微信公衆平臺開發者文件

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

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

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

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

Ø 使用python一步一步搭建微信公衆平臺(三)----新增使用者關注後的歡迎資訊與聽音樂功能

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

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

如果你已經能按照以上的教學搭建一個完整的微信機器人了,基本上對於微信收發訊息等等簡單功能已經沒有什麼障礙了。下面 下麪再繼續學習如下教學,開始學習如何呼叫其他一些相對來說比較複雜的介面。

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

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

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

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

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

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

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

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

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

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

當你實驗瞭如上的教學之後,相信官方文件的所有介面呼叫對你來說已經小菜一碟了。

2、不需要呼叫微信內部功能

不需要呼叫微信內部功能元件的,就如同正常的web頁面一樣,比如填寫表單進行進行註冊、點選按鈕進行跳轉等等,這些都是正常的web請求,按照正常的web開發方法走即可。

需要Python全套400集爬蟲實戰教學得話,去我同名公衆號【taskctl】後臺回覆 回復:「領取」,即可獲取

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多執行緒(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()