一、爬蟲的步驟
1、 需求分析(人做)
2、尋找網站(人)
3、下載網站的回傳內容(requests)
4、通過回傳的資訊找到需要爬取的資料內容(正則運算式-re,xpath-lxml)
5、存盤找到的資料內容(mysql)
二、requests
import requests url = 'http://www.baidu.com/' response = requests.get(url) print(response)
回傳當前url的html資訊,(其他url還可能獲取圖片等)
Response[200],Response是一個類,這個類重寫了__str__方法()
回傳值,如果一個url能正常回傳html內容,回傳值就是200
處理亂碼的方式
1.查看編碼方式:右鍵檢查—>找到head—>charset就是編碼方式
2.通過response指定編碼方式
response.encoding = 'utf-8' print(response.text) print('=' * 30) print(response.content)
三、http協議
1.協議:即雙方遵守的語言,相當于語言,相同的語言能夠相互理解
2.HTTP協議
方法:GET POST
GET:通過URLl獲取網站的資訊,不改變網站的狀態(不改變服務器的任何內容)
POST:通過URL向網站傳輸資訊,改變網站的狀態(POST比GET多from/body資訊)
import requests form = { 'kw':'同' } url = 'https://fanyi.baidu.com/sug' response = requests.post(url, data =https://www.cnblogs.com/liuyebai/p/ form) print(response.text)
HEAD:跟GET類似,但只有head資訊s
OPTIONS:PUT通常指定了資源的存放位置
PUT:跟POST類似,但通常指定了資源的存放位置
DELET:洗掉某個資源
3.HTTP協議的傳輸
Request —URL + request headers(請求頭資訊)
Response —HTML ++ responce headers(回傳頭資訊)
General
Request URL: https://www.baidu.com/
Request Method: GET requests的獲取方法
Status Code: 200 OK 回傳值
Remote Address: 14.215.177.39:443 服務器名稱
Referrer Policy: no-referrer-when-downgrade
4.請求頭資訊中重要的三個資訊
a)User-Agent —身份是什么
b)Referer —跳轉網頁是什么(即現在的網頁是從哪個網頁來的)
c)cookie —本地存盤資訊的—與服務器的session一 一對應
添加的順序:a—>b—>c如果能夠獲取,不再添加
如果加上都不行,把headers全部復制下來
import requests url = 'https://www.xicidaili.com/nn/'
添加請求頭資訊,字典的方式寫入
headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36' } response = requests.get(url, headers = headers) with open('xicidaili.txt', 'wb') as f: f.write(response.content)
5.url的組成
1.協議部分,常見的有"http:", “ftp:”
2.域名部分,如"www.baidu.com",也可以用IP地址代替
3.埠部分,跟在域名后面的是埠,域名和埠用":“作為分隔符,埠不是必須的,如果省略埠,采用默認埠,常見的埠"8080”
4.虛擬目錄部分:從域名(埠)后面第一個“\”到最后一個“\”為止,是虛擬目錄部分
5.檔案名部分:從最后一個"“到”?“為止,或者從最后一個”“到”#“為止,或者從最后一個”“到最后
6.引數部分:從”?“開始到”#“為止之間的部分為引數部分,也叫搜索部分,查詢部分,引數與引數之間用”&“作為分位符
7.錨部分:從”#"開始到最后,都是錨部分,他的作用是跳轉到本頁面的子目錄下,不加載新的頁面
6.Ajax:異步加載,即url不變,經行操作后頁面發生變化,去看network里的XHR
7.json
import requests import json form = { 'kw':'同' } url = 'https://fanyi.baidu.com/sug' response = requests.post(url, data = https://www.cnblogs.com/liuyebai/p/form)
# json是一個包,函式loads的作用是輸入一個字串,輸出這個json字串的python型別資料
json_dict = json.loads(response.text) print(response.text) print("=" * 30) print(json_dict) translated = json_dict['data'][0]['v'] print("翻譯后的內容是:", translated)
8.去重
1、set的實作方式
通過hash函式和hash表實作的,(分而治之的思想)如10000 % 20把這些數分為20類
2、位圖
比如存100000個不重復的數字,0-1000000之間,int形,一個int要占32bit,位圖即給10000位,數字0存在寫入1,不存在寫入0,以此類推
3、布隆過濾器
對于很多url,用hash函式對每個URL分組,對應一個數字,再根據這些數字做位圖
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/527784.html
標籤:Python
上一篇:[Python]解密pyc檔案
