day01 爬蟲基本原理以及requests請求庫

一、爬蟲基本原理
1.什麼是爬蟲
爬蟲就是爬取數據
2.什麼是互聯網
有一堆網絡設備,把一台台的計算機互聯到一起稱為互聯網
3.互聯網建立的目的
數據的傳遞與數據的共享
4.什麼是數據
例如:
電商平台的商品信息
鏈家,自如租房平台的房源信息
...
12306,票務信息
5.什麼是上網
普通用戶:
打開瀏覽器
——>輸入網址
——>往目標主機發送請求
——>返迴響應數據
——>把數據渲染到瀏覽器中
爬蟲程序:
模擬瀏覽器
——>往目標主機發送請求
——>返迴響應數據
——>解析並提取有價值的數據
——>保存數據(文件寫入本地、持久化到數據庫中)

6.爬蟲的全過程
1.發送請求(請求庫:Requests/Selenium)
2.獲取響應
3.解析數據(解析庫:BeautifulSoup4)
4.保存數據(存儲庫:文件保存/MongoDB)

總結:我們可以把互聯網中的數據比喻成一座寶藏,爬蟲其實就是在挖寶藏

二、requests請求庫
1.安裝與使用
pip3 install requests
2.分析請求流程(模擬瀏覽器)
-百度:
1.請求URL
2.請求方式
3.響應狀態碼

具體事例如下
'''
爬校花網視頻:
一、請求rul
http://www.xiaohaur.com/v/
二、請求方式
    get
三、請求頭信息
user-agent:用戶代理
'''
 1 import time
 2 import requests
 3 #爬蟲三部曲
 4 #1.發送請求
 5 def get_page(url):
 6     response = requests.get(url)
 7     return response
 8 # 2.解析數據
 9 import re
10 def parse_index(html):
11     # findall匹配所有
12     # re.findall('正則匹配規則','匹配文本','匹配模式')
13     # re.S:對所有文本進行搜索匹配
14     detail_urls = re.findall(
15         '<div class="items"><a class="imglink" href="(.*?)"',
16         html,re.S
17     )
18     return detail_urls
19 # 解析詳情頁
20 def parse_detail(html):
21     movie_url = re.findall('<source src="(.*?)">',html,re.S)
22     #print(movie_url)
23     if movie_url:
24         return movie_url[0]
25 # 3.保存數據
26 import uuid
27 #uuid.uuid4()根據時間戳生成一段世界上唯一的字符串
28 def save_video(content):
29     with open(f'{uuid.uuid4()}.mp4','wb')as f:
30         f.write(content)
31         print('視頻下載完畢')
32 # main + 回車鍵
33 # 測試用例
34 if __name__ == '__main__':
35     for line in range(6):
36         url=f'http://www.xiaohuar.com/list-3-{line}.html'
37         #發送請求
38         response = requests.get(url)
39         #print(response)
40         # # 返迴響應狀態碼
41         # print(response.status_code)
42         # # 返迴響應文本
43         # print(response.text)
44 
45         #解析主頁頁面
46         detail_urls = parse_index(response.text)
47 
48         #循環遍歷詳情頁url
49         for detail_url in detail_urls:
50             # print(detail_url)
51             # 往每一個詳情頁發送請求
52             detail_res = get_page(detail_url)
53             #print(response.text)
54             #解析詳情頁獲取視頻url
55             movie_url = parse_detail(detail_res.text)
56             # 判斷視頻url存在則打印
57             if movie_url:
58                 print(movie_url)
59 
60                 # 往視頻url發送請求獲取視頻二進制流
61                 movie_res = get_page(movie_url)
62 
63                 # 把視頻的二進制流傳給save_video函數保存到本地
64                 save_video(movie_res.content)

 

POST請求自動登錄GitHub:
'''
POST請求自動登錄GitHub:
   一、請求rul
       https://github.com/session
   二、請求方式
        POST
   三.請求頭
       cookies
        User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
   四.請求體
      from data
      commit: Sign in
      utf8: ✓
      authenticity_token: LVyIb9FUxiI6XMain4PXzgOjKn9DzYzqdCwMvosVn+/Cht8LVgCuKjc7fbNfk5TiXf4W+6y56GmRnu1A4T0VIQ==
      login: sjdkjw
      password: 1562132
      webauthn-support: supported
'''

#獲取token隨機字符串
'''
1.訪問登錄頁面獲取token隨機字符串
   一、請求rul
       https://github.com/login
   二、請求方式
        GET
   三.請求頭
        cookies
        User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
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; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
login_res = requests.get(url=login_url,headers=login_header)
#print(login_res.text)
#解析提取token字符串
authenicity_token = re.findall(
    '<input type="hidden" name="authenticity_token" value="(.*?)" />',
    login_res.text,re.S
)[0]
print(authenicity_token)

# 2.開始登錄github
'''
POST請求自動登錄GitHub:
   一、請求rul
       https://github.com/session
   二、請求方式
        POST
   三.請求頭
        cookies
        User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
   四.請求體
    from data
      commit: Sign in
      utf8: ✓
      authenticity_token: LVyIb9FUxiI6XMain4PXzgOjKn9DzYzqdCwMvosVn+/Cht8LVgCuKjc7fbNfk5TiXf4W+6y56GmRnu1A4T0VIQ==
      login: ****
      password: *****
      webauthn-support: supported
'''
#獲取login頁面的cookies信息
login_cookies = login_res.cookies.get_dict()
# session登錄url
session_url = 'https://github.com/session'

#請求頭信息
session_headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}

#請求體信息
form_data = {
    "commit": "Sign in",
    "utf8": "",
    "authenticity_token": "authenicity_token",
    "login": "****",
    "password": "*****",
    "webauthn-support": "supported"
}
session_res = requests.post(url=session_url,
                            headers=session_headers,
                            cookies=login_cookies,
                            data=form_data
                            )
with open('github1.html','w',encoding='utf-8') as f:
    f.write(session_res.text)

 

点赞

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *