目錄
- 一、爬蟲介紹
- 1.名字解釋
- 2.本質原理
- 3.爬蟲原理
- 4.爬蟲是否合法
- 5.百度其實就是個大爬蟲
- 二、requests模塊發送get請求
- 1.requests模塊
- 2.下載requests模塊
- 三、get請求攜帶引數
- 1.地址欄中拼接
- 2.使用params引數攜帶
- 四、url編碼和解碼
- 五、攜帶請求頭
- 1.前提
- 2.情況:爬取某個網站,不能正常回傳 >>> 說明請求模擬的不像
- 六、攜帶cookie
- 七、發送post請求
- 八、回應Response
- 九、獲取二進制資料
- 十、決議決議json
一、爬蟲介紹
1.名字解釋
? 爬蟲:spider,網路蜘蛛
2.本質原理
- 現在的所有軟體原理:大部分都是
基于http請求發送和獲取請求- pc端的網頁
- 移動端的app
模擬發送http請求,從別人的服務端獲取資料- 怎么繞開反扒:不同程式的反扒措施不一樣,比較復雜,具體情況具體分析
3.爬蟲原理
- 發送http請求【requests,selenium】
- 》》》 第三方服務端
- 》》》服務端回應的資料決議出想要的資料【selenium,b64】
- 》》》 入庫(檔案、資料庫、Excel、Redis、MongoDB等等)
- scrapy:專業的爬蟲框架
4.爬蟲是否合法
-
爬蟲其實算是擦邊的行為,遵守規則的爬,不會違法,(在這里忠告各位玩家,一定要做遵紀守法的好公民,牢飯不香,縫紉機不好踩,)
-
那么爬蟲的規則是什么呢?>>> 爬蟲協議
-
爬蟲協議:每個網站的根路徑下都有
robots.txt,這個檔案規定了:該網站能爬的和不能爬的資料

