4-06python语法基础-内置模块-urllib模块,以及第三方模块requests的使用,cookie字典生成式,切url的末尾字符串
###
官方文档:https://docs.python.org/zh-cn/3/library/urllib.request.html#module-urllib.request
###
urllib模块介绍:
一共是四块,
urllib.request - 打开和读取 URL。
urllib.error - 包含 urllib.request 抛出的异常。
urllib.parse - 解析 URL。
urllib.robotparser - 解析 robots.txt 文件。
###
基本使用
from urllib import parse from urllib import request from urllib import response from urllib import error from urllib import robotparser # url = "https://www.baidu.com/" url = "https://www.runoob.com/" resp = request.urlopen(url) # print(resp) print(resp.status) print(resp.getcode()) # print(resp.url) # print(resp.headers) # print(resp.read()) # print(resp.readlines()) """ getcode() ---- 效果就是status的效果, 使用 read() 函数获取网页的 HTML 实体代码。 # 这是一个二进制的 readline() - 读取文件的一行内容 readlines() - 读取文件的全部内容,它会把读取的内容赋值给一个列表变量。 URL 的编码与解码可以使用 urllib.request.quote() 与 urllib.request.unquote() 方法: """
####
设置headers,
import urllib.request # import urllib.parse url = 'https://www.runoob.com/?s=' # 菜鸟教程搜索页面 keyword = 'Python 教程' key_code = urllib.request.quote(keyword) # 对请求进行编码 url_all = url+key_code header = { 'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' } #头部信息 request = urllib.request.Request(url_all,headers=header) print(request) # 打开统一资源定位符 url,可以是一个字符串或一个 Request 对象。 reponse = urllib.request.urlopen(request).read()
###
快捷下载图片或者html文本
from urllib import request imgurl = 'xxx' request.urlretrieve(imgurl,"./myimg.jpeg")
###
requests模块
这个是第三方模块,需要安装
pip install requests
###
http的8种请求方式:get,post,put,delete,option,trace,connect,head,
主要就是get和post,
###
request源码分析
# requests源码解析,
import requests
requests.get(url,)
# 里面除了url参数还有什么参数?
#看源码,这个get请求是取调用了request,
def get(url, params=None, **kwargs):
kwargs.setdefault('allow_redirects', True)
return request('get', url, params=params, **kwargs)
# 然后request最后是返回了session.request()
def request(method, url, **kwargs):
with sessions.Session() as session:
return session.request(method=method, url=url, **kwargs)
# 而session.request()里面有很多的参数,
def request(self, method, url,
params=None, data=None, headers=None, cookies=None, files=None,
auth=None, timeout=None, allow_redirects=True, proxies=None,
hooks=None, stream=None, verify=None, cert=None, json=None): XXX
# 参数解释
# data 这是携带请求体里面的数据,字典格式,
# headers 这是携带请求头,字典格式,
# cookies 这是携带请求的cookies信息,字典格式,
# proxies 这个是使用代理,也是字典格式,
# verify 如果是https请求,把这个=FALSE,就是不校验证书,
###
分析response响应数据
import requests
res = requests.get(url)
print(dir(res))
#通过这个dir查看一下这个返回值,有什么方法?
[ 'apparent_encoding', 'close', 'connection', 'content', 'cookies', 'elapsed', 'encoding',
'headers', 'history', 'is_permanent_redirect', 'is_redirect', 'iter_content', 'iter_lines', 'json',
'links', 'next', 'ok', 'raise_for_status', 'raw', 'reason', 'request', 'status_code', 'text', 'url']
#去掉双下划线的方法,解释一下这些方法,
# content,返回一个二进制的响应内容,
# cookies,打印出cookies信息,
# encoding,打印出编码类型
# headers,打印出headers信息,
# status_code,打印状态码
# text,打印出编码后的响应内容
# url,打印出本次请求的url,
###
python-使用字典推导式把cookie从字符串转换成字典
cookies = "vaptchaNetway=cn; Hm_lvt_337e99a01a907a08d00bed4a1a52e35d=1628248083,1629106799; " \
"sessionid=g1siko0evn5hmnn3pbgl0vaoqjx29cfo; Hm_lpvt_337e99a01a907a08d00bed4a1a52e35d=1629124377"
# 不使用字典推导式的写法
cookie_list = cookies.split(";")
cookie_dict = {}
print(cookie_list)
for cookie in cookie_list:
cookie_dict[cookie.split("=")[0].strip()] = cookie.split("=")[1].strip()
print(cookie_dict)
# 使用字典推导式的写法
print({cookie.split("=")[0].strip():cookie.split("=")[1].strip()for cookie in cookies.split(";")})
###
切url的末尾字符串
url = "http://n.sinaimg.cn/news/1_img/upload/cf3881ab/67/w1000h667/20200710/1349-iwasyei8902095.jpg" # 三种办法 切到----1349-iwasyei8902095.jpg print(url.split("/")[len(url.split("/"))-1]) # 取值列表的最后一个元素 print(url.split("/")[-1]) # 取值列表的最后一个元素 print(url.rsplit("/",1)[1]) # 这个就是从右侧分隔字符串,分隔一次,所以要取第二个,
###
requests报错解决
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.kuaidaili.com', port=443): Max retries exceeded with url: /free/inha/2/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1129)')))
解决方法:
requests.get(url.format(i), headers=headers, cookies=cookie_dict, verify=False)
重点是增加 verify=False
可能会有一个警告,
增加2行代码,去掉警告,
import urllib3
urllib3.disable_warnings()
####
固定header头顺序
在使用 requests 发送 post 请求时保持 headers 的顺序不变
import requests url = "xxx" headers = { "Host": "match.yuanrenxue.com", "Connection": "keep-alive", "Content-Length": "0", "Origin": "http://match.yuanrenxue.com", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36", "Accept": "*/*", "Referer": "http://match.yuanrenxue.com/match/3", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9", } # 先session session=requests.Session() # 后session clear,clear这个是比较关键的写法。 session.headers.clear() session.headers.update( headers ) resp=session.post(url)
####
requests添加代理
import requests proxies = { "http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080", } requests.get("http://example.org", proxies=proxies)
####
打印你请求的headers
print(response.request.headers)
####
####
相关文章
- 域渗透基础之环境搭建(单域到组件域林)
- 补习系列(1)-springboot项目基础搭建课
- Python基础(6)--条件、循环
- 4-04python语法基础-内置模块-logging模块
- 4-01python语法基础-内置模块-random,os,sys等等
- 4-03python语法基础-内置模块-time模块
- 4-05python语法基础-内置模块-json模块
- Testing - 软件测试知识梳理 - 基础概念
- [C#基础]说说委托+=和-=的那些事
- 【基础入门题062】数制转换(二)
- Java基础--String类底层实现原理及API示例详解
- Unity技术手册 - 粒子基础主模块属性-上
- Unity技术手册 - 粒子基础主模块属性-下
- Hive基础06、Hive引入数组
- 100天精通Python(基础篇)——第28天:os模块基础大总结+代码实战
- Python爬虫基础:多进程——multiprocessing模块的使用
- js 模块化基础和模块规范AMD、CMD、ES6模块
- 数据库基础第三章:数据表管理
- Spring boot——logback 基础使用篇(一)
- python基础5--模块
- 华为防火墙基础自学系列 | Site to Site IPSec VdPdNd
- python基础===zmail,收发邮件的模块
- python基础===jieba模块,Python 中文分词组件
- 【java基础】BitSet基本说明和使用
- 用户画像基础之应用落地和案例展示