摘要:以下這些項(xiàng)目,你拿來(lái)學(xué)習(xí)學(xué)習(xí)練練手。當(dāng)你每個(gè)步驟都能做到很優(yōu)秀的時(shí)候,你應(yīng)該考慮如何組合這四個(gè)步驟,使你的爬蟲(chóng)達(dá)到效率最高,也就是所謂的爬蟲(chóng)策略問(wèn)題,爬蟲(chóng)策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲(chóng)的設(shè)計(jì)方案,比如說(shuō)。
(一)如何學(xué)習(xí)Python
學(xué)習(xí)Python大致可以分為以下幾個(gè)階段:
1.剛上手的時(shí)候肯定是先過(guò)一遍Python最基本的知識(shí),比如說(shuō):變量、數(shù)據(jù)結(jié)構(gòu)、語(yǔ)法等,基礎(chǔ)過(guò)的很快,基本上1~2周時(shí)間就能過(guò)完了,我當(dāng)時(shí)是在這兒看的基礎(chǔ):Python 簡(jiǎn)介 | 菜鳥(niǎo)教程
2.看完基礎(chǔ)后,就是做一些小項(xiàng)目鞏固基礎(chǔ),比方說(shuō):做一個(gè)終端計(jì)算器,如果實(shí)在找不到什么練手項(xiàng)目,可以在 Codecademy - learn to code, interactively, for free 上面進(jìn)行練習(xí)。
如果時(shí)間充裕的話可以買一本講Python基礎(chǔ)的書(shū)籍比如《Python編程》,閱讀這些書(shū)籍,在鞏固一遍基礎(chǔ)的同時(shí)你會(huì)發(fā)現(xiàn)自己諸多沒(méi)有學(xué)習(xí)到的邊邊角角,這一步是對(duì)自己基礎(chǔ)知識(shí)的補(bǔ)充。
4.Python庫(kù)是Python的精華所在,可以說(shuō)Python庫(kù)組成并且造就了Python,Python庫(kù)是Python開(kāi)發(fā)者的利器,所以學(xué)習(xí)Python庫(kù)就顯得尤為重要:The Python Standard Library ,Python庫(kù)很多,如果你沒(méi)有時(shí)間全部看完,不妨學(xué)習(xí)一遍常用的Python庫(kù):Python常用庫(kù)
5.Python庫(kù)是開(kāi)發(fā)者利器,用這些庫(kù)你可以做很多很多東西,最常見(jiàn)的網(wǎng)絡(luò)爬蟲(chóng)、自然語(yǔ)言處理、圖像識(shí)別等等,這些領(lǐng)域都有很強(qiáng)大的Python庫(kù)做支持,所以當(dāng)你學(xué)了Python庫(kù)之后,一定要第一時(shí)間進(jìn)行練習(xí)。
6.學(xué)習(xí)使用了這些Python庫(kù),此時(shí)的你應(yīng)該是對(duì)Python十分滿意,也十分激動(dòng)能遇到這樣的語(yǔ)言,就是這個(gè)時(shí)候不妨開(kāi)始學(xué)習(xí)Python數(shù)據(jù)結(jié)構(gòu)與算法,Python設(shè)計(jì)模式,這是你進(jìn)一步學(xué)習(xí)的一個(gè)重要步驟:faif/python-patterns
7.當(dāng)度過(guò)艱難的第六步,此時(shí)選擇你要研究的方向,如果你想做后端開(kāi)發(fā),不妨研究研究Django,再往后,就是你自己自由發(fā)揮了
(二)一些Python免費(fèi)課程推薦
以下課程都為免費(fèi)課程
1.python零基礎(chǔ)相關(guān)
適用人群:Python零基礎(chǔ)的初學(xué)者、Web開(kāi)發(fā)程序員、運(yùn)維人員、有志于從事互聯(lián)網(wǎng)行業(yè)以及各領(lǐng)域應(yīng)用Python的人群,我們的python,q,qun,784758214 行業(yè)資訊,技術(shù)分享,實(shí)戰(zhàn)練習(xí)
? 瘋狂的Python:快速入門(mén)精講
? 零基礎(chǔ)入門(mén)學(xué)習(xí)Python
? 玩轉(zhuǎn)Python語(yǔ)言
? Python語(yǔ)言程序設(shè)計(jì)
? 程序設(shè)計(jì)入門(mén)
? 可汗學(xué)院公開(kāi)課:計(jì)算機(jī)科學(xué)
? python 入門(mén)到精通
? Python交互式編程入門(mén)的課程主頁(yè)
? Python交互編程入門(mén)(第2部分)的課程主頁(yè)
2.python web方向
Python Django 快速Web應(yīng)用開(kāi)發(fā)入門(mén)
3.python爬蟲(chóng)
Python實(shí)戰(zhàn):一周學(xué)會(huì)爬取網(wǎng)頁(yè)
4.python數(shù)據(jù)分析方向
數(shù)據(jù)分析實(shí)戰(zhàn)基礎(chǔ)課程
(三)Python爬蟲(chóng)需要哪些知識(shí)?
要學(xué)會(huì)使用Python爬取網(wǎng)頁(yè)信息無(wú)外乎以下幾點(diǎn)內(nèi)容:
1、要會(huì)Python
2、知道網(wǎng)頁(yè)信息如何呈現(xiàn)
3、了解網(wǎng)頁(yè)信息如何產(chǎn)生
4、學(xué)會(huì)如何提取網(wǎng)頁(yè)信息
第一步Python是工具,所以你必須熟練掌握它,要掌握到什么程度呢?如果你只想寫(xiě)一寫(xiě)簡(jiǎn)單的爬蟲(chóng),不要炫技不考慮爬蟲(chóng)效率,你只需要掌握:
? 數(shù)據(jù)類型和變量
? 字符串和編碼
? 使用list和tuple
? 條件判斷、循環(huán)
? 使用dict和set
你甚至不需要掌握函數(shù)、異步、多線程、多進(jìn)程,當(dāng)然如果想要提高自己小爬蟲(chóng)的爬蟲(chóng)效率,提高數(shù)據(jù)的精確性,那么記住最好的方式是去系統(tǒng)的學(xué)習(xí)一遍Python,去哪兒學(xué)習(xí)?Python教程
假設(shè)已經(jīng)熟悉了最基礎(chǔ)的Python知識(shí),那么進(jìn)入第二步:知道網(wǎng)頁(yè)信息如何呈現(xiàn)?你首先要知道所需要抓取的數(shù)據(jù)是怎樣的呈現(xiàn)的,就像是你要學(xué)做一幅畫(huà),在開(kāi)始之前你要知道這幅畫(huà)是用什么畫(huà)出來(lái)的,鉛筆還是水彩筆...可能種類是多樣的,但是放到網(wǎng)頁(yè)信息來(lái)說(shuō)這兒只有兩種呈現(xiàn)方式:
1、HTML (HTML 簡(jiǎn)介)
2、JSON (JSON 簡(jiǎn)介)
HTML是用來(lái)描述網(wǎng)頁(yè)的一種語(yǔ)言
JSON是一種輕量級(jí)的數(shù)據(jù)交換格式
假設(shè)你現(xiàn)在知道了數(shù)據(jù)是由HTML和JSON呈現(xiàn)出來(lái)的,那么我們緊接著第三步:數(shù)據(jù)怎么來(lái)?數(shù)據(jù)當(dāng)然是從服務(wù)器反饋給你的,為什么要反饋給你?因?yàn)槟惆l(fā)出了請(qǐng)求。
“Hi~ ,服務(wù)器我要這個(gè)資源”
“正在傳輸中...”
“已經(jīng)收到HTML或者JSON格式的數(shù)據(jù)”
這個(gè)請(qǐng)求是什么請(qǐng)求?要搞清楚這一點(diǎn)你需要了解一下http的基礎(chǔ)知識(shí),更加精確來(lái)說(shuō)你需要去了解GET和POST是什么,區(qū)別是什么。
很高興你使用的是Python,那么你只需要去掌握好快速上手 - Requests 2.10.0 文檔,requests可以幫你模擬發(fā)出GET和POST請(qǐng)求,這真是太棒了。
飯菜已經(jīng)備好,兩菜一湯美味佳肴,下面就是好好享受了?,F(xiàn)在我們已經(jīng)拿到了數(shù)據(jù),我們需要在這些錯(cuò)亂的數(shù)據(jù)中提取我們需要的數(shù)據(jù),這時(shí)候我們有兩個(gè)選擇。
第一招:萬(wàn)能鑰匙
Python正則表達(dá)式指南 ,再大再亂的內(nèi)容,哪怕是大海撈針,只要告訴我這個(gè)針的樣子我都能從茫茫大海中撈出來(lái),強(qiáng)大的正則表達(dá)式是你提取數(shù)據(jù)的不二之選。
第二招:笑里藏刀
Beautiful Soup 4.2.0 文檔,或許我們有更好的選擇,我們把原始數(shù)據(jù)和我們想要的數(shù)據(jù)的樣子扔個(gè)這個(gè)Beautifulsoup,然后讓它幫我們?nèi)ふ遥@也是一個(gè)不錯(cuò)的方案,但是論靈活性,第二招還是略遜于第一招。
第三招:雙劍合璧
最厲害的招式莫過(guò)于結(jié)合第一招和第二招了,打破天下無(wú)敵手。
基礎(chǔ)知識(shí)我都會(huì),可是我還是寫(xiě)不了一個(gè)爬蟲(chóng)??!
客觀別急,這還沒(méi)完。
以下這些項(xiàng)目,你拿來(lái)學(xué)習(xí)學(xué)習(xí)練練手。
一些教學(xué)項(xiàng)目你值得擁有:
? 03. 豆瓣電影TOP250
? 04. 另一種抓取方式
(四)Python爬蟲(chóng)進(jìn)階
爬蟲(chóng)無(wú)非分為這幾塊:分析目標(biāo)、下載頁(yè)面、解析頁(yè)面、存儲(chǔ)內(nèi)容,其中下載頁(yè)面不提。
分析目標(biāo)
所謂分析就是首先你要知道你需要抓取的數(shù)據(jù)來(lái)自哪里?怎么來(lái)?普通的網(wǎng)站一個(gè)簡(jiǎn)單的POST或者GET請(qǐng)求,不加密不反爬,幾行代碼就能模擬出來(lái),這是最基本的,進(jìn)階就是學(xué)會(huì)分析一些復(fù)雜的目標(biāo),比如說(shuō):淘寶、新浪微博登陸以及網(wǎng)易云的評(píng)論信息等等。
解析頁(yè)面
解析頁(yè)面主要是選擇什么庫(kù)或者那些庫(kù)結(jié)合能使解析速度更快,可能你一開(kāi)始你通過(guò)種種地方了解到了bs庫(kù),于是你對(duì)這個(gè)庫(kù)很癡迷,以后只要寫(xiě)爬蟲(chóng),總是先寫(xiě)上:
import requests
from bs4 import BeautifulSoup
當(dāng)然bs已經(jīng)很優(yōu)秀了,但是并不代表可以用正則表達(dá)式解析的頁(yè)面還需要使用bs,也不代表使用lxml能解決的還要?jiǎng)佑胋s,所以這些解析庫(kù)的速度是你在進(jìn)階時(shí)要考慮的問(wèn)題。
存儲(chǔ)內(nèi)容
剛開(kāi)始學(xué)爬蟲(chóng),一般爬取的結(jié)果只是打印出來(lái),最后把在終端輸出的結(jié)果復(fù)制粘貼保存就好了;后來(lái)發(fā)現(xiàn)麻煩會(huì)用上x(chóng)lwt/openpyxl/csv的把存儲(chǔ)內(nèi)容寫(xiě)入表格,再后來(lái)使用數(shù)據(jù)庫(kù)sqlite/mysql/neo4j只要調(diào)用了庫(kù)都很簡(jiǎn)單,當(dāng)然這是入門(mén)。
進(jìn)階要開(kāi)始學(xué)習(xí)如何選擇合適的數(shù)據(jù)庫(kù),或者存儲(chǔ)方式。當(dāng)爬取的內(nèi)容過(guò)千萬(wàn)的時(shí)候,如何設(shè)計(jì)使存儲(chǔ)速度更快,比如說(shuō)當(dāng)既有人物關(guān)系又有人物關(guān)系的時(shí)候,一定會(huì)用neo4j來(lái)存儲(chǔ)關(guān)系,myslq用來(lái)存儲(chǔ)用戶信息,這樣分開(kāi)是因?yàn)槿绻畔⑷看嫒雗eo4j,后期的存儲(chǔ)速度經(jīng)十分的慢。
當(dāng)你每個(gè)步驟都能做到很優(yōu)秀的時(shí)候,你應(yīng)該考慮如何組合這四個(gè)步驟,使你的爬蟲(chóng)達(dá)到效率最高,也就是所謂的爬蟲(chóng)策略問(wèn)題,爬蟲(chóng)策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲(chóng)的設(shè)計(jì)方案,比如說(shuō)Scrapy。
除了爬取策略以外,還有幾點(diǎn)也是必備的:
代理策略以及多用戶策略
代理是爬蟲(chóng)進(jìn)階階段必備的技能,與入門(mén)階段直接套用代理不同,在進(jìn)階階段你需要考慮如何設(shè)計(jì)使用代理策略,什么時(shí)候換代理,代理的作用范圍等等,多用戶的抓取策略考慮的問(wèn)題基本上與代理策略相同。
增量式抓取以及數(shù)據(jù)刷新
比如說(shuō)你抓取的是一個(gè)酒店網(wǎng)站關(guān)于酒店價(jià)格數(shù)據(jù)信息的,那么會(huì)有這些問(wèn)題:酒店的房型的價(jià)格是每天變動(dòng)的,酒店網(wǎng)站每天會(huì)新增一批酒店,那么如何進(jìn)行存儲(chǔ)、如何進(jìn)行數(shù)據(jù)刷新都是應(yīng)該考慮的問(wèn)題。
3.驗(yàn)證碼相關(guān)的一些問(wèn)題
有很多人提到驗(yàn)證碼,我個(gè)人認(rèn)為驗(yàn)證碼不是爬蟲(chóng)主要去解決的問(wèn)題,驗(yàn)證碼不多的情況考慮下載到本地自己輸入驗(yàn)證碼,在多的情況下考慮接入打碼平臺(tái)。
(五)Python爬蟲(chóng)面試指南
前段時(shí)間快要畢業(yè),而我又不想找自己的老本行Java開(kāi)發(fā)了,所以面了很多Python爬蟲(chóng)崗位。因?yàn)槲以谀暇┥蠈W(xué),所以我一開(kāi)始只是在南京投了簡(jiǎn)歷,我一共面試了十幾家企業(yè),其中只有一家沒(méi)有給我發(fā)offer,其他企業(yè)都愿意給到10K的薪資,不要拿南京的薪資水平和北上深的薪資水平比較,結(jié)合面試常問(wèn)的問(wèn)題類型說(shuō)一說(shuō)我的心得體會(huì)。
第一點(diǎn):Python
因?yàn)槊嬖嚨氖荘ython爬蟲(chóng)崗位,面試官大多數(shù)會(huì)考察面試者的基礎(chǔ)的Python知識(shí),包括但不限于:
? Python2.x與Python3.x的區(qū)別
? Python的裝飾器
? Python的異步
? Python的一些常用內(nèi)置庫(kù),比如多線程之類的
第二點(diǎn):數(shù)據(jù)結(jié)構(gòu)與算法
數(shù)據(jù)結(jié)構(gòu)與算法是對(duì)面試者尤其是校招生面試的一個(gè)很重要的點(diǎn),當(dāng)然小公司不會(huì)太在意這些,從目前的招聘情況來(lái)看對(duì)面試者的數(shù)據(jù)結(jié)構(gòu)與算法的重視程度與企業(yè)的好壞成正比,那些從不問(wèn)你數(shù)據(jù)結(jié)構(gòu)的你就要當(dāng)心他們是否把你當(dāng)碼農(nóng)用的,當(dāng)然以上情況不絕對(duì),最終解釋權(quán)歸面試官所有。
第三點(diǎn):Python爬蟲(chóng)
最重要也是最關(guān)鍵的一點(diǎn)當(dāng)然是你的Python爬蟲(chóng)相關(guān)的知識(shí)與經(jīng)驗(yàn)儲(chǔ)備,這通常也是面試官考察的重點(diǎn),包括但不限于:
? 你遇到過(guò)的反爬蟲(chóng)的策略有哪些?
? 你常用的反反爬蟲(chóng)的方案有哪些?
? 你用過(guò)多線程和異步嗎?除此之外你還用過(guò)什么方法來(lái)提高爬蟲(chóng)效率?
? 有沒(méi)有做過(guò)增量式抓???
? 對(duì)Python爬蟲(chóng)框架是否有了解?
第四點(diǎn):爬蟲(chóng)相關(guān)的項(xiàng)目經(jīng)驗(yàn)
爬蟲(chóng)重在實(shí)踐,除了理論知識(shí)之外,面試官也會(huì)十分注重爬蟲(chóng)相關(guān)的項(xiàng)目:
? 你做過(guò)哪些爬蟲(chóng)項(xiàng)目?如果有Github最好
? 你認(rèn)為你做的最好的爬蟲(chóng)項(xiàng)目是哪個(gè)?其中解決了什么難題?有什么特別之處?
以上是我在面試過(guò)程中,會(huì)碰到的一些技術(shù)相關(guān)的問(wèn)題的總結(jié),當(dāng)然面試中不光是技術(shù)這一點(diǎn),但是對(duì)于做技術(shù)的,過(guò)了技術(shù)面基本上就是薪資問(wèn)題了。
(六)推薦一些不錯(cuò)的Python博客
如果是Python基礎(chǔ)的話,廖雪峰的博客教程會(huì)是一個(gè)不錯(cuò)的選擇:
? Python3教程
? Python 2.7教程
當(dāng)然很多剛接觸Python的同學(xué)反應(yīng)廖大大的教程中部分跳躍性太大,如果覺(jué)得跳躍性太大可以結(jié)合菜鳥(niǎo)教程一起看:
? Python3 教程 | 菜鳥(niǎo)教程
? Python 基礎(chǔ)教程 | 菜鳥(niǎo)教程
(七)Python如何進(jìn)階
很多人在學(xué)習(xí)編程之初都會(huì)碰到這種問(wèn)題:學(xué)會(huì)了基礎(chǔ)的語(yǔ)法了,但是還是做不了項(xiàng)目,不知道如何下手。
當(dāng)初,我學(xué)習(xí)C的時(shí)候是這樣、Java的時(shí)候是這樣、Python的時(shí)候也是這樣,其實(shí)不管什么語(yǔ)言、什么知識(shí)都是這樣:理論基礎(chǔ)知識(shí) - 能動(dòng)手做項(xiàng)目是有一道鴻溝的。
那么如何突破這條鴻溝?中間的橋梁是什么?
其實(shí)題主自己已經(jīng)回答出來(lái)了:照抄!
所謂照抄前提是有樣本。
首先找到一些簡(jiǎn)單易上手的項(xiàng)目,這些項(xiàng)目大多散落在Python實(shí)踐相關(guān)的書(shū)籍中、Github上,這些實(shí)戰(zhàn)項(xiàng)目知乎上都有很多推薦。
1.一些比較好的適合初學(xué)者動(dòng)手的項(xiàng)目:
? Show-Me-the-Code/show-me-the-code
? aosabook/500lines
2.大多數(shù)的Python書(shū)里面(除了純理論書(shū))都是有小項(xiàng)目的,而且書(shū)的一個(gè)優(yōu)點(diǎn)是它會(huì)一步一步解釋這樣做的原因。
先照抄這些項(xiàng)目,實(shí)現(xiàn)這些小功能在電腦上能運(yùn)行確認(rèn)無(wú)誤之后,回過(guò)頭來(lái)看代碼:
? 有沒(méi)有你不理解的地方,不理解的地方標(biāo)記去搜索引擎或者書(shū)中找解釋。
? 學(xué)習(xí)作者設(shè)計(jì)這個(gè)項(xiàng)目的思路方法,并運(yùn)用到接下來(lái)的項(xiàng)目,如果時(shí)間充裕,建議隔天再重新再不看書(shū)的情況下重新自己實(shí)現(xiàn)一遍這些小項(xiàng)目。
如果你是跟著實(shí)戰(zhàn)的書(shū)敲代碼的,很多時(shí)候項(xiàng)目都不會(huì)一遍運(yùn)行成功,那么你就要根據(jù)各種報(bào)錯(cuò)去尋找原因,這也是一個(gè)學(xué)習(xí)的過(guò)程。
總結(jié)起來(lái)從Python入門(mén)跳出來(lái)的過(guò)程分為三步:照抄、照抄之后的理解、重新自己實(shí)現(xiàn)。
(八)Python爬蟲(chóng)入門(mén)
第一:Python爬蟲(chóng)學(xué)習(xí)系列教程
Python版本:3.6
整體目錄:
一、爬蟲(chóng)入門(mén)
? Python爬蟲(chóng)入門(mén)一之綜述
? Python爬蟲(chóng)入門(mén)二之爬蟲(chóng)基礎(chǔ)了解
? Python爬蟲(chóng)入門(mén)三之Urllib庫(kù)的基本使用
? Python爬蟲(chóng)入門(mén)四之Urllib庫(kù)的高級(jí)用法
? Python爬蟲(chóng)入門(mén)五之URLError異常處理
? Python爬蟲(chóng)入門(mén)六之Cookie的使用
? Python爬蟲(chóng)入門(mén)七之正則表達(dá)式
二、爬蟲(chóng)實(shí)戰(zhàn)
? Python爬蟲(chóng)實(shí)戰(zhàn)一之爬取糗事百科段子
? Python爬蟲(chóng)實(shí)戰(zhàn)二之爬取百度貼吧帖子
? Python爬蟲(chóng)實(shí)戰(zhàn)三之實(shí)現(xiàn)山東大學(xué)無(wú)線網(wǎng)絡(luò)掉線自動(dòng)重連
? Python爬蟲(chóng)實(shí)戰(zhàn)四之抓取淘寶MM照片
? Python爬蟲(chóng)實(shí)戰(zhàn)五之模擬登錄淘寶并獲取所有訂單
? Python爬蟲(chóng)實(shí)戰(zhàn)六之抓取愛(ài)問(wèn)知識(shí)人問(wèn)題并保存至數(shù)據(jù)庫(kù)
? Python爬蟲(chóng)實(shí)戰(zhàn)七之計(jì)算大學(xué)本學(xué)期績(jī)點(diǎn)
? Python爬蟲(chóng)實(shí)戰(zhàn)八之利用Selenium抓取淘寶匿名旺旺
三、爬蟲(chóng)利器
? Python爬蟲(chóng)利器一之Requests庫(kù)的用法
? Python爬蟲(chóng)利器二之Beautiful Soup的用法
? Python爬蟲(chóng)利器三之Xpath語(yǔ)法與lxml庫(kù)的用法
? Python爬蟲(chóng)利器四之PhantomJS的用法
? Python爬蟲(chóng)利器五之Selenium的用法
? Python爬蟲(chóng)利器六之PyQuery的用法
四、爬蟲(chóng)進(jìn)階
? Python爬蟲(chóng)進(jìn)階一之爬蟲(chóng)框架概述
? Python爬蟲(chóng)進(jìn)階二之PySpider框架安裝配置
? Python爬蟲(chóng)進(jìn)階三之爬蟲(chóng)框架Scrapy安裝配置
? Python爬蟲(chóng)進(jìn)階四之PySpider的用法
第二(第一的姊妹篇):Python爬蟲(chóng)入門(mén)教程
Python版本:3.6
教程目錄:
? [Python]網(wǎng)絡(luò)爬蟲(chóng)(一):抓取網(wǎng)頁(yè)的含義和URL基本構(gòu)成
? [Python]網(wǎng)絡(luò)爬蟲(chóng)(二):利用urllib2通過(guò)指定的URL抓取網(wǎng)頁(yè)內(nèi)容
? [Python]網(wǎng)絡(luò)爬蟲(chóng)(三):異常的處理和HTTP狀態(tài)碼的分類
? [Python]網(wǎng)絡(luò)爬蟲(chóng)(四):Opener與Handler的介紹和實(shí)例應(yīng)用
? [Python]網(wǎng)絡(luò)爬蟲(chóng)(五):urllib2的使用細(xì)節(jié)與抓站技巧
? [Python]網(wǎng)絡(luò)爬蟲(chóng)(六):一個(gè)簡(jiǎn)單的百度貼吧的小爬蟲(chóng)
? [Python]網(wǎng)絡(luò)爬蟲(chóng)(七):Python中的正則表達(dá)式教程
? [Python]網(wǎng)絡(luò)爬蟲(chóng)(八):糗事百科的網(wǎng)絡(luò)爬蟲(chóng)(v0.3)源碼及解析(簡(jiǎn)化更新)
? [Python]網(wǎng)絡(luò)爬蟲(chóng)(九):百度貼吧的網(wǎng)絡(luò)爬蟲(chóng)(v0.4)源碼及解析
? [Python]網(wǎng)絡(luò)爬蟲(chóng)(十):一個(gè)爬蟲(chóng)的誕生全過(guò)程(以山東大學(xué)績(jī)點(diǎn)運(yùn)算為例)
? [Python]網(wǎng)絡(luò)爬蟲(chóng)(11):亮劍!爬蟲(chóng)框架小抓抓Scrapy閃亮登場(chǎng)!
? [Python]網(wǎng)絡(luò)爬蟲(chóng)(12):爬蟲(chóng)框架Scrapy的第一個(gè)爬蟲(chóng)示例入門(mén)教程
希望以上的教程可以幫助到大家。
(九)Python開(kāi)發(fā)微信公眾號(hào)
1、需要調(diào)用微信內(nèi)部功能
需要調(diào)用微信內(nèi)部功能組件的比如:公眾號(hào)收發(fā)消息|圖片、頁(yè)面分享至朋友圈、用戶授權(quán)提取用戶基本信息、微信小店、微信公眾號(hào)菜單等內(nèi)部功能組件,這些功能組件在微信公眾號(hào)開(kāi)發(fā)者文檔里面找到:微信公眾平臺(tái)開(kāi)發(fā)者文檔
對(duì)于這些功能組件,開(kāi)發(fā)者文檔都提供了詳細(xì)的接口文檔,告訴你如何調(diào)用,而你只需要用Python調(diào)用這些接口即可。比如一個(gè)很簡(jiǎn)單的消息發(fā)送的方法如下:
當(dāng)然在這所有的調(diào)用之前,需要進(jìn)行一些授權(quán)驗(yàn)證,同樣開(kāi)發(fā)者文檔有一套完整的接入指南:接入指南 - 微信公眾平臺(tái)開(kāi)發(fā)者文檔
很遺憾很多初學(xué)者在一開(kāi)始看這份文檔的時(shí)候并不能看懂,所以這里也推薦一些我以前學(xué)習(xí)摸索的過(guò)程中使用到的一些簡(jiǎn)單易學(xué)的教程。
你可以先做一個(gè)簡(jiǎn)單的微信機(jī)器人練練手(零基礎(chǔ)十分容易上手):
? 使用python一步一步搭建微信公眾平臺(tái)(一)
? 使用python一步一步搭建微信公眾平臺(tái)(二)----搭建一個(gè)中英互譯的翻譯工具
? 使用python一步一步搭建微信公眾平臺(tái)(三)----添加用戶關(guān)注后的歡迎信息與聽(tīng)音樂(lè)功能
? 使用python一步一步搭建微信公眾平臺(tái)(四)----將小黃雞引入微信自動(dòng)回復(fù)
? 使用python一步一步搭建微信公眾平臺(tái)(五)----使用mysql服務(wù)來(lái)記錄用戶的反饋
如果你已經(jīng)能按照以上的教程搭建一個(gè)完整的微信機(jī)器人了,基本上對(duì)于微信收發(fā)消息等等簡(jiǎn)單功能已經(jīng)沒(méi)有什么障礙了。下面再繼續(xù)學(xué)習(xí)如下教程,開(kāi)始學(xué)習(xí)如何調(diào)用其他一些相對(duì)來(lái)說(shuō)比較復(fù)雜的接口。
? 微信公眾平臺(tái)開(kāi)發(fā)入門(mén)教程
? 微信公眾平臺(tái)開(kāi)發(fā)—天氣預(yù)報(bào)
? 微信公眾平臺(tái)開(kāi)發(fā)—小黃雞
? 微信公眾平臺(tái)開(kāi)發(fā)—人臉識(shí)別
? 微信公眾平臺(tái)開(kāi)發(fā)—百度地圖
? 微信公眾平臺(tái)開(kāi)發(fā)—笑話
? 微信公眾平臺(tái)開(kāi)發(fā)—在線點(diǎn)歌
? 微信公眾平臺(tái)開(kāi)發(fā)—附近查詢
? 微信公眾平臺(tái)開(kāi)發(fā)—快遞物流
? 微信公眾平臺(tái)開(kāi)發(fā)—一鍵關(guān)注
當(dāng)你實(shí)驗(yàn)了如上的教程之后,相信官方文檔的所有接口調(diào)用對(duì)你來(lái)說(shuō)已經(jīng)小菜一碟了。
2、不需要調(diào)用微信內(nèi)部功能
不需要調(diào)用微信內(nèi)部功能組件的,就如同正常的web頁(yè)面一樣,比如填寫(xiě)表單進(jìn)行進(jìn)行注冊(cè)、點(diǎn)擊按鈕進(jìn)行跳轉(zhuǎn)等等,這些都是正常的web請(qǐng)求,按照正常的web開(kāi)發(fā)方法走即可。
(十)Python面試概念和代碼
(一)、這兩個(gè)參數(shù)是什么意思:args,*kwargs?我們?yōu)槭裁匆褂盟鼈儯?/p>
答:如果我們不確定往一個(gè)函數(shù)中傳入多少參數(shù),或者我們希望以元組(tuple)或者列表(list)的形式傳參數(shù)的時(shí)候,我們可以使用args(單星號(hào))。如果我們不知道往函數(shù)中傳遞多少個(gè)關(guān)鍵詞參數(shù)或者想傳入字典的值作為關(guān)鍵詞參數(shù)的時(shí)候我們可以使用*kwargs(雙星號(hào)),args、kwargs兩個(gè)標(biāo)識(shí)符是約定俗成的用法。
另一種答法:當(dāng)函數(shù)的參數(shù)前面有一個(gè)星號(hào)號(hào)的時(shí)候表示這是一個(gè)可變的位置參數(shù),兩個(gè)星號(hào)表示這個(gè)是一個(gè)可變的關(guān)鍵詞參數(shù)。星號(hào)把序列或者集合解包(unpack)成位置參數(shù),兩個(gè)星號(hào)把字典解包成關(guān)鍵詞參數(shù)。
(二)、談一談Python的裝飾器(decorator)
裝飾器本質(zhì)上是一個(gè)Python函數(shù),它可以讓其它函數(shù)在不作任何變動(dòng)的情況下增加額外功能,裝飾器的返回值也是一個(gè)函數(shù)對(duì)象。它經(jīng)常用于有切面需求的場(chǎng)景。比如:插入日志、性能測(cè)試、事務(wù)處理、緩存、權(quán)限校驗(yàn)等。有了裝飾器我們就可以抽離出大量的與函數(shù)功能無(wú)關(guān)的雷同代碼進(jìn)行重用。
有關(guān)于具體的裝飾器的用法看這里:裝飾器 - 廖雪峰的官方網(wǎng)站
(三)、簡(jiǎn)要描述Python的垃圾回收機(jī)制(garbage collection)
Python中的垃圾回收是以引用計(jì)數(shù)為主,標(biāo)記-清除和分代收集為輔。
引用計(jì)數(shù):Python在內(nèi)存中存儲(chǔ)每個(gè)對(duì)象的引用計(jì)數(shù),如果計(jì)數(shù)變成0,該對(duì)象就會(huì)消失,分配給該對(duì)象的內(nèi)存就會(huì)釋放出來(lái)。
標(biāo)記-清除:一些容器對(duì)象,比如list、dict、tuple,instance等可能會(huì)出現(xiàn)引用循環(huán),對(duì)于這些循環(huán),垃圾回收器會(huì)定時(shí)回收這些循環(huán)(對(duì)象之間通過(guò)引用(指針)連在一起,構(gòu)成一個(gè)有向圖,對(duì)象構(gòu)成這個(gè)有向圖的節(jié)點(diǎn),而引用關(guān)系構(gòu)成這個(gè)有向圖的邊)。
分代收集:Python把內(nèi)存根據(jù)對(duì)象存活時(shí)間劃分為三代,對(duì)象創(chuàng)建之后,垃圾回收器會(huì)分配它們所屬的代。每個(gè)對(duì)象都會(huì)被分配一個(gè)代,而被分配更年輕的代是被優(yōu)先處理的,因此越晚創(chuàng)建的對(duì)象越容易被回收。
如果你想要深入了解Python的GC機(jī)制,點(diǎn)擊這里:[轉(zhuǎn)載]Python垃圾回收機(jī)制--完美講解!
(四)、Python多線程(multi-threading)。這是個(gè)好主意嗎?
Python并不支持真正意義上的多線程,Python提供了多線程包。Python中有一個(gè)叫Global Interpreter Lock(GIL)的東西,它能確保你的代碼中永遠(yuǎn)只有一個(gè)線程在執(zhí)行。經(jīng)過(guò)GIL的處理,會(huì)增加執(zhí)行的開(kāi)銷。這就意味著如果你先要提高代碼執(zhí)行效率,使用threading不是一個(gè)明智的選擇,當(dāng)然如果你的代碼是IO密集型,多線程可以明顯提高效率,相反如果你的代碼是CPU密集型的這種情況下多線程大部分是雞肋。
(五)、 說(shuō)明os,sys模塊不同,并列舉常用的模塊方法?
官方文檔:
os模板提供了一種方便的使用操作系統(tǒng)函數(shù)的方法
sys模板可供訪問(wèn)由解釋器使用或維護(hù)的變量和與解釋器交互的函數(shù)
另一種回答:
os模塊負(fù)責(zé)程序與操作系統(tǒng)的交互,提供了訪問(wèn)操作系統(tǒng)底層的接口。sys模塊負(fù)責(zé)程序與Python解釋器的交互,提供了一系列的函數(shù)和變量用戶操作Python運(yùn)行時(shí)的環(huán)境。
(六)、什么是lambda表達(dá)式?它有什么好處?
簡(jiǎn)單來(lái)說(shuō),lambda表達(dá)式通常是當(dāng)你需要使用一個(gè)函數(shù),但是又不想費(fèi)腦袋去命名一個(gè)函數(shù)的時(shí)候使用,也就是通常所說(shuō)的匿名函數(shù)。
lambda表達(dá)式一般的形式是:關(guān)鍵詞lambda后面緊接一個(gè)或多個(gè)參數(shù),緊接一個(gè)冒號(hào)“:”,緊接一個(gè)表達(dá)式。lambda表達(dá)式是一個(gè)表達(dá)式不是一個(gè)語(yǔ)句。
(七)、Python中pass語(yǔ)句的作用是什么?
pass語(yǔ)句不會(huì)執(zhí)行任何操作,一般作為占位符或者創(chuàng)建占位程序
(八)、Python是如何進(jìn)行類型轉(zhuǎn)換的?
Python提供了將變量或值從一種類型轉(zhuǎn)換為另一種類型的內(nèi)置方法。
(九)、Python里面如何拷貝一個(gè)對(duì)象?
Python中對(duì)象之間的賦值是按引用傳遞的,如果要拷貝對(duì)象需要使用標(biāo)準(zhǔn)模板中的copy
copy.copy:淺拷貝,只拷貝父對(duì)象,不拷貝父對(duì)象的子對(duì)象。
copy.deepcopy:深拷貝,拷貝父對(duì)象和子對(duì)象。
(十)、__new__和__init__的區(qū)別。
__init__為初始化方法,__new__方法是真正的構(gòu)造函數(shù)。
__new__是實(shí)例創(chuàng)建之前被調(diào)用,它的任務(wù)是創(chuàng)建并返回該實(shí)例,是靜態(tài)方法
__init__是實(shí)例創(chuàng)建之后被調(diào)用的,然后設(shè)置對(duì)象屬性的一些初始值。
總結(jié):__new__方法在__init__方法之前被調(diào)用,并且__new__方法的返回值將傳遞給__init__方法作為第一個(gè)參數(shù),最后__init__給這個(gè)實(shí)例設(shè)置一些參數(shù)。
(十一)、Python中單下劃線和雙下劃線分別是什么?
__name__:一種約定,Python內(nèi)部的名字,用來(lái)與用戶自定義的名字區(qū)分開(kāi),防止沖突
_name:一種約定,用來(lái)指定變量私有
__name:解釋器用_classname__name來(lái)代替這個(gè)名字用以區(qū)別和其他類相同的命名
想要更加詳細(xì)的了解這兩者的區(qū)別,請(qǐng)點(diǎn)擊:Python中的下劃線(譯文)
(十二)、說(shuō)一說(shuō)Python自省。
自省就是面向?qū)ο蟮恼Z(yǔ)言所寫(xiě)的程序在運(yùn)行時(shí),所能知道對(duì)象的類型。簡(jiǎn)單一句話就是運(yùn)行時(shí)能夠獲得對(duì)象的類型。比如:type()、dir()、getattr()、hasattr()、isinstance()
有關(guān)于元類以及單例模式會(huì)在后面文章中做詳細(xì)的解釋說(shuō)明。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/43858.html
摘要:以上是如果你想精通網(wǎng)絡(luò)爬蟲(chóng)的學(xué)習(xí)研究路線,按照這些步驟學(xué)習(xí)下去,可以讓你的爬蟲(chóng)技術(shù)得到非常大的提升。 作者:韋瑋 轉(zhuǎn)載請(qǐng)注明出處 隨著大數(shù)據(jù)時(shí)代的到來(lái),人們對(duì)數(shù)據(jù)資源的需求越來(lái)越多,而爬蟲(chóng)是一種很好的自動(dòng)采集數(shù)據(jù)的手段。 那么,如何才能精通Python網(wǎng)絡(luò)爬蟲(chóng)呢?學(xué)習(xí)Python網(wǎng)絡(luò)爬蟲(chóng)的路線應(yīng)該如何進(jìn)行呢?在此為大家具體進(jìn)行介紹。 1、選擇一款合適的編程語(yǔ)言 事實(shí)上,Python、P...
摘要:適用人群爬蟲(chóng)方向數(shù)據(jù)分析方向非程序員加薪四開(kāi)發(fā)前后端開(kāi)發(fā)是程序員職業(yè)中的熱門(mén),目前來(lái)講,人才缺口依然很大。寄語(yǔ)上面就是所有方向的學(xué)習(xí)路線了,把你感興趣的方向掌握了之后,你去找工作不是什么問(wèn)題的。 ...
摘要:針對(duì)的初學(xué)者,從無(wú)到有的語(yǔ)言如何入門(mén),主要包括了的簡(jiǎn)介,如何下載,如何安裝,如何使用終端,等各種開(kāi)發(fā)環(huán)境進(jìn)行開(kāi)發(fā),中的語(yǔ)法和基本知識(shí)概念和邏輯,以及繼續(xù)深入學(xué)習(xí)的方法。 ...
摘要:文章目錄前言爬取分析視頻教學(xué)成果展示福利入門(mén)到就業(yè)學(xué)習(xí)路線規(guī)劃小白快速入門(mén)爬蟲(chóng)路線前言皮皮蝦一個(gè)沙雕而又有趣的憨憨少年,和大多數(shù)小伙伴們一樣喜歡聽(tīng)歌游戲,當(dāng)然除此之外還有寫(xiě)作的興趣,,日子還很長(zhǎng),讓我們一起加油努力叭話 ...
閱讀 3133·2021-09-22 15:59
閱讀 1375·2021-08-30 09:46
閱讀 2350·2019-08-30 15:54
閱讀 2072·2019-08-26 12:15
閱讀 2605·2019-08-26 12:09
閱讀 1403·2019-08-26 11:57
閱讀 3392·2019-08-23 17:11
閱讀 1941·2019-08-23 15:59