python網絡爬蟲原理

閱讀目錄

一.爬蟲是什麼?

   互聯網是什麼?互聯網是由一個個站點和網絡設備組成的,通過瀏覽器訪問站點,站點把HTML、JS、CSS代碼返回給瀏覽器,這些代碼經過瀏覽器解析、渲染,將豐富多彩的網頁呈現我們眼前;

   爬蟲指的是:通過程序代碼模擬瀏覽器向網站發起請求,把站點(服務器)返回的HTML代碼/JSON數據/二進制數據(圖片、視頻) 爬到本地,進而通過解析代碼分析並提取自己需要的數據;

(若將爬蟲比喻爲蜘蛛,互聯網將是一張蜘蛛網)

 爬蟲作用

   1.搜索引擎---百度,google,垂直領域搜索引擎;

   2.推薦引擎--今日頭條;

   3.機器學習樣本;

   4.數據分析;

二.爬蟲的基本流程?

用戶獲取網絡數據的方式:瀏覽器提交請求---->下載網頁代碼---->解析成頁面;

爬蟲獲取網絡數據的方式:模擬瀏覽器發送請求(獲取網頁代碼)---->提取有用的數據----->存放於數據庫或文件中;

 

1、發起請求

使用http庫向目標站點發起請求,即發送一個Request(包含請求頭、請求體等);

2、獲取響應內容

如果服務器能正常響應,則會得到一個Response(包含:html,json,圖片,視頻等);

3、解析內容

解析html數據:正則表達式(re模塊),第三方解析庫(xpath,css,Beautifulsoup,pyquery等)(xapth最爲方便);

解析json數據:json模塊

解析二進制數據:以wb的方式寫入文件

4、保存數據

數據庫(MySQL,Mongdb等)

文件(Excel等)(利用pandas庫將爬取的數據存儲在Excel較爲方便)

三.http與https協議的區別

網站的URL會分爲兩部分:通信協議和域名地址;

通信協議,簡單來說就是瀏覽器和服務器之間溝通的語言。網站中的通信協議一般就是HTTP協議和HTTPS協議。

HTTP協議是一種使用明文數據傳輸的網絡協議。存在安全隱患。

HTTPS協議可理解爲HTTP協議的升級,就是在HTTP的基礎上增加了數據加密。在數據進行傳輸之前,對數據進行加密,然後再發送到服務器。

四.request與Response之間的關係

Request:即請求,用戶將自己的信息通過瀏覽器發送給服務器。

Response:即響應,服務器接收請求,分析用戶發來的請求信息,然後返回數據。

注:普通獲取網絡數據的方式,瀏覽器在接收Response後,會解析其內容來顯示給用戶,而爬蟲程序在模擬瀏覽器發送請求然後接收Response後,提取其中的有用數據。

五.request請求 以及常用請求方式

1、請求方式:

Requests的Get和POST方法的請求參數分別是params和data;

Requests 是python的很實用的HTTP客戶端庫;

2、定位request請求中的參數URL(url全球統一資源定位符)

  注:網頁的加載過程是:加載一個網頁,通常都是先加載document文檔,

3、請求頭

User-agent:請求頭中如果沒有user-agent客戶端配置,服務端可能將你當做一個非法用戶host;

cookies:cookie用來保存登錄信息

4.常用的請求方式

(1)添加請求頭:(請求頭以字典的形式生成,然後法送請求中以參數的形式傳遞並作用的請求中)

代碼如下:

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/53.0.2785.89 Safari/537.36'}

requests.get("https:....",headers=headers)

(2) 使用代理IP:使用IP的使用方法和請求頭一致,設置proxies參數即可,代碼如下;

import requests

proxies = {"http":"http://10.10.1.10:3128""http":"http://10.10.1.10.1080"}

requests.get("https://....",proxies=proxies)

(3)證書驗證:通常設置關閉驗證即可。在請求設置參數verify=False時就能關閉證書的驗證,默認情況下是True。需要設置證書文件,可在verify值爲證書路徑;

import requests

url = "https://..."

#關閉證書驗證

r = requests.get(url,verify=False)

print(r.status_code)

#開啓證書驗證

r = requests.get(url,verify=True)

#設置證書所在路徑

r = requests.get(url,verify='路徑')

(4)超時設置:

requests.get("https://...",timeout=0.01)

requests.post("https://...",timeout=0.01)

(5)使用cookies:只需設置參數Cookies即可;請求頭注意攜帶;

 

六.Respons響應

1、響應狀態碼

  200:代表成功

  301:代表跳轉

  404:文件不存在

  403:無權限訪問

  502:服務器錯誤

注:通過F12快捷鍵檢查Response響應元素(JSO數據,如網頁html,圖片,二進制數據等 )

七.總結

1、總結爬蟲流程:

 代碼爬取--->Response解析--->數據存儲

2、爬蟲所需工具:

 請求庫:requests
 解析庫:正則,xpath,css,beautifulsoup,pyquery
 存儲庫:文件,MySQL,Mongodb等

爬蟲基礎實例:

例:空氣質量排名-xpath-存儲於mysql數據庫

#xpath方法
import requests
from lxml import html
etree = html.etree
import pymysql

conn = pymysql.connect(host='localhost', user='root', password='admin',
                       db='mysql01', charset='utf8')
# 獲取遊標(指定獲取的數據格式,這裏設定返回dict格式)
cursor = conn.cursor()
url = 'http://www.tianqi.com/air/'

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36sudaref: graph.qq.com'
}

response = requests.get(url=url,headers=headers)
html = etree.HTML(response.text)
id_list = html.xpath('//div[@class="meta"]/ul/li/@id')[1:]
print(id_list)
# del(id_list[0]) #第0號元素無用,不是目標數據,將其刪除

    #建立一個新的列表存放最終數據
print("全國重點城市空氣質量指數排行榜\n排名\t城市\t空氣質量指數\t質量狀況")
for i in range(len(id_list)):
    data = []
    j = id_list[i]
    # print(j)
    result = html.xpath('//div[@class="meta"]/ul/li[@id="%s"]/span/text()'%j)    #獲取排名和空氣質量指數
    rank = data.append(result[0])
    number_top = data.append(result[1])
    city = data.append(html.xpath('//div[@class="meta"]/ul/li[@id="%s"]/span/a/text()'%j)[0])#獲取城市名
    quality = data.append(html.xpath('//div[@class="meta"]/ul/li[@id="%s"]/span/em/text()'%j)[0]) #獲取質量狀況
    print("%s\t%s\t%s\t%s"%(data[0],data[1],data[2],data[3]))
    # mysql 插入語句(將title和boby插入cnblogs表中)
    sql = 'insert into air value (%s,%s,%s,%s)'
    parm = (data[0],data[1],data[2],data[3])
    # execute(sql,args)args一般是list或tuple格式,如果只有一個參數,可直接傳入  execute方法中sql語句佔位符是%s
    cursor.execute(sql, parm)
    # 提交數據 conn.commit()
    conn.commit()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章