Response响应

 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) # 上一次跳转的地址
# 1、返回cookie字典 2、返回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)

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)

超时设置

#两种超时: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是常见的事情)

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)

认证设置

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) #
print(response.text)

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

#测试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)

上传文件

#上传文本文件
files1 = {'file': open('user.txt', 'rb')}
# # files参数是POST请求固定参数
response = requests.post('http://httpbin.org/post', files=files1)
print(response.status_code) #
print(response.text) # # 上传图片文件
files2 = {'jpg': open('一拳.jpg', 'rb')}
response = requests.post('http://httpbin.org/post', files=files2)
print(response.status_code) #
print(response.text) #
#
# 上传视频文件
files3 = {'movie': open('love_for_GD.mp4', 'rb')}
response = requests.post('http://httpbin.org/post', files=files3)
print(response.status_code) #
print(response.text) #

selenium模块讲解
一 什么是selenium?
  最初是一个自动化测试工具。可以使用它帮我们驱动浏览器,自动去执行某些自定义好的操作。例如在页面中执行JS代码、跳过登录验证。可以使用selenium帮我们实现爬虫。
二 为什么要使用selenium?
  1、优点:
    使用requests模块登录需要分析大量的复杂通信流程,使用selenium可以轻松跳过登录验证。
  2、缺点:
    浏览器会加载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()

实例1

# 若try出现异常
try:
# 往tank博客主页发送get请求
# chrome.get('https://www.cnblogs.com/kermitjam/')
# 参数1: 驱动对象 参数2: 等待时间
wait = WebDriverWait(chrome, 10)
# 1、访问百度
chrome.get('https://www.baidu.com/')
# 2、查找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")))
# 3、搜索一拳超人
input_tag.send_keys('一拳超人')
# 4、按键盘回车键
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')))
# 5、点击搜索按钮
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是查找所有标签 1、find_element_by_link_text 通过链接文本去找
2、find_element_by_id 通过id去找
3、find_element_by_class_name
4、find_element_by_partial_link_text
5、find_element_by_name
6、find_element_by_css_selector
7、find_element_by_tag_name
'''
# 获取驱动对象、
driver = webdriver.Chrome()
try:
# 往百度发送请求
driver.get('https://www.baidu.com/')
driver.implicitly_wait(10)
# 1、find_element_by_link_text 通过链接文本去找
# 根据登录
# send_tag = driver.find_element_by_link_text('登录')
# send_tag.click()
# 2、find_element_by_partial_link_text 通过局部文本查找a标签
login_button = driver.find_element_by_partial_link_text('登')
login_button.click()
time.sleep(1)
# 3、find_element_by_class_name 根据class属性名查找
login_tag = driver.find_element_by_class_name('tang-pass-footerBarULogin')
login_tag.click()
time.sleep(1)
# 4、find_element_by_name 根据name属性查找
username = driver.find_element_by_name('userName')
username.send_keys('')
time.sleep(1)
# 5、find_element_by_id 通过id属性名查找
password = driver.find_element_by_id('TANGRAM__PSP_10__password')
password.send_keys('*******')
time.sleep(1)
# 6、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()
# 7、find_element_by_tag_name 根据标签名称查找标签
div = driver.find_element_by_tag_name('div')
print(div.tag_name)
time.sleep(10)
finally:
driver.close()

练习 自动登录抽屉新热榜

from selenium import webdriver
import time driver = webdriver.Chrome(r'D:\BaiduNetdiskDownload\chromedriver_win32\chromedriver.exe') # 把窗口转成全屏
driver.maximize_window() try:
driver.get('https://dig.chouti.com/')
driver.implicitly_wait(10)
time.sleep(5) # 1、点击登录
login_btn = driver.find_element_by_id('login_btn')
login_btn.click()
time.sleep(2) # 2、输入用户名
phone = driver.find_element_by_class_name('login-phone')
phone.send_keys('') # 3、输入密码
pwd = driver.find_element_by_class_name('pwd-password-input')
pwd.send_keys('kermit46709394') # 4、确认登录
login_submit = driver.find_element_by_class_name('btn-large')
login_submit.click() time.sleep(20) # 捕获异常并打印
except Exception as e:
print(e) finally:
driver.close()

Python Learning Day5的更多相关文章

  1. python笔记 - day5

    python笔记 - day5 参考: http://www.cnblogs.com/wupeiqi/articles/5484747.html http://www.cnblogs.com/alex ...

  2. Python学习day5作业

    目录 Python学习day5作业 ATM和购物商城 1. 程序说明 2. 基本流程图 3. 程序测试帐号 4. 程序结构: 5. 程序测试 title: Python学习day5作业 tags: p ...

  3. python learning Exception & Debug.py

    ''' 在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数open(),成功时返 ...

  4. Python Learning Paths

    Python Learning Paths Python Expert Python in Action Syntax Python objects Scalar types Operators St ...

  5. Python Learning

    这是自己之前整理的学习Python的资料,分享出来,希望能给别人一点帮助. Learning Plan Python是什么?- 对Python有基本的认识 版本区别 下载 安装 IDE 文件构造 Py ...

  6. python基础 Day5

    python Day5 字典 其他数据类型的缺点 列表可以存储大量的数据,但是关联性不强. 列表的查询速度比较慢 其容器的数据类型为dict 其数据类型的分类 可变(不可哈希)的数据类型:list d ...

  7. How to begin Python learning?

    如何开始Python语言学习? 1. 先了解它,Wiki百科:http://zh.wikipedia.org/zh-cn/Python 2. Python, Ruby等语言来自开源社区,社区的学法是V ...

  8. python 学习day5(模块)

    一.模块介绍 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能 ...

  9. Experience of Python Learning Week 1

    1.The founder of python is Guido van Rossum ,he created it on Christmas in 1989, smriti of ABC langu ...

