一:爬蟲基本原理
1.什麼是爬蟲?
爬蟲就是爬取數據
2.什麼是互聯網?
由一堆網絡設備,把一臺臺的計算機
互聯到一塊兒稱之爲互聯網
3.互聯網創建的目的
數據的傳遞與數據的共享
4.什麼是數據?
例如:
電商平臺的商品的信息(淘寶.京東.亞馬遜)
鏈家.自如租房平臺的房源信息
股票證券投資信息(東方財富、雪球)
...
12306,票務信息
5.什麼是上網
普通用戶:
打開瀏覽器
--->輸入網址
--->往目標主機發送請求
--->返回響應數據
--->把數據渲染到瀏覽器中
爬蟲程序:
模擬瀏覽器
--->往目標主機發送請求
--->返回響應數據
--->解析並提取有價值的數據
--->保存數據(文件寫入本地.持久化到數據庫中)
6.爬蟲的全過程
1.發送請求(請求庫:Requests/Selenium)
2.獲取響應數據
3.解析數據(解析庫 BeautifulSoup4)
4.保存數據(存儲庫:文件保存、MongoDB)
總結:咱們能夠吧互聯網中的數據比喻成一座寶藏,爬蟲其實就是在挖取寶藏
二:requeste請求庫
1.安裝與使用
pip三、install requests
.
import time import requests # #保存數據 # # 爬取校花網 # # 1.請求ural # # # # 2.請求方式 GET # # # # 3.請求頭信息 # # User-Agent:用戶代理 # # 爬蟲三部曲 # # 1.發送請求 # # 2.解析數據 # # 3.保存數據 def get_page(url): response = requests.get(url) return response import re def parse_index(html): # re.findall('正則匹配規則','匹配文本','匹配模式') #re.S:對所有文本進行搜索匹配 #數組是值 鏈表是地止 detail_urls=re.findall( '<div class="items"><a class="imglink" href="(.*?)"', html,re.S) # print(detail_urls) return detail_urls def parse_detail(html): movie_url = re.findall('<source src="(.*?)">',html,re.S) if movie_url: return movie_url[0] import uuid #uuid.uuid4()根據時間戳生成一段世界上惟一的字符串 def save_video(content): with open(f'{uuid.uuid4()}.mp4','wb') as f: f.write(content) print("視頻下載完畢") if __name__ == '__main__': # main+回車鍵 for line in range(6): #發送請求 url = f'http://www.xiaohuar.com/list-3-{line}.html' response = get_page(url) # print(response) # print(response.status_code) # print(response.text) # 解析主頁頁面 detail_urls = parse_index(response.text) # print(detail_urls) for detail_url in detail_urls : # print(detail_url) # response = get_page(detail_url) # print(response.text) detail_res = get_page(detail_url) movie_url = parse_detail(detail_res.text) print(movie_url) if movie_url: print(movie_url) movie_res = get_page(movie_url) save_video(movie_res.content)
2.post請求自動登陸githubhtml
# POST請求自動登陸github:
# 請求URL:
#
# 請求方式:
# POST
#
# 請求頭:
# Cookie
# User-Agent:
#
# 請求體:
# commit : Sign in
# utf8:
#
'''
訪問登陸頁面獲取token隨機字符串
請求URL
'''
#1.獲取token隨機字符串
'''
1.訪問登陸頁面獲取token隨機字符串
請求URL:
https://github.com/login
請求方式:
GET
請求頭:
Cookies
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
User Agent中文名爲用戶代理,簡稱 UA,它是一個特殊字符串頭,使得服務器可以識別客戶使用的操做系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。
2.解析並提取token字符串
#正則
<input type="hidden" name="authenticity_token" value="(.*?)" />
import requests import re login_url = 'https://github.com/login' #login頁面的請求頭信息 login_header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'} login_res = requests.get(url=login_url,headers=login_header) #authenticity_token a_k = re.findall('<input type="hidden" name="authenticity_token" value="(.*?)" />', login_res.text, re.S )#解析提取token字符串 print(a_k[0]) login_cookies = login_res.cookies.get_dict()#改成字典序 # 獲取login頁面的cookies信息 # print(type(login_res.cookies))查看類型 # print(type(login_res.cookies.get_dict)) #2.開始登陸github session_url='https://github.com/session' session_headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'} form_data = { "commit": "Sign in", "utf8": "✓", "authenticity_token": a_k, "login": "***", "password": "***", "webauthn-support": "supported" } session_res = requests.post(url=session_url, headers=session_headers, cookies=login_cookies, data=form_data) with open('git.html','w',encoding='utf-8') as f: f.write(session_res.text)