Python Learning Day5

Response響應css

 import requests

 response = requests.get('https://baidu.com')
 # response響應
 print(response.status_code)  # 獲取響應狀態碼
 print(response.url)  # 獲取url地址
 print(response.encoding)  # 字符編碼
 response.encoding = 'utf-8'
 print(response.text)  # 獲取文本
 print(response.content)  # 獲取二進制流
 print(response.headers)  # 獲取頁面請求頭信息
 print(response.history)  # 上一次跳轉的地址
 # 一、返回cookie字典 二、返回cookies對象
 print(response.cookies)  # 獲取cookies信息,
 print(response.cookies.get_dict())  # 獲取cookies信息轉換成字典
 print(response.cookies.items())  # 獲取cookies信息轉換成字典
 print(response.encoding)
 print(response.elapsed)  # 訪問時間
  
import requests
# 往音頻地址發送get請求
url = 'https://vd3.bdstatic.com/mda-ic4pfhh3ex32svqi/hd/mda-ic4pfhh3ex32svqi.mp4?auth_key=1557973824-0-0-bfb2e69bb5198ff65e18065d91b2b8c8&bcevod_channel=searchbox_feed&pd=wisenatural&abtest=all.mp4'
response = requests.get(url, stream=True)  # stream=True 把content設置爲一個迭代器對象
print(response.content)
with open('love_for_GD.mp4', 'wb') as f:
    for content in response.iter_content():
        f.write(content)

證書驗證(大部分網站都是https)python

import urllib3
import requests
 # 若是是ssl請求,首先檢查證書是否合法,不合法則報錯,程序終端
response = requests.get('https://www.xiaohuar.com')
print(response.status_code)
# 改進1:去掉報錯,可是會報警告
response = requests.get('https://www.xiaohuar.com', verify=False)
# 不驗證證書,報警告,返回200
print(response.status_code)
# 改進2:去掉報錯,而且去掉警報信息
urllib3.disable_warnings()  # 關閉警告
response = requests.get('https://www.xiaohuar.com', verify=False)
print(response.status_code)
# 改進3:加上證書
# 不少網站都是https,可是不用證書也能夠訪問,大多數狀況都是能夠攜帶也能夠不攜帶證書
# 知乎\百度等都是可帶可不帶
# 有硬性要求的,則必須帶,好比對於定向的用戶,拿到證書後纔有權限訪問某個特定網站
urllib3.disable_warnings()  # 關閉警告
# 僞代碼
response = requests.get(
    'https://www.xiaohuar.com',
    # verify=False,
    # /path/server.crt證書的存放目錄, /path/key
    cert=('/path/server.crt', '/path/key'))
print(response.status_code)

超時設置git

#兩種超時:float or tuple
timeout=0.1  # 表明接收數據的超時時間
timeout=(0.1,0.2)  # 0.1表明連接超時  0.2表明接收數據的超時時間

import requests
response = requests.get('https://www.baidu.com',
                         timeout=0.0001)
print(response.elapsed)
print(response.status_code)

代理設置:先發送請求給代理,而後由代理幫忙發送(封ip是常見的事情)github

import requests
proxies={
    # 帶用戶名密碼的代理,@符號前是用戶名與密碼
    'http':'http://tank:123@localhost:9527',
    'http':'http://localhost:9527',
    'https':'https://localhost:9527',
}
response=requests.get('https://www.12306.cn',
                     proxies=proxies)
print(response.status_code)

認證設置web

import requests
# 經過訪問github的api來測試
url = 'https://api.github.com/user'
HEADERS = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
}

# 測試1,失敗返回401
response = requests.get(url, headers=HEADERS)
print(response.status_code)  # 401
print(response.text)

打印結果:
{
"message": "Requires authentication",
"documentation_url": "https://developer.github.com/v3/users/#get-the-authenticated-user"
}chrome

#測試2,經過requests.auth內的HTTPBasicAuth進行認證,認證成功返回用戶信息
 from requests.auth import HTTPBasicAuth
 response = requests.get(url, headers=HEADERS, auth=HTTPBasicAuth('tankjam', 'kermit46709394'))
 print(response.text)
#
# 測試3,經過requests.get請求內的auth參數默認就是HTTPBasicAuth,認證成功返回用戶信息
 response = requests.get(url, headers=HEADERS, auth=('tankjam', 'kermit46709394'))
 print(response.text)

上傳文件api

#上傳文本文件
 files1 = {'file': open('user.txt', 'rb')}
# # files參數是POST請求固定參數
 response = requests.post('http://httpbin.org/post', files=files1)
 print(response.status_code)  # 200
 print(response.text)  # 200

# 上傳圖片文件
 files2 = {'jpg': open('一拳.jpg', 'rb')}
 response = requests.post('http://httpbin.org/post', files=files2)
 print(response.status_code)  # 200
 print(response.text)  # 200
#
# 上傳視頻文件
 files3 = {'movie': open('love_for_GD.mp4', 'rb')}
 response = requests.post('http://httpbin.org/post', files=files3)
 print(response.status_code)  # 200
 print(response.text)  # 200

selenium模塊講解
一 什麼是selenium?
  最初是一個自動化測試工具。可使用它幫咱們驅動瀏覽器,自動去執行某些自定義好的操做。例如在頁面中執行JS代碼、跳過登陸驗證。可使用selenium幫咱們實現爬蟲。
二 爲何要使用selenium?
  一、優勢:
    使用requests模塊登陸須要分析大量的複雜通訊流程,使用selenium能夠輕鬆跳過登陸驗證。
  二、缺點:
    瀏覽器會加載css、js、圖片、視頻...數據,爬蟲效率相比requests模塊要低。瀏覽器

