爬虫入门
爬蟲入門筆記
- 爬蟲概念
- 爬蟲用途
- 爬蟲分類
- 通用爬蟲和聚焦爬蟲
- 積累式爬蟲和增量式爬蟲
- 表層爬蟲和深層爬蟲
- 爬蟲實現原理
- robots.txt文件
- 網頁請求原理
- 瀏覽網頁過程
- 統一資源定位符:
- 協議頭:
- 服務器地址和端口:
- 計算機域名系統:
- HTTP 網絡請求原理
- 請求行:
- 五級標題
- HTTP抓包工具Fiddler
- 爬取網絡數據:
- urllib庫
- 快速抓取一個網頁
- 分析urlopen方法
- data 參數使用:
- timrout 參數使用
- 使用HTTPResponse對象
- 構造Resquest對象
爬蟲概念
爬蟲用途
搜索引擎
爬取圖片
爬取網站公開信息......
爬蟲分類
通用爬蟲和聚焦爬蟲
1:全網爬蟲,爬取種子URL擴充到整個網絡,為門戶站點搜索引擎和大型Web服務提供商采集數據
2:主題網絡爬蟲:選擇性的爬取那些與預先設定好的主題相關的頁面
積累式爬蟲和增量式爬蟲
1:通過遍歷的方式,規模龐大,但抓取的數據不會再隨時間的更新而更新
2:在一定量的規模的基礎上,更新已有集合中果實的網頁,不重新下載沒有變化的網頁,但增加了爬行算法的復雜度和實現難度
表層爬蟲和深層爬蟲
1:表層網頁,以超鏈接可以到達的靜態頁面為主構成的Web頁面2:大部分內容不能通過靜態連接獲取,隱藏在搜索表單之后的,只有提交一些關鍵詞才能獲取的Web頁面
爬蟲實現原理
1:通用爬蟲:從一個或若干個初始網頁的URL開始,在爬取頁面的過程中,不斷從當前頁面抽取新的URL放入列隊,直到滿足系統的停止提條件
2:聚焦爬蟲:網頁分析算法過濾與主題無關的鏈接
robots.txt文件
通過一個符合robots協議的文件來告訴搜索引擎的哪些頁面可以爬取,那些頁面不能爬取
網頁請求原理
瀏覽網頁過程
統一資源定位符:
協議頭:
File 訪問本地計算機的資源FTP 訪問共享主機的資源HTTP 超文本傳輸協議HTTPS 安全的ssl加密傳輸協議,訪問遠程網絡資源Mailto訪問電子郵件地址
最常用的是HTTP 與HTTPS
服務器地址和端口:
存放資源的服務器的主機名或IP地址
HTTP程序默認端口號80
HTTPS 443
路徑:是由0個或多個“/”符號隔開的字符串
計算機域名系統:
從域名服務器查找該域名對應的IP地址,然后再向IP地址對應的Web服務器發送資源請求
HTTP 網絡請求原理
請求格式:請求方法 空格 URL 空格 協議版本
頭部字段名: 值 回車符 換行符
請求行:
eg:GET https://www.baidu.com/ HTTP/1.1
請求方法:
1:GET 請求指定的頁面信息,并返回實體主體
2:POST 向指定資源提交數據
3:HEAD 類似GET,沒有具體內容4:PUT 客戶端傳遞的數據取代指定文件夾的內容5:DELETE 請求服務器刪除指定頁面6:TRACE 回顯服務器收到的請求,用于測試和診斷
五級標題
HTTP抓包工具Fiddler
Fiddler工作原理
以代理網絡服務器形式工作 代理地址:127.0.0.1 端口號8888
爬取網絡數據:
urllib庫
urllib是Python中請求url連接的官方標準庫,在Python2中主要為urllib和urllib2,在Python3中整合成了urllib。urllib中一共有四個模塊,分別如下:request:主要負責構造和發起網絡請求,定義了適用于在各種復雜情況下打開 URL (主要為 HTTP) 的函數和類error:處理異常parse:解析各種數據格式robotparser:解析robot.txt文件
快速抓取一個網頁
import urllib.request
from urllib import requestresponse=urllib.request.urlopen('http://www.baidu.com')
html=response.read().decode('UTF-8')
print(html)
分析urlopen方法
#response=urllib.request.urlopen(‘http://www.baidu.com’)
‘’’
傳入了一個百度首頁的URL,
urlopen可以接收多個參數
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
url: 請求的網址
data:要發送到服務器的數據
timeout:設置網站的訪問超時時間
urlopen返回對象提供方法:
‘’’
data 參數使用:
import urllib.request
import urllib.parse
data=bytes(urllib.parse.urlencode({'world':'hello'}).encode('utf-8'))
response=urllib.request.urlopen('http://httpbin.org/post',data=data)
print(response.read())
timrout 參數使用
import urllib.request
import urllib.parse
response=urllib.request.urlopen('http://httpbin.org/post',timeout=1)
print(response.read())
使用HTTPResponse對象
import urllib.requestresponse=urllib.request.urlopen('http://www.itcase.cn')
print(type(response))
#結果:<class ‘http.client.HTTPResponse’>
構造Resquest對象
import urllib.request
# 將url作為Resquest()方法的參數,構造并返回一個Request對象
response=urllib.request.urlopen('http://www.baidu.com')
# 將Resquest對象作為urlopen()方法的參數,發送給服務器并接受響應
response=urllib.request.urlopen(request)
# 使用read()讀取網頁內容html=response.read().decode('UTF-8')
print(html)
總結
- 上一篇: python基础--urllib
- 下一篇: 爬虫---数据解析