5.百度其實就是個大爬蟲
- 在百度的搜索框中輸入搜索內容,回車后回傳的資料,是百度資料庫中的資料
- 而百度,其實在一刻不停的在互聯網中爬取各個頁面,鏈接地址>>>爬到的資料保存到自己的資料庫
- 點擊之后,跳轉到真正的地址上去
- 核心:搜索,在海量資料中搜索出想要的資料
- SEO:免費的搜索,排名靠前
- 也叫:搜索引擎優化、關鍵詞自然排名,
通過對站內和站外的優化來提高搜索引擎對網站的友好度,并提高網站的排名
- SEM:花錢買關鍵字
- 也叫:搜索引擎營銷
- 除了對網站做優化以外,也可以用便捷的途徑來更快的讓客戶找到你的網站,這種便捷的方式就是
通過付費的手段,
二、requests模塊發送get請求
1.requests模塊
-
模擬發送http請求的模塊
-
不僅爬蟲用它,后期呼叫第三方介面,也會用到它
-
可以做長鏈接短鏈接的轉換
2.下載requests模塊
-
pip3 install requests
-
本質是封裝了內置模塊urlib3
-
import requests res = requests.get('https://www.cnblogs.com/liuqingzheng/p/16005866.html') print(res.text) # 回應體中的文本內容 print(res.__dict__.keys()) ''' dict_keys([ '_content', '_content_consumed', '_next', 'status_code', 'headers', 'raw', 'url', 'encoding','history', 'reason', 'cookies', 'elapsed', 'request', 'connection' ]) '''
三、get請求攜帶引數
1.地址欄中拼接
-
res=requests.get('https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3') print(res.text)
2.使用params引數攜帶
-
res = requests.get('https://www.baidu.com/s', params={ 'wd': '美女', 'name': 'lqz' }) print(res.text)
四、url編碼和解碼
-
‘美女’被編碼后 >>> E7%BE%8E%E5%A5%B3
-
from urllib import parse res = parse.quote('美女') print(res) # E7%BE%8E%E5%A5%B3 res = parse.unquote('%E7%BE%8E%E5%A5%B3') print(res) # 美女
五、攜帶請求頭
1.前提
http請求,有請求頭,有些網站就是通過請求頭來做反扒
2.情況:爬取某個網站,不能正常回傳 >>> 說明請求模擬的不像
-
User-Agent:
- 客戶端型別:瀏覽器,手機端瀏覽器,爬蟲型別,程式,scrapy,一般偽造成瀏覽器,
-
referer:上次訪問的地址
- Referer:https://www.lagou.com/gongsi/
- 如果要登錄,模擬向登錄介面發送請求
- 正常操作:必須在登錄頁面上才能干這事
- 如果沒有攜帶referer,網站就會認為你是惡意的,拒絕掉
- 圖片防盜鏈
-
cookie:認證后的cookie,就相當于登錄了
-
header
# header={ # # 客戶端型別 # 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36' # } # res=requests.get('https://dig.chouti.com/',headers=header) # print(res.text
六、攜帶cookie
# 4 請求中攜帶cookie#
## 方式一:直接帶在請求頭中
#模擬點贊
# data=https://www.cnblogs.com/Zhang614/p/{
#'linkId':'36996038'
# }
# header={
# # 客戶端型別
# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
# #攜帶cookie
# 'Cookie':'deviceId=web.eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqaWQiOiI3MzAyZDQ5Yy1mMmUwLTRkZGItOTZlZi1hZGFmZTkwMDBhMTEiLCJleHBpcmUiOiIxNjYxNjU0MjYwNDk4In0.4Y4LLlAEWzBuPRK2_z7mBqz4Tw5h1WeqibvkBG6GM3I; __snaker__id=ozS67xizRqJGq819; YD00000980905869%3AWM_TID=M%2BzgJgGYDW5FVFVAVQbFGXQ654xCRHj8; _9755xjdesxxd_=32; Hm_lvt_03b2668f8e8699e91d479d62bc7630f1=1666756750,1669172745; gdxidpyhxdE=W7WrUDABQTf1nd8a6mtt5TQ1fz0brhRweB%5CEJfQeiU61%5C1WnXIUkZH%2FrE4GnKkGDX767Jhco%2B7xUMCiiSlj4h%2BRqcaNohAkeHsmj3GCp2%2Fcj4HmXsMVPPGClgf5AbhAiztHgnbAz1Xt%5CIW9DMZ6nLg9QSBQbbeJSBiUGK1RxzomMYSU5%3A1669174630494; YD00000980905869%3AWM_NI=OP403nvDkmWQPgvYedeJvYJTN18%2FWgzQ2wM3g3aA3Xov4UKwq1bx3njEg2pVCcbCfP9dl1RnAZm5b9KL2cYY9eA0DkeJo1zfCWViwVZUm303JyNdJVAEOJ1%2FH%2BJFZxYgMVI%3D; YD00000980905869%3AWM_NIKE=9ca17ae2e6ffcda170e2e6ee92bb45a398f8d1b34ab5a88bb7c54e839b8aacc1528bb8ad89d45cb48ae1aac22af0fea7c3b92a8d90fcd1b266b69ca58ed65b94b9babae870a796babac9608eeff8d0d66dba8ffe98d039a5edafa2b254adaafcb6ca7db3efae99b266aa9ba9d3f35e81bdaea4e55cfbbca4d2d1668386a3d6e1338994fe84dc53fbbb8fd1c761a796a1d2f96e81899a8af65e9a8ba3d4b3398aa78285c95e839b81abb4258cf586a7d9749bb983b7cc37e2a3; token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqaWQiOiJjZHVfNTMyMDcwNzg0NjAiLCJleHBpcmUiOiIxNjcxNzY1NzQ3NjczIn0.50e-ROweqV0uSd3-Og9L7eY5sAemPZOK_hRhmAzsQUk; Hm_lpvt_03b2668f8e8699e91d479d62bc7630f1=1669173865'
# }
# res=requests.post('https://dig.chouti.com/link/vote',data=https://www.cnblogs.com/Zhang614/p/data,headers=header)
# print(res.text)
## 方式二:通過cookie引數:因為cookie很特殊,一般都需要攜帶,模塊把cookie單獨抽取成一個引數,是字典型別,以后可以通過引數傳入
data={'linkId':'36996038'
}
header={
# 客戶端型別
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
}
res=requests.post('https://dig.chouti.com/link/vote',data=https://www.cnblogs.com/Zhang614/p/data,headers=header,cookies={'key':'value'})
print(res.text)
# 部署專案出現的可能的問題
-路徑問題:ngxin,uwsgi,,,
-資料庫用戶名密碼問題
-前端發送ajax請求問題
-瀏覽器中訪問一下banner介面
-nginx 8080
-安全組 80 8080 3306
-轉到uwsgi的8888,視圖類
-虛擬環境真實環境都要裝uwsgi
-啟動uwsgi是在虛擬環境中啟動的
七、發送post請求
###6 發送post請求
# data = https://www.cnblogs.com/Zhang614/p/{
#'username': '[email protected]',
# 'password': 'lqz123',
# 'captcha': 'cccc',
# 'remember': 1,
# 'ref': 'http://www.aa7a.cn/',
# 'act': 'act_login'
# }
# res = requests.post('http://www.aa7a.cn/user.php', data=https://www.cnblogs.com/Zhang614/p/data)
# print(res.text)
# print(res.cookies) # 回應頭中得cookie,如果正常登錄,這個cookie 就是登錄后的cookie RequestsCookieJar:當成字典
#
# # 訪問首頁,攜帶cookie,
# # res2 = requests.get('http://www.aa7a.cn/', cookies=res.cookies)
# res2 = requests.get('http://www.aa7a.cn/')
# print('[email protected]' in res2.text)
## 6.2 post請求攜帶資料 data=https://www.cnblogs.com/Zhang614/p/{} ,json={} drf后端,列印 request.data
# data=字典是使用默認編碼格式:urlencoded
# json=字典是使用json 編碼格式
# res = requests.post('http://www.aa7a.cn/user.php', json={})
## 6.4 request.session的使用:當request使用,但是它能自動維護cookie
# session=requests.session()
# data = https://www.cnblogs.com/Zhang614/p/{
#'username': '[email protected]',
# 'password': 'lqz123',
# 'captcha': 'cccc',
# 'remember': 1,
# 'ref': 'http://www.aa7a.cn/',
# 'act': 'act_login'
# }
# res = session.post('http://www.aa7a.cn/user.php', data=https://www.cnblogs.com/Zhang614/p/data)
# res2 = session.get('http://www.aa7a.cn/')
# print('[email protected]' in res2.text)
八、回應Response
# Response物件,有很多屬性和方法
-text
-cookies
import requests
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
}
respone = requests.get('https://www.jianshu.com', params={'name': 'lqz', 'age': 19},headers=header)
# respone屬性
print(respone.text) # 回應體的文本內容
print(respone.content) # 回應體的二進制內容
print(respone.status_code) # 回應狀態碼
print(respone.headers) # 回應頭
print(respone.cookies) # 回應cookie
print(respone.cookies.get_dict()) # cookieJar物件,獲得到真正的欄位
print(respone.cookies.items()) # 獲得cookie的所有key和value值
print(respone.url) # 請求地址
print(respone.history) # 訪問這個地址,可能會重定向,放了它沖定向的地址
print(respone.encoding) # 頁面編碼
九、獲取二進制資料
###8 獲取二進制資料 :圖片,視頻
#
# res = requests.get(
# 'https://upload.jianshu.io/admin_banners/web_images/5067/5c739c1fd87cbe1352a16f575d2df32a43bea438.jpg')
# with open('美女.jpg', 'wb') as f:
# f.write(res.content)
# 一段一段寫
res=requests.get('https://vd3.bdstatic.com/mda-mk21ctb1n2ke6m6m/sc/cae_h264/1635901956459502309/mda-mk21ctb1n2ke6m6m.mp4')
with open('美女.mp4', 'wb') as f:
for line in res.iter_content():
f.write(line)
十、決議決議json
# 前后分離后,后端給的資料,都是json格式,
# 決議json格式
res = requests.get(
'https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295®ion=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=json')
print(res.text)
print(type(res.text))
print(res.json()['results'][0]['name'])
print(type(res.json()))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/539580.html
標籤:Python
上一篇:Java中將 int[] 陣列 轉換為 List(ArrayList)
下一篇:爬蟲
