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上表中操作符的優先順序從低到高的順序為 接下來是 ...