寫爬蟲程式應注意的問題

2021-09-25 03:55:08 字數 749 閱讀 3979

我們知道,網路爬蟲是一種按照一定的規則,自動地抓取**資訊的程式或者指令碼。那麼,我們怎麼通過網路爬蟲獲取所需要的**資訊呢?

不同的**有不同的規則,爬蟲工程師根據這些規則設計不同的網路爬蟲,以此來順利獲取所需要的資訊。

一、開放api的**

乙個網如果開放了api,那麼就可以直接get到它的json資料。有三種方法可以判斷乙個**是否開放了api。

1、在站內尋找api入口;

2、用搜尋引擎搜尋「某**api」;

3、抓包,有的**雖然用到了ajax,但是通過抓包還是能夠獲取xhr裡的json資料的(可用抓包工具抓包,也可以通過瀏覽器按f12抓包:f12-network-f5重新整理)。

二、不開放api的**

1、如果**是靜態頁面,那麼可以用requests庫傳送請求,再通過html解析庫(lxml、parsel等)來解析響應的text;解析庫強烈推薦parsel,不僅語法和css選擇器類似,而且速度也挺快,scrapy用的就是它。

2、如果**是動態頁面,可以先用selenium來渲染js,再用html解析庫來解析driver的page_source。

三、反爬蟲**

很多**都具有反爬蟲策略,常見的有:驗證碼、登陸、限制ip等。

1、驗證碼。可以利用打碼平台破解(如果硬上的話用opencv或keras訓練圖);

2、登陸。利用requests的post或者selenium模擬使用者進行模擬登陸;

3、限制ip。購買億牛雲**ip(免費ip效果非常差,不建議使用)。

應注意的問題

1.區域性變數的名稱要有意義,盡量用對應的英文命名,比如 使用者姓名 變數,不要用aa bb cc等來命名,而要使用username。2.不要使用單個字母的變數,如i n x等。而要使用index temp等。用於迴圈迭代的變數例外。3.應該使用pascal命名法命名方法名 屬性名 類名和命名空間,...

寫程式的注意點

上大學 讀研 工作以來,不知不覺已經 年了。從高中的vb到現在的linux c,程式設計反而變得越來越簡單了,但是考慮的東西多了。下面就是我編寫程式經常考慮的一些情況。1 函式編寫的時候是否藉口型別一致 2 if 是否可以跳出 3 while for是否會發生死迴圈 4 巨集的優先順序是否 5 所有...

寫程式的注意點

上大學 讀研 工作以來,不知不覺已經 年了。從高中的vb到現在的linux c,程式設計反而變得越來越簡單了,但是考慮的東西多了。下面就是我編寫程式經常考慮的一些情況。1 函式編寫的時候是否藉口型別一致 2 if 是否可以跳出 3 while for是否會發生死迴圈 4 巨集的優先順序是否 5 所有...