# selenium之第一次
from selenium import webdriver  # 用來驅動瀏覽器的

# 調用獲得一個動做鏈對象,破解滑動驗證碼的時候用的,能夠拖動圖片
from selenium.webdriver import ActionChains

# 按照什麼方式查找屬性,By.ID,  By.CSS_SELECTOR, By.Class
from selenium.webdriver.common.by import By

from selenium.webdriver.common.keys import Keys  # 鍵盤按鍵操做

# 和下面WebDriverWait一塊兒用的,EC是expected_conditions的別名
from selenium.webdriver.support import expected_conditions as EC

# 等待頁面加載某些元素
from selenium.webdriver.support.wait import WebDriverWait
import time

# 經過谷歌瀏覽器驅動打開谷歌瀏覽器
# webdriver.Chrome(r'chromedriver.exe的絕對路徑')
# chrome = webdriver.Chrome(r'D:\BaiduNetdiskDownload\chromedriver_win32\chromedriver.exe')  # 括號內輸入chromedriver.exe的絕對路徑

# chromedriver.exe存放於python解釋器的Scripts文件夾中

# chrome是一個驅動對象
chrome = webdriver.Chrome()

實例1cookie

# 若try出現異常
try:
    # 往tank博客主頁發送get請求
    # chrome.get('https://www.cnblogs.com/kermitjam/')
    # 參數1: 驅動對象  參數2: 等待時間
    wait = WebDriverWait(chrome, 10)
    # 一、訪問百度
    chrome.get('https://www.baidu.com/')
    # 二、查找input輸入框
     input_tag = wait.until(
        # 調用EC的presence_of_element_located()
        EC.presence_of_element_located(
            # 此處能夠寫一個元組
            # 參數1: 查找屬性的方式
            # 參數2: 屬性的名字
            (By.ID, "kw")
        )
    )
    input_tag = wait.until(EC.presence_of_element_located((By.ID, "kw")))
         # 三、搜索一拳超人
    input_tag.send_keys('一拳超人')
     # 四、按鍵盤迴車鍵
    input_tag.send_keys(Keys.ENTER)
    time.sleep(3)
 # 不管發生什麼都會關閉瀏覽器
 finally:
     # 關閉瀏覽器
     chrome.close()

示例二工具

try:
    wait = WebDriverWait(chrome, 10)
    chrome.get('https://www.jd.com/')
    input_tag = wait.until(EC.presence_of_element_located((By.ID, "key")))
    input_tag.send_keys('唐詩三百首')
    # 根據class屬性名稱查找標籤
    search_button = wait.until(
        EC.presence_of_element_located((By.CLASS_NAME, 'button')))
    # 五、點擊搜索按鈕
    search_button.click()
    time.sleep(3)
finally:
    chrome.close()

隱式等待

driver = webdriver.Chrome()
 try:
     # 顯式等待: 等待某個元素加載
     # 參數1: 驅動對象  參數2: 等待時間
     # wait = WebDriverWait(chrome, 10)
     driver.get('https://china.nba.com/')
     # 隱式等待: 等待頁面全部元素加載
     driver.implicitly_wait(10)
     news_tag = driver.find_element_by_class_name('nav-news')
     # 獲取標籤對象
     print(news_tag)
     # 獲取標籤的名字
     print(news_tag.tag_name)
     time.sleep(10)
 finally:
     driver.close()

基本選擇器

from selenium import webdriver  # 用來驅動瀏覽器的
import time

'''
===============全部方法===================
    element是查找一個標籤
    elements是查找全部標籤

    一、find_element_by_link_text  經過連接文本去找
    二、find_element_by_id 經過id去找
    三、find_element_by_class_name
    四、find_element_by_partial_link_text
    五、find_element_by_name
    六、find_element_by_css_selector
    七、find_element_by_tag_name
'''
# 獲取驅動對象、
driver = webdriver.Chrome()
try:
    # 往百度發送請求
    driver.get('https://www.baidu.com/')
    driver.implicitly_wait(10)
    # 一、find_element_by_link_text  經過連接文本去找
    # 根據登陸
    # send_tag = driver.find_element_by_link_text('登陸')
    # send_tag.click()
    # 二、find_element_by_partial_link_text 經過局部文本查找a標籤
    login_button = driver.find_element_by_partial_link_text('')
    login_button.click()
    time.sleep(1)
    # 三、find_element_by_class_name 根據class屬性名查找
    login_tag = driver.find_element_by_class_name('tang-pass-footerBarULogin')
    login_tag.click()
    time.sleep(1)
    # 四、find_element_by_name 根據name屬性查找
    username = driver.find_element_by_name('userName')
    username.send_keys('15622792660')
    time.sleep(1)
    # 五、find_element_by_id 經過id屬性名查找
    password = driver.find_element_by_id('TANGRAM__PSP_10__password')
    password.send_keys('*******')
    time.sleep(1)
    # 六、find_element_by_css_selector  根據屬性選擇器查找
    # 根據id查找登陸按鈕
    login_submit = driver.find_element_by_css_selector('#TANGRAM__PSP_10__submit')
    # driver.find_element_by_css_selector('.pass-button-submit')
    login_submit.click()
    # 七、find_element_by_tag_name  根據標籤名稱查找標籤
    div = driver.find_element_by_tag_name('div')
    print(div.tag_name)
    time.sleep(10)
finally:
    driver.close()
相關文章
相關標籤/搜索