集合容器列表:
list是一種有序的集合永丝,可以隨時添加和刪除其中的元素、列表可以存放各種類型的 ??
數(shù)據(jù)列表包含了增刪改查:
查:index[值]下標(biāo)查詢 、
列表.count[值]統(tǒng)計值在列表中出現(xiàn)的次數(shù)?
len(列表)查看長度增:
列表.append(值)。向列表添加值 ?
列表.extend(值),向列表末尾增加另一個列表的值刪:
列表.pop(下標(biāo)) 根據(jù)下標(biāo)刪除回溺,并返回次元素悦荒。
列表.remove(值) 元素的值刪除單下劃線和雙下劃線的區(qū)別:
__foo__:一種約定,Python內(nèi)部的名字,用來區(qū)別其他用戶自定義的命名,以防沖突.
_foo:一種約定,用來指定變量私有.程序員用來指定私有變量的一種方式唯欣,
函數(shù)
不可變參數(shù):整數(shù)、字符串搬味,元祖境氢,
函數(shù)可變的參數(shù):列表、字典局部變量:
在函數(shù)內(nèi)部定義的變量全局變量:能在多個函數(shù)中使用就要使用全局變量了碰纬,使用globa聲明
淺拷貝:淺拷貝是對于一個對象的頂層拷貝
深拷貝:是對于一個對象所有層次的拷貝
Is與==的區(qū)別:is是對比地址,==是對比值
迭代器和生成器:一邊循環(huán)一邊計算的機(jī)制叫做生成器萍聊,可以通過next()函數(shù)調(diào)用的叫做迭代器,迭代器和生成器都可以用for循環(huán)遍歷出來里面的值?
閉包:閉包的特點提高了代碼的可重復(fù)使用性
1悦析、必須有一個內(nèi)嵌函數(shù)
2寿桨、外部函數(shù)必須返回內(nèi)嵌函數(shù)——必須返回那個內(nèi)部函數(shù)
3、外部函數(shù)的返回值必須是內(nèi)嵌函數(shù)
?lambda函數(shù):是一個匿名函數(shù)强戴,一般函數(shù)作為參數(shù)牛隅,只調(diào)用一次,就可以簡寫面向?qū)ο竺嫦驅(qū)ο蟮睦斫猓?/p>
面向?qū)ο笫且环N設(shè)計思想符合人們的思考習(xí)慣
把執(zhí)行者變?yōu)橹笓]者
簡化功能酌泰、把復(fù)雜的簡單化
面向過程:根據(jù)業(yè)務(wù)邏輯從上往下寫的代碼媒佣、強(qiáng)調(diào)的是過程與步驟
面向?qū)ο螅簩?shù)據(jù)和函數(shù)綁定到一起進(jìn)行封裝使用,減少了代碼的重復(fù)使用
裝飾器:經(jīng)常被用于有切面需求的場景陵刹,較為經(jīng)典的有插入日志默伍、性能測試、事務(wù)處理等衰琐。概括就是為已存在的對象添加新的功能也糊,在不改變原來的代碼
新式類和經(jīng)典類的區(qū)別:新式類是在創(chuàng)建中繼承內(nèi)置的object對象、經(jīng)典類是直接聲明的
面向?qū)ο蟮奶卣鳎悍庋b羡宙、繼承狸剃、多態(tài)封裝:類是一種封裝,將屬性和方法封裝狗热。
函數(shù)也是一種封裝钞馁,將具有一定共的邏輯代碼封裝到一個函數(shù)中,使用的時候調(diào)用即可提高代碼的擴(kuò)展性
繼承:將公共的(共性的)屬性和方法放在父類中匿刮,子類只關(guān)注自己特有的屬性和方法僧凰。提高代碼的擴(kuò)展性。
多態(tài):
1熟丸、python支持多態(tài)训措,python是一個弱類型,本身一個變量名,可以存儲任何類型的值绩鸣,可以理解為多種形態(tài)
2怀大、python不支持多態(tài),多態(tài)本身是用于強(qiáng)類型語言的呀闻,python是一個弱類型叉寂,所以不支持多態(tài)類與對象的理解:類是對象的描述、對象是類的具體體現(xiàn)
類變量和實例變量:類變量是給類使用的變量总珠,實例變量是給實例使用的變量元類是用來創(chuàng)建類的東西屏鳍,
設(shè)計模式的六大原則: 單一原則、里氏替換原則局服、依賴倒置原則钓瞭、接口隔離原則、迪米特原則淫奔、開閉原則幾個常用的設(shè)計模式:裝飾器模式山涡、單例模式、工廠模式唆迁、原型模式鸭丛、外觀模式?網(wǎng)絡(luò)編程UDP:是一個無連接的簡單的面向數(shù)據(jù)報的運(yùn)輸層協(xié)議
UDP:不提供可靠性,只負(fù)責(zé)傳送數(shù)據(jù)唐责,并不能保證對面能不能接受鳞溉,傳輸速度快網(wǎng)絡(luò)
四層協(xié)議:應(yīng)用層、傳輸層鼠哥、網(wǎng)絡(luò)層熟菲、網(wǎng)絡(luò)接入層網(wǎng)絡(luò)
七層協(xié)議:應(yīng)用層、表示層朴恳、會話層抄罕、傳輸層、網(wǎng)絡(luò)層于颖、數(shù)據(jù)鏈路層呆贿、物理層
TCP:需要建立連接才能進(jìn)行數(shù)據(jù)的傳輸
TCP三次握手:是客戶端與服務(wù)器建立連接的請求,由客服端發(fā)起
TCP四次揮手:是客戶端與服務(wù)器斷開連接發(fā)送的請求森渐,也是由客戶端發(fā)起的
TCP中的長鏈接:可以省去繁瑣的TCP建立與斷開做入、給客戶一個良好的體驗環(huán)境
TCP中的短鏈接:則需要不停的斷開與鏈接可以減少服務(wù)器的壓力,但是客戶體驗感極差
HTTP:是超文本傳輸協(xié)議的縮寫章母、是一個基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù)母蛛、是一個應(yīng)用層協(xié)議、永遠(yuǎn)都是客戶端發(fā)起請求的
TCP與HTTP的區(qū)別:TPC/IP協(xié)議是傳輸層協(xié)議乳怎,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸,而HTTP是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)
HTTPS:是以安全為目的的HTTP通道蚪缀,在HTTP上進(jìn)行了數(shù)據(jù)的加密系統(tǒng)編程
同步:同時訪問同一資源秫逝,等待前一個資源訪問結(jié)束后下一個訪問才能繼續(xù)進(jìn)行訪問,浪費(fèi)時間询枚,效率低
異步:在訪問資源時后一個程序不用等待前一個程序結(jié)束后執(zhí)行违帆,可以同時進(jìn)行多個線程的運(yùn)行,從而實現(xiàn)多進(jìn)行的操作
進(jìn)程:進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨(dú)立單位.
線程:線程是進(jìn)程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位.線程自己基本上不擁有系統(tǒng)資源金蜀,線程不能夠獨(dú)立執(zhí)行刷后,必須依存在進(jìn)程中線程
全局鎖:為了保證線程安全而采取的獨(dú)立線程運(yùn)行的限制,說白了就是一個核只能在同一時間運(yùn)行一個線程
協(xié)程:協(xié)程是進(jìn)程和線程的升級版,進(jìn)程和線程都面臨著內(nèi)核態(tài)和用戶態(tài)的切換問題而耗費(fèi)許多切換時間,而協(xié)程就是用戶自己控制切換的時機(jī),不再需要陷入系統(tǒng)的內(nèi)核態(tài)
Cookie儲存在客戶端,用于客戶會話跟蹤渊抄,不安全
Session儲存在服務(wù)端尝胆,跟蹤會話,安全
數(shù)據(jù)庫
操作事物:是指作為單個邏輯工作單元執(zhí)行的一系列操作护桦,要么完全執(zhí)行含衔,要么就不執(zhí)行
索引:索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),使用索引可快速訪問數(shù)據(jù)庫表中的特定信息
悲觀鎖:假定會發(fā)生并發(fā)沖突二庵,屏蔽一切可能違反數(shù)據(jù)完整性的操作
樂觀鎖:假設(shè)不會發(fā)生并發(fā)沖突贪染,只在提交操作時檢查是否違反數(shù)據(jù)完整性
爬蟲編程
了解爬蟲:是通過程序的方式,自動采集數(shù)據(jù)催享;程序操作比自然人的操作效率高出很多很多倍
反爬蟲機(jī)制:請求認(rèn)證杭隙、用戶行為認(rèn)證、檢測結(jié)果處理
如何應(yīng)對反爬蟲機(jī)制:User-agent偽造因妙、通過隨機(jī)休眠時間寺渗、代理IP
動態(tài)加載:Ajax是與在不重新加載整個頁面的情況下,與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁的技術(shù)
爬蟲的分類:
?通用爬蟲兰迫、 捜索引擎抓取系統(tǒng)的重要的組成部分信殊,主要是將互聯(lián)網(wǎng)上的網(wǎng)頁下載到本地
聚焦爬蟲、針對某種內(nèi)容的爬蟲汁果,是一種面向需求是的爬蟲是大部分程序員用的
累積爬蟲涡拘、
增量爬蟲、累積式抓取是指從某一個時間點開始据德,通過遍歷的方式抓取系統(tǒng)所能允許存儲和處理的所有網(wǎng)頁?
scrapy五個模塊:spider爬蟲模塊鳄乏,engin引擎模塊,調(diào)度模塊棘利,download下載模塊 pipliene管道模塊橱野、下載器中間件、爬蟲中間件
引擎(Scrapy):用來處理整個系統(tǒng)的數(shù)據(jù)流處理, 觸發(fā)事務(wù)(框架核心)
調(diào)度器(Scheduler):用來接受引擎發(fā)過來的請求, 壓入隊列中, 并在引擎再次請求的時候返回. 可以想像成一個URL(抓取網(wǎng)頁的網(wǎng)址或者說是鏈接)的優(yōu)先隊列, 由它來決定下一個要抓取的網(wǎng)址是什么, 同時去除重復(fù)的網(wǎng)址
下載器(Downloader):用于下載網(wǎng)頁內(nèi)容, 并將網(wǎng)頁內(nèi)容返回給蜘蛛(Scrapy下載器是建立在twisted這個高效的異步模型上的)
爬蟲(Spiders):爬蟲是主要干活的, 用于從特定的網(wǎng)頁中提取自己需要的信息, 即所謂的實體(Item)善玫。用戶也可以從中提取出鏈接,讓Scrapy繼續(xù)抓取下一個頁面
項目管道(Pipeline):負(fù)責(zé)處理爬蟲從網(wǎng)頁中抽取的實體水援,主要的功能是持久化實體、驗證實體的有效性、清除不需要的信息蜗元。當(dāng)頁面被爬蟲解析后或渤,將被發(fā)送到項目管道,并經(jīng)過幾個特定的次序處理數(shù)據(jù)奕扣。
下載器中間件(Downloader Middlewares):位于Scrapy引擎和下載器之間的框架薪鹦,主要是處理Scrapy引擎與下載器之間的請求及響應(yīng)。
爬蟲中間件(Spider Middlewares):介于Scrapy引擎和爬蟲之間的框架惯豆,主要工作是處理蜘蛛的響應(yīng)輸入和請求輸出池磁。
調(diào)度中間件(Scheduler Middewares):介于Scrapy引擎和調(diào)度之間的中間件,從Scrapy引擎發(fā)送到調(diào)度的請求和響應(yīng)
下載中間件與爬蟲中間件的區(qū)別:下載中間件主要是處理Scrapy引擎與下載器之間的請求及響應(yīng)楷兽,爬蟲中間件主要用于爬蟲的響應(yīng)輸入與請求輸出地熄。
?Scrapy具體運(yùn)行流程:
1、引擎從調(diào)度器中取出一個鏈接(URL)用于接下來的抓取
2拄养、引擎把URL封裝成一個請求(Request)傳給下載器
3离斩、下載器把資源下載下來,并封裝成應(yīng)答包(Response)
4瘪匿、爬蟲解析Response
5跛梗、解析出實體(Item),則交給實體管道進(jìn)行進(jìn)一步的處理6、解析出的是鏈接(URL),則把URL交給調(diào)度器等待抓取?
我對scrapy的理解:爬蟲模塊將要爬取的URL交給引擎模塊處理棋弥,引擎模塊處理完后將目標(biāo)地址交給調(diào)度模塊核偿,調(diào)度模塊通過將要下載的數(shù)據(jù)請求交給下載模塊,下載模接收到調(diào)度模塊發(fā)來的下載請求開始下載請求數(shù)據(jù)顽染,將請求數(shù)據(jù)交給爬蟲模塊漾岳,爬蟲模塊經(jīng)過分析后將有用的數(shù)據(jù)交給管道模塊進(jìn)行篩選,將有效的數(shù)據(jù)放入到數(shù)據(jù)庫中粉寞,如果需要繼續(xù)爬取重復(fù)上面的操作Scrapy-redis模塊:多了一個redis模塊尼荆,用于存放URL的列表,調(diào)度模塊換成了分布式調(diào)度器唧垦,Scrapy-redis比scrapy多了個redis捅儒,重復(fù)上面的到爬蟲模塊的時候,爬蟲模塊將需要下載的URL以字典的形式放入到了redis數(shù)據(jù)庫中振亮,然后可以用不同主機(jī)同時連接redis用過scrapy-redis特殊的分布式調(diào)度器進(jìn)行調(diào)度巧还,從而實現(xiàn)分布式爬蟲?