總結爬蟲流程:爬取--->解析--->存儲
什么是爬蟲?請求網站并提取數(shù)據(jù)的自動化程序就叫做爬蟲。
爬蟲的主要目的?是將互聯(lián)網上的網頁下載到本地形成一個互聯(lián)網內容的鏡像備份。
爬蟲的基本流程?
1.用戶獲取網絡數(shù)據(jù)的方式:
1:瀏覽器提交請求--->下載網頁代碼--->解析成頁面
2:模擬瀏覽器發(fā)送請求(獲取網頁代碼)->提取有用的數(shù)據(jù)->存放于數(shù)據(jù)庫或文件中
爬蟲要做的就是方式2;
發(fā)起請求
使用http庫向目標站點發(fā)起請求,即發(fā)送一個Request
Request包含:請求頭、請求體等
Request模塊缺陷:不能執(zhí)行JS 和CSS 代碼
2、獲取響應內容
如果服務器能正常響應,則會得到一個Response
Response包含:html,json,圖片,視頻等
3、解析內容
解析html數(shù)據(jù):正則表達式(RE模塊),第三方解析庫如Beautifulsoup,pyquery等
解析json數(shù)據(jù):json模塊
解析二進制數(shù)據(jù):以wb的方式寫入文件
4、保存數(shù)據(jù)
數(shù)據(jù)庫(MySQL,Mongdb、Redis)
文件
Request:用戶將自己的信息通過瀏覽器(socket client)發(fā)送給服務器(socket server)
Response:服務器接收請求,分析用戶發(fā)來的請求信息,然后返回數(shù)據(jù)(返回的數(shù)據(jù)中可能包含其他鏈接,如:圖片,js,css等)
request
1、請求方式:常見的請求方式:GET / POST
2、請求的URL
url全球統(tǒng)一資源定位符,用來定義互聯(lián)網上一個唯一的資源 例如:一張圖片、一個文件、一段視頻都可以用url唯一確定
url編碼
3、請求頭
User-agent:請求頭中如果沒有user-agent客戶端配置,服務端可能將你當做一個非法用戶host;
cookies:cookie用來保存登錄信息
一般做爬蟲都會加上請求頭,模擬用戶請求
請求頭需要注意的參數(shù):
1.Referrer:訪問源至哪里來(一些大型網站,會通過Referrer 做防盜鏈策略;所有爬蟲也要注意模擬)
User-Agent:訪問的瀏覽器(要加上否則會被當成爬蟲程序)
cookie:請求頭注意攜帶
xpath
動態(tài)加載:使用json串轉換
靜態(tài)頁面:使用正則,xpath..
結構化數(shù)據(jù):先有結構,在有數(shù)據(jù) json path
非結構化數(shù)據(jù):先有數(shù)據(jù),再有結構 正則,xpath
什么是xpath: 是一門在 XML 文檔中查找信息的語言,可用來在 XML 文檔中對元素和屬性進行遍歷。
什么是xml:是傳輸數(shù)據(jù)而并非顯示數(shù)據(jù)
xpath 語法的目的,找到節(jié)點,提取信息
xpath 語法
使用xpath 語法提取數(shù)據(jù)
什么是xpath: 是一門在 XML 文檔中提取信息數(shù)據(jù)的語言,可以用來在xml文檔中對元素(標簽)的屬性進行遍歷
xml:是一個可擴展的標記語言,語法和html相像,里面的節(jié)點可以自己定義,被設計的目的用來進行數(shù)據(jù)的傳輸和保存
安裝lxml pip3 install lxml
以起點中文網為例
notename:節(jié)點:查找出html中標簽名為notname的節(jié)點
/ 表示從根節(jié)點的地方開始查找,(相對性的)
// 表示從任意位置匹配出你想要的節(jié)點
. 表示選取當前節(jié)點
.. 表示選取當前節(jié)點的父節(jié)點
@ 表示選擇屬性
text() 表示取標簽文本內容
notename[1]:表示標簽名為的一個的節(jié)點
notename[last()]:表示取最后一個
notename[last()-1]:表示取倒數(shù)第二個