1.urllib模块
1.urllib是什么?
python内置的网络请求模块
python自带模块:re time
第三方:requests lxml scrapy
2.为什么要学习它?
- 对比学习第三方的
- 有的爬虫项目用的urllib,需要能看懂并修改
有时候需要urllib+requests两者配合使用(requests请求+urllib用来保存文件)
1.1urllib的快速入门
判断:方法就是函数?不能这么说,可以说方法是特殊的函数
函数:xxx() 例如print()函数,它是独立自主的
方法:xxx.yyy() 调用1.1.1 urllib.request的使用
urllib.request.urlopen(‘网站’)
- urllib.request.urlopen(请求对象)
- 创建一个请求对象 构建UA(user-agent)
- 获取响应对象 通过urllib.request.urlopen()
- 获取响应对象的内容 read.decode(‘utf-8’)
print(res.getcode()) #状态码
print(res.geturl()) #请求的url地址
1.1.2 urllib.parse的使用
百度 关键词为奥运会,但是粘贴之后wd是以百分号+十六进制的形式表示,三个百分号代表一个汉字
https://www.baidu.com/s?wd=%E5%A5%A5%E8%BF%90%E4%BC%9A
urllib.parse的作用:除数字、字母和部分符号外,其他的全部使用百分号+十六进制的形式
https://tool.chinaz.com/tools/urlencode.aspx
urllib.parse.urlencode()传的是字典格式的
urllib.parse.quote()传的是字符串
总结:以后我们看到一些请求的目标url、图片url等等,这些url里面有%+十六进制的数据格式,我们就要想到urllib.parse
1.2 urllib案例练习
1.2.1 百度贴吧
目标
需求
实现步骤(代码)
1.2.2 有道翻译
学习目标
需求
页面分析
- 目标url:https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
- 请求方式:post
- 要携带这些参数数据:
i: 奥运会
from: AUTO
to: AUTO
smartresult: dict
client: fanyideskweb
salt: 16285607103663
sign: 8a34ac23444a46c2f36df26d1feea1f9
lts: 1628560710366
bv: bd6f9efafc2d70e2aa40fa82a4decc21
doctype: json
version: 2.1
keyfrom: fanyi.web
action: FY_BY_REALTlME
- 向目标url发送请求,得到响应数据:{“translateResult”:[[{“tgt”:”The Olympic Games”,”src”:”奥运会”}]],”errorCode”:0,”type”:”zh-CHS2en”,”smartResult”:{“entries”:[“”,”Olympic Games\r\n”],”type”:1}}
- 数据解析:
实现步骤
总结
1.如果urllib发送post请求,有中文要提前处理,携带的数据类型必须是bytes,还要注意编码
2.目标url 去掉_o(记住就好)
3.json来解析数据 json类型的字符串str 转换成字典
import json
trans_html=json.load(html) #可以将json类型的字符串,转换成python类型的字典
2. requests模块
是第三方的http请求模块 在pycharm中查看源码,ctrl+鼠标左键
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple/(清华源)
pip install requests -i http://pypi.douban.com/simple/ (豆瓣源)
2.1 urllib vs requests
- requests不需要处理中文
- requests不需要拼接url
requests直接用get方式传递headers,不需要创建访问对象
2.2 res.text vs res.content
res.content 直接从网页抓取数据,二进制数据,没有做任何处理
res.text 是requests模块将res.content解码之后得到的字符串,requests模块会猜一个解码方式,有可能对,有可能不对(乱码),这要指定一个encoding res.encoding=’utf-8’2.3 requests设置代理IP
2.3.1 作用
隐藏真实的ip
- 反爬策略
快代理:https://www.kuaidaili.com/?utm_source=bdtg&utm_campaign=a13&utm_medium=a13
pyCharm使用技巧:使用正则让请求头快速形成字典格式
https://blog.csdn.net/weixin_43810415/article/details/99845901?spm=1001.2014.3001.5502
2.3.2 代理ip的透明度:
- 透明 服务器既知道你使用了代理ip,也知道你的真实ip
- 匿名 服务器知道你使用代理ip,但是不知道你的真实ip
- 高匿 服务器既不知道你使用了代理ip,也不知道你的真实ip
如何查看自己的ip:
- win+R—>cmd—>ipconfig—>ipv4地址 内网地址 私有地址,用于局域网
- https://www.ipip.net/ 外网地址,能够用于上网的ip(http://httpbin.org/ip 也可用于查询)
- 会员中心—>找到ip白名单—>把自己的外网ip添加进去—>提取API
2.4 处理不被信任证书的网站
https://inv-veri.chinatax.gov.cn/需求
需求:向一个不被ssl信任的网站发起请求,爬取数据
目标url:https://inv-veri.chinatax.gov.cn/
ssl证书:数字证书的一种 配置在服务器上面的
ssl证书的特点:
- 遵循ssl协议,由受信任的数字证书颁发机构,验证身份之后颁发的证书
- 同时具有服务器身份验证和数据传输加密功能
ssl证书的发展历程:
网站为什么会出现ssl证书?具有服务器身份验证和数据传输加密的功能
https=http+ssl
requests verify:True(默认) 改为False