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 百度贴吧

目标

爬取贴吧数据

需求

规律:pn=50*(page-1)

实现步骤(代码)

1.2.2 有道翻译

如何用urllib发送post请求

学习目标

使用urllib发送post请求

需求

通过python制作简易版翻译软件

页面分析

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}}
  • 数据解析:

eg.奥运会—>The Olympic Games

实现步骤

总结

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:

豌豆代理 https://h.wandouip.com/

  • 会员中心—>找到ip白名单—>把自己的外网ip添加进去—>提取API

    2.4 处理不被信任证书的网站

    https://inv-veri.chinatax.gov.cn/image.png需求
    需求:向一个不被ssl信任的网站发起请求,爬取数据

目标url:https://inv-veri.chinatax.gov.cn/

ssl证书:数字证书的一种 配置在服务器上面的
ssl证书的特点:

  • 遵循ssl协议,由受信任的数字证书颁发机构,验证身份之后颁发的证书
  • 同时具有服务器身份验证和数据传输加密功能

ssl证书的发展历程:
网站为什么会出现ssl证书?具有服务器身份验证和数据传输加密的功能
https=http+ssl

requests verify:True(默认) 改为False

2.5 cookie

  • 反反爬
  • 模拟登录

    模拟登录

    模拟登录qq空间

    反反爬

    12306查票