爬蟲--基於urllib的簡單的爬蟲反爬蟲

anaconda下自帶 jupyter notebook ,安裝及環境變量設置參考:
https://blog.csdn.net/Light__1024/article/details/88655333

簡介:

爬蟲,模擬瀏覽器瀏覽網頁,抓取頁面數據(抓取全部數據或指定數據)。
robots.txt協議,口頭協議,約定爬蟲數據的獲取要遵循的協議。
在這裏插入圖片描述
在這裏插入圖片描述
NEW

點擊Folder新建一個文件夾

點擊Python 3  新建一個ipynb爲後綴的文件

點擊Text File  默認生成一個文本文件  可以修改文件名和後綴

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

快捷鍵的使用

快捷鍵的使用

b向下插入一個cell

a向下插入一個cell

m:將cell的類型切換成markdown類型

y:將cell的類型切換成code類型

shift+enter:執行

shift+tab:查看模塊的幫助文檔

tab:自動補全

urllib

  • Python自帶的一個用於爬蟲的庫
  • 主要作用:通過代碼模擬瀏覽器發送請求。
  • 常被用到的子模塊:urllib.request和urllib.parse

使用流程:

  • 指定url
  • 基於urllib的request子模塊發起請求
  • 獲取響應中的數據值
  • 持久化存儲
import urllib.request

# 1.指定url字符串形式
url = 'https://www.sogou.com/'

#2.發起請求:urlopean可以根據指定的url發起請求,且返回一個響應對象
response = urllib.request.urlopen(url = url)

#3.獲取頁面數據:read函數返回的就是響應對象中存儲的頁面數據:(byte)-二進制形式
page_text = response.read()

#4.持久化存儲,'wb'
with open('sougou.html','wb') as f:
        f.write(page_text)

在這裏插入圖片描述
在這裏插入圖片描述

反爬機制:

網站檢查請求的UA,如果發現UA是爬蟲程序,則拒絕提供網站數據

  • User-Agent(UA):請求載體的身份標識
  • 反反爬機制:僞裝爬蟲程序請求的UA–如何通過代碼實現
import urllib.request
url='https://www.baidu.com/'

# 自制定一個請求對象,注意參數格式
headers={
   #存儲任意的請求頭信息
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
request = urllib.request.Request(url=url,headers=headers)

response = urllib.request.urlopen(request)
page = response.read()
with open('baidu2.html','wb') as f:
        f.write(page)

小結

簡單的爬蟲反爬蟲只需記住:

在這裏插入圖片描述

post請求

import urllib.request
import urllib.parse
# 1.通過抓包工具抓取post請求的url
post_url='https://fanyi.baidu.com/sug' 
# 2.封裝post請求參數
data={
    "kw":"西瓜"
}
# 3.使用parse模塊中的urlencode(返回值類型爲str)進行編碼處理
data=urllib.parse.urlencode(data)
#自定義請求頭信息字典
headers={
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
}
# 4.將步驟3中的編碼結果轉換成byte類型
data = data.encode()

#自定義請求對象,然後將封裝好的post請求參數賦值給Requst方法的data參數。

#data參數:用來存儲post請求的參數
request=urllib.request.Request(post_url,data=data,headers=headers)
#自定義的請求對象中的參數(data必須爲bytes類型)
response=urllib.request.urlopen(request)
response.read()

爬蟲參考:https://www.cnblogs.com/foremostxl/p/10057154.html

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