python爬蟲開發基本知識點梳理

2021-09-20 10:22:37 字數 4634 閱讀 6105

python爬蟲開發基本知識點

***理論上,一切可以瀏覽看到的資料都可以獲取到.

***本質:傳送正確的請求,獲取想要響應。

**概述爬蟲開發過程:

一,目標站點分析,準備階段的注意事項:

檢查**根目錄下/robots.txt中君子協議的說明

如果沒有robots檔案,則預設**資料允許採集

哪些目錄資料可以採集,哪些不允許,否則牽扯到商業性資料他用時,有法律糾紛從該出核定。

關於robots.txt檔案:文件尾部詳細說明。

即各分類**,但要注意有些資料不完整;

初步檢視**擁有者,網域名稱註冊者。

借用瀏覽器開發者工具或抓包工具檢視資料顯示,分析頁面框架技術,靜態還是動態。

4,估計資料量的大小,以備後期選用資料庫的選型。

二,嘗試突破

首先用相對簡單快速的工具,探索突破**需要的驗證

谷歌瀏覽器開發者工具;

postman軟體測試獲取資料;

2,requests模組編寫簡單指令碼

逐個突破技術難點,暫時突破不了的選用其他採集途徑。

常見的反爬機制:

封ip----ip**解決;

js加密:截圖識別或破解js加密;

ua,cookie,模板等常見反爬;

三,突破後,準備正式框架採集,提高效率,做好反爬策略

選用爬蟲框架,scrapy,分布式,redis技術點,編寫爬蟲指令碼;

考慮是否並行採集,提高採集效率,多執行緒、多程序或協程;

調整爬蟲**邏輯;

根據資料量和資料格式選用資料庫hbase\mongodb\mysql;

選用高效的ip**;

四,上線測試伺服器測試

長時間採集遇到的反爬問題,需要反覆測試和觀察,調整爬蟲策略,休息時間等

迴圈自動採集設定;例如從feeds流出去最新資料,並做重複排除,讓資料採集形成閉環,自動迴圈採集資料;

斷點記錄,重啟時自動從斷點開始;

報警機制,採集檢測,中斷報警,資料異常報警;

日誌記錄,資料異常報警記錄。

五,優化採集效率:

**邏輯優化,效果最明顯的地方。

爬蟲**邏輯優化

框架優化,爬蟲指令碼銜接用中介軟體,快取機制,kafuka,或多種mq

ip**成功率高的ip**

伺服器配置:cpu記憶體,頻寬

**知識點梳理:

url:請求路徑、請求位址;

method:請求方式;

cookies:請求需要的cookie資訊;

params:請求引數;

user_agent:簡稱ua,瀏覽器資訊;

host:目的主機;

referer:請求的**;

傳送網路請求:(get/post)

資料量不同,post沒有限制,get受限於瀏覽器位址列內容長度限制;

傳送資料方式不同,get顯示在瀏覽器位址列,post表單形式隱藏提交;

get效率比post高。

python2中:urllib負責將請求編碼,urllib2負責傳送請求;

python3中:可用第三方包requests(對urllib封裝過),更方便傳送請求,接收響應;

用pip安裝requests:pip install requests

請求攜帶的常用引數說明:

proxies=proxies   :ip**

timeout=10       :請求超時設定

headers=headers  :請求頭設定

cookies          :cookies資訊

url              :請求位址

params           :請求位址後跟的引數鍵值對get

json         :json資料格式鍵值對引數 post

data         :表單引數 post

stream       :true:跳轉後的鏈結繼續傳送請求

傳送get請求演示

傳送post請求

json = requests.post(url,data= data).json()//接收json響應資料

userinfo=

login=requests.post(login_url,json=userinfo)

cookies=login.cookies#獲取登入後的cookies

myaddress=requests.get(myaddress_url,cookies=cookies)

3,用lxml第三方庫對響應頁面進行解析:

html = etree.html(text)     //將響應字串文字轉換為html文件

**xpath語法:

//  : 定位根節點;

nodename(標籤名) :根據標籤名定位元素;

:篩選元素;

@  :取乙個屬性值;

/  :取下級標籤

text()   :取標籤內文字資料;

starts-with(@屬性,值):該屬性以某個值作為開頭;

contains(@屬性,值) :和not一起使用,排除掉屬性不包含值的元素;

|  :或,選擇多個標籤;

or  :或,在篩選元素時用;

and :並且,在篩選元素時用

getchildren() :獲取子節點:tr.getchildren()[1].text

例如:html = etree.html(requests.get(『***』).text)

result = html.xpath(『//div[@class=」my_div」]/a/text()』)[0] //

得到序列

4,響應中攜帶的資訊:

-- r.status_code     #響應狀態碼:200,403

-- r.content      #位元組方式的響應體,會自動為你解碼

-- r.headers      #以字典物件儲存伺服器響應頭,但是這個字典比較特殊,字典鍵不區分大小寫,若鍵不存在則返回none

-- r.json()      #requests中內建的json解碼器

-- r.url         # 獲取url

-- r.encoding        # 編碼格式

-- r.cookies          # 獲取cookie

-- r.raw          #返回原始響應體

-- r.text           #字串方式的響應體,會自動根據響應頭部的字元編碼進行解碼

-- r.raise_for_status() #失敗請求(非200響應)丟擲異常

*****requests原始碼解析:

阻止google spider:googlebot訪問**上某種格式的

(禁止訪問.jpg 格式的)

只允許google spider:googlebot抓取網頁和.gif格式

(googlebot只能抓取gif格式的和網頁,其他格式的被禁止;

其他搜尋引擎未設定)

只禁止google spider:googlebot抓取.jpg格式

(其他搜尋引擎和其他格式沒有禁止)

基本知識點

1 程序和執行緒的關係 1 在有執行緒的作業系統裡面,程序是分配資源的基本單位,執行緒是排程的基本單位。2 1個程序可以擁有多個執行緒 3 執行緒同時也有一些自己的資源,包括 程式計數器,堆疊等 4 因為執行緒所擁有的資源比較少,因此進行排程的時候所消耗的資源就少。5 執行緒共享程序的 段,程序的一...

基本知識點

dram 動態隨機訪問儲存器 dynamic random access memory 隨機訪問的意思是,訪問任何乙個記憶體單元的速度和它的位置 位址 無關,讀寫位址0x00001和0xffff0所需要的事件是一樣的。rom 唯讀儲存器 read only memory 它的內容是預先寫入的,掉電也...

Python基本知識點總結

本文總結了python中最基本的知識點。1 基本數學操作符 python中最常用的數學操作符如下表所示 操作符含義 舉例結果 加法 1 23 減法2 11 乘法1 22 除法2 12 整除 商數取整 5 22 取模 取餘數 5 21 指數3 3 81上表中操作符的優先順序從低到高的順序為 接下來是 ...