随机推荐

  1. delphi10.2 命令行编译x64脚本

    Build.bat @echo off @echo delphi x64编译测试 @cd /d %~dp0 @echo 设置Delphi参数信息 @set SourcePath=%~dp0.\src ...

  2. Django(十三)状态保持 —— cookie与session+ajax异步请求+session记住登录状态+cookie记住登录名密码

    一.状态保持的概述 http协议是无状态的.下一次去访问一个页面时并不知道上一次对这个页面做了什么.因此引入了cookie.session两种方式来配合解决此问题. Duplicate entry:重 ...

  3. 【LeetCode】合并两个有序数组

    [问题] 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明:初始化 nums1 和 nums2 的元素数量分别为 m ...

  4. (转)linux shell 的here document 用法 (cat << EOF)

    什么是Here Documen: Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下 cmd << delimiter Here Docu ...

  5. No 'Access-Control-Allow-Origin' header is present on the requested resource——Web Api跨域问题

    最近使用C#写了一个简单的web api项目,在使用项目中的.cshtml文档测试的时候没有任何问题,但是在外部HBuilder上面编写.html通过Ajax调用web api路径时报错: No 'A ...

  6. pyinstaller打包PySide2写的GUI程序,调用ffmpeg隐藏CMD控制台解决方案

    1 问题描述 使用PySide2写了一个GUI程序,调用ffmpeg命令行工具,做简单的批量视频处理(调整帧宽度.帧高度.视频变速.降低视频码率达到限制视频大小),使用了ffmpeg. ffmpeg- ...

  7. 一百、SAP中ALV事件之十三,给ALV的自定义按钮添加事件

    一.我们查看定义的按钮,有一个名字是ZADD的自定义按钮 二.代码如下,用于判断点击了哪个按钮 三.点击测试按钮之后,会弹出一个弹窗 完美

  8. 一条 SQL 在 Apache Spark 之旅

    转载自过往记忆大数据 https://www.iteblog.com/archives/2561.html Spark SQL 是 Spark 众多组件中技术最复杂的组件之一,它同时支持 SQL 查询 ...

  9. OIer常见问题与错误总结

    作为一名OIer,无论是一名刚入门的蒟蒻,还是叱诧风云的神犇,相信都会难免去犯一些错误(废话不犯错误岂不是都满分了(ノへ ̄.).在这里总结了一些OIer常见易犯的错误,与大家共勉. 1.正常错误 可能 ...

  10. Java多线程的应用

    一.概述 提到线程不得不提进行.因为线程是进程的一个执行单元.下面对线程和进程分别进行介绍. 1.进程 进程是当前操作系统执行的任务,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概 ...