Anaconda的開發環境介紹以及簡單爬蟲的應用

王菜鳥發表於2020-11-10

開發環境的介紹

  • anaconda
    • 基於資料分析和機器學習的整合環境
  • jupter
    • anaconda提供的一個基於瀏覽器的視覺化開發工具

jupter的基本使用

  • 在終端彙總錄入jupter notebook的指令啟動Jupter視覺化開發工具
  • jupter notebook的指令錄入對應的預設的目錄結構就是終端對應的目錄結構
  • new->text file :新建一個任意字尾名的文字檔案
  • new->python 3 : 新建一個基於jupter的原始檔(xxx.ipynb)
  • cell : jupter原始檔的一個編輯行
  • cell 是可以分為兩種不同的模式:
    • code:用來編寫和執行程式碼
    • Markdown :編寫筆記
  • 快捷鍵的使用
    • 插入cell :a,b
    • 刪除cell :x
    • 執行cell :shift+enter
    • 切換cell的模式:
      • y :將Markdown模式的cell切換到code模式
      • m :將code切換成Markdown
    • 開啟幫助文件:
      • shift+tab

爬蟲的相關概念

  • 爬蟲:就是通過編寫程式,讓其模擬瀏覽器上網,然後去網際網路上抓取資料的過程
    • 模擬:瀏覽器就是一款天然的爬蟲工具
    • 抓取:抓取一整張資料,抓取一整張資料中的區域性資料
  • 爬蟲的分類:
    • 通用爬蟲:(資料的爬取)
      • 抓取一整張頁面原始碼資料
    • 聚焦爬蟲:(資料解析)
      • 抓取區域性的指定資料。是建立在通用爬蟲基礎之上的!
    • 增量式爬蟲:(資料的更新)
      • 監測網站資料更新的情況!抓取網站最新更新出來的資料
    • 分散式爬蟲:
  • 反爬機制:
    • 一些網站後臺會設定相關的機制阻止爬蟲程式進行資料的爬取。這些機制是網站後臺設定的反爬機制。
  • 反反爬策略
    • 爬蟲需要制定相關的策略破解反爬機制,從而可以爬取到網站的資料。
  • 第一個反爬機制:
    • robots協議是一個存在於伺服器的一個文字協議。指明瞭該網站中哪些資料可以爬取,哪些不可以爬取

requests模組

  • urllib模組:基於模擬瀏覽器上網的模組。網路請求的模組
  • requests模組:基於網路請求的模組
    • 作用:模擬瀏覽器上網
  • requests模組的編碼流程:
    • 指定url
    • 發起請求
    • 獲取響應資料(爬取到的資料)
    • 持久化儲存
# 匯入requests包
import requests

# 1.爬取搜狗首頁的頁面原始碼資料
url = 'https://www.sogou.com/'
response =  requests.get(url=url)
page_text = response.text # text返回的是字串形式的響應資料
with open('./sogou.html','w',encoding='utf-8') as fp:
    fp.write(page_text)

# 2.簡易的網頁採集器
# 設計到的知識點:引數動態化,UA偽裝,亂碼的處理
word = input('enter a key word:')
url = 'https://www.sogou.com/web'
# 引數動態化:將請求引數封裝成欄位作用到get方法的params引數中
params = {
    'query':word
}
response = requests.get(url=url,params=params)
page_text = response.text
fileName = word+'.html'
with open(fileName,'w',encoding='utf-8') as fp:
    fp.write(page_text)
print(word,'下載成功!')

以上程式碼通過輸入搜尋的關鍵詞,效果圖如下:
在這裡插入圖片描述

回到資料夾所在位置,可以看到剛才爬取的網頁,開啟後看到的效果如下:
在這裡插入圖片描述

  • 上述程式碼出現的問題:
    • 亂碼問題
    • 爬取資料丟失
      那麼下面是對亂碼的處理:
# 亂碼處理
word = input('enter a key word:')
url = 'https://www.sogou.com/web'
# 引數動態化:將請求引數封裝成欄位作用到get方法的params引數中
params = {
    'query':word
}
response = requests.get(url=url,params=params)
# 可以修改響應資料的編碼
response.encoding = 'utf-8'  # 手動修改了響應物件的編碼格式
page_text = response.text
fileName = word+'.html'
with open(fileName,'w',encoding='utf-8') as fp:
    fp.write(page_text)
print(word,'下載成功!')

處理完亂碼後,但是還是沒有出現想要的效果
在這裡插入圖片描述

  • 什麼叫異常的訪問請求?
    • 在爬蟲中正常的訪問請求指的是通過真實的瀏覽器發起的訪問請求。
    • 異常的訪問請求:通過非瀏覽器發起的請求。(爬蟲程式模擬的請求傳送)
  • 正常的訪問請求和異常的訪問請求的判別方式是什麼?
    • 是通過請求頭中的User-Agent判別。
    • User-Agent:請求載體的身份標識
    • 目前請求的載體可以是:瀏覽器,爬蟲
  • 反爬機制:
    • UA檢測:網站後臺會檢測請求載體的身份標識(UA)是不是瀏覽器
    • 是:正常的訪問請求
    • 不是:異常的訪問請求
  • 反反爬策略:
    • UA偽裝:
      • 將爬蟲對於的請求載體身份標識偽裝/篡改成瀏覽器的身份標識
      • User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36
import requests
# UA偽裝
word = input('enter a key word:')
url = 'https://www.sogou.com/web'
# 引數動態化:將請求引數封裝成欄位作用到get方法的params引數中
params = {
    'query':word
}
# UA偽裝
headers = {
    "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
# 將偽裝的UA作用到了請求的請求頭中
response = requests.get(url=url,params=params,headers=headers)
# 可以修改響應資料的編碼
response.encoding = 'utf-8'  # 手動修改了響應物件的編碼格式
page_text = response.text
fileName = word+'.html'
with open(fileName,'w',encoding='utf-8') as fp:
    fp.write(page_text)
print(word,'下載成功!')

總結

  • 總結:
    • get方法的引數:
      • url
      • params
      • headers
    • get方法的返回值:
      - response
    • response的屬性:
      • text :字串形式的響應資料

相關文章