python爬蟲基礎

鏈路層 傳輸層 網絡層 應用層html

IDE 集成開發環境
1.屬性前面添加下劃線 使對象屬性私有化
2. for循環迭代 iter() 生成迭代器 減小空間佔用
3.python語法糖 具備特殊功能的函數
4.列表生成試 a = [x*2 for x in range(10)]
5.類的動態建立 是指當知足某一條件時所建立的類
6.type class 建立類的關鍵字
class Test{}
Test2 = type("Test2", (), {}) 元類

def printNum(self):
print("---num--%d--"%self.num)
Test2 = type("Test2", (), {})
等價於 class printNum2:
def print(self):
print("--num--%d--"%self,Num)
7.內建函數:數組中排序
sorted([1,2,35,5,6,6,56])
sorted(['a','g','h','e','y','h'])
8:去除重複
a = [11,3,3,,5,6,,62,,6,3,6,36,3,6,3,6]
b = set(a)
a = b
9. 求交集a&b 求並集a\b 求差集 a-b 對稱差集 a^b
10. pdb: l list 顯示當前的代碼
n next 向下執行一行代碼
c continue 繼續執行代碼
b break 添加斷點
clear 刪除斷點
p step 進入到一個函數
a args 打印全部的形參數據
r return 快速執行到最後一行
q quit 推出程序
11.os.getpid()查看子進程id os.getppid()查看父進程id
12.os.fork() 多進程建立 生成 while True:
os.fork() 炸彈
ret = os.fork() (底層)
if ret==0:
子進程
else:
父進程
13.p1 = Process(target=xxx)
p1.start()
Process語法機構(進程):
target:表示這個進程實例所調用的對象
args:表示調用對象的位置參數元組
kwargs:表示調用對象的關鍵字參數字典
name:爲當前進程實例的別名
group:大多數狀況用不到
Process類經常使用方法:
is_alive():判斷進程實例還在執行
join:是否等待進程實例執行結束,或等待多少秒
start():啓動進程實例(建立子進程)
run():若是沒有給定target參數,對這個對象調用start()方法,就將執行對象中的run()方法
terminate():無論任務是否完成,當即終止
14.pool = Pool(30)
pool.apply_async(xxx)
#主進程通常用來等待,真正的任務都在子進程中執行
15.socket套接字 tcp 服務器
①socket建立一個套接字
②bind綁定ip和port
③listen使套接字變爲能夠被動連接
④accept等待客戶端的連接
⑤recv/send接收發送數據

import socket
s = socket.cocket.(socket.AF_INET, cocket.SOCK_STREAM)

16.UDP廣播
192.168.0.0 網絡號
192.168.0.255 廣播地址

import socket,sys
dest = ('<broadcast>', 7788) 更通用
s = socket.socket(socket.AF_INET, socket_SOCK_DGRAM)
#對這個餘姚發送廣播的數據的套接字進行修改設置
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1_
s.send("Hi", dest)

17.arp 根據ip找mac地址
rarp 根據mac地址找ip
icmp ping的時候用
DHCP 自動的發現局域網裏沒有IP的電腦並分配IP
DNS 服務器找域名
網絡掩碼 看主機的網段
默認網關 尋找不在某一網段
tcp 長連接(例如:abacusd 一個一個字母的發 訪問百度)
短連接(例如:agagaga 一次發送多個 看視頻)
一次訪問百度所經歷的環節:
1.先解析出baidu.com對應的ip地址
1.先知道默認網關的mac
2.組織數據 發送給默認網關(ip仍是DNS服務器的ip,可是mac地址是默認網關的mac地址)
3.默認網關擁有轉發數據的能力,把數據轉發給路由器
4.路由器根據本身的路由協議,來選擇一個合適的較快的路徑 轉發數據給目的網關
5.目的網關 (DNS服務器所在的網關),把數據轉發給DNS服務器
6.DNS服務器查詢解析出baidu.com對應的IP地址,並把它原路返回給請求這個域名的client
2.獲得了baidu.com對應的IP地址後,會發送tcp的3次握手,進行鏈接
3.使用http協議發送請求給web服務器
4.web服務器收到數據後,經過查詢本身的服務器獲得相應的結果,原路返回給瀏覽器
5.瀏覽器接收到數據後 經過瀏覽器本身的渲染功能來顯示這個頁面
6.瀏覽器 關閉tcp鏈接,即4次揮手
完成訪問...
18.爲何有了IP地址還須要MAC地址?
總體與局部信息傳遞時候,須要知道的實際上是兩個地址:
終點地址(Final destination address)下一跳的地址(Next hop address)IP地址本質上是終點地址,
它在跳過路由器(hop)的時候不會改變,而MAC地址則是下一跳的地址,
每跳過一次路由器都會改變。這就是爲何還要用MAC地址的緣由之一,它起到了記錄下一跳的信息的做用。
19.DDOS攻擊 tcp半鏈式攻擊
tcp半鏈式攻擊稱爲:SYN FLOOD(SYN洪水)
是一種典型的DOS(Denial of Service 拒絕服務)攻擊
效果就是服務器TCP鏈接資源耗盡,中止響應正常的TCP鏈接請求
20.DNS攻擊 域名解析上作文章 udp廣播 僞造DNS應答包
冒充假的DNS服務器主動給電腦提供釣魚網站(假的域名),讓用戶訪問,以此獲取用戶密碼。
21.arp攻擊
僞造數據包 僞造mac地址 中間人作路由器 收到數據保存數據庫
22. 正則表達式
import re
r = re.match("匹配方","被匹配方")
r.group() #查看匹配的字符
. 匹配任意一個字符{除了\n}
[] 匹配[]中列舉的字符
\d 匹配數字
\D 匹配非數字
\s 匹配空白 tab鍵
\S 匹配非空白
\w 匹配單詞字符 即 a-z A-Z 0-9 _
\W 匹配非單詞
* 匹配前一個字符出現0次或者無限次
+ 匹配前一個字符出現一次或者無限次
? 匹配前一個字符出現一次或者0次
{m} 匹配前一個字符出現m次
{m.} 匹配前一個字符至少出現m次
{m,n} 匹配前一個字符出現從m到n次
^ 匹配字符串開頭
$ 匹配字符串結尾
\b 匹配一個單詞的邊界
\B 匹配非單詞邊界
| 匹配左右任意一個表達式
(ab) 將括號中字符做爲一個分組
\num 引用分組num匹配到的字符
{?P<name>} 分組起別名
{?P<name>} 引用別名爲name分組匹配到的字符串
re.sub{r"要替換的內容","替換後的內容","所有的內容"}
匹配網址:re.sub{r"(http://.+?/).*", lambda x: x.group(1), s}
23.單鏈表的操做
is_empty()鏈表是否爲空
length()鏈表長度
travel()便利整個鏈表
add(item)鏈表頭部添加元素
append(item) 鏈表尾部添加元素
insert(pos, item)指定位置添加元素
remove(item)刪除節點
search(item)查找節點是否存在
24.爬蟲
import urllib.request #導包
url = 'http://www.baidu.com' #目標網址
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'} #模擬瀏覽器請求包頭
request = urllib.request.Request(url, headers=header) #構造請求
response = urllib.request.urlopen(request) #請求回覆
html=response.read() #讀數據
print(html) #打印數據
print(response.getcode()) #返回HTTP的響應碼,成功返回200,4服務器頁面出錯,5服務器問題...
print(response.geturl()) #返回請求網址
python

相關文章
相關標籤/搜索