做培训网站,电商网站建设用php,虚拟货币网站开发,阿里巴巴国际站怎么运营目录
一、urllib
1.1 初体验
1.2 使用urllib下载网页、图片、视频等 1.3 反爬介绍
1.4 请求对象定制
1.5 get请求的quote方法
1.6 多个参数转成ascii编码
1.7 post请求
1.8 综合案例演示 一、urllib
1.1 初体验
# urllib是python默认带的#xff0c;无需额外下载
i…目录
一、urllib
1.1 初体验
1.2 使用urllib下载网页、图片、视频等 1.3 反爬介绍
1.4 请求对象定制
1.5 get请求的quote方法
1.6 多个参数转成ascii编码
1.7 post请求
1.8 综合案例演示 一、urllib
1.1 初体验
# urllib是python默认带的无需额外下载
import urllib.requesturl http://www.baidu.comresponse urllib.request.urlopen(url)# print(type(response))
# class http.client.HTTPResponse# 读取n个字节
# content response.read(5)
# 读取一行
# content response.readline()
# 读取全部行
# content response.readlines()# 读取全部并解析为utf-8字符集
content response.read().decode(utf-8)
print(content)
# 返回url地址
print(response.geturl())
# 获取请求头
print(response.getheaders())
1.2 使用urllib下载网页、图片、视频等
import urllib.request# 下载网页
url_page https://blog.csdn.net/YuanFudao/article/details/139655676
# def urlretrieve(url, filenameNone, reporthookNone, dataNone):
urllib.request.urlretrieve(url_page, 自己的文章.html) import urllib.request# 下载网页
url_page https://blog.csdn.net/YuanFudao/article/details/139655676
# def urlretrieve(url, filenameNone, reporthookNone, dataNone):
#
urllib.request.urlretrieve(url_page, 自己的文章.html)# 下载图片
url_img https://img2.baidu.com/it/u3317400103,1801697482fm253fmtautoapp138fJPEG?w500h498
urllib.request.urlretrieve(urlurl_img, filename人物.jpg) import urllib.request# 下载网页
url_page https://blog.csdn.net/YuanFudao/article/details/139655676
# def urlretrieve(url, filenameNone, reporthookNone, dataNone):
#
urllib.request.urlretrieve(url_page, 自己的文章.html)# 下载图片
url_img https://img2.baidu.com/it/u3317400103,1801697482fm253fmtautoapp138fJPEG?w500h498
urllib.request.urlretrieve(urlurl_img, filename人物.jpg)# 下载视频
url_video https://vdept3.bdstatic.com/mda-ph856bw9kuvxfq8n/360p/h264/1691552893804719248/mda-ph856bw9kuvxfq8n.mp4?v_from_shkapp-haokan-nanjingauth_key1718881046-0-0-42919dd1325bf8705f23299eec6f8cbabcevod_channelsearchbox_feedpd1cr0cd0pt3logid3446619467vid3701907759041297688klogid3446619467abtest
urllib.request.urlretrieve(url_video, 好看视频.mp4) 1.3 反爬介绍
一些网站我们没法直接这样获取到资源大概率是这些网站做了反爬手段例如上述下载视频如果是b站视频直接这样是下载不到的。
再举个例子
import urllib.requesturl https://www.baidu.comresponse urllib.request.urlopen(url)
content response.read().decode(utf-8)
print(content) 我们发现访问https的百度和访问http协议的百度我们返回的结果是不一样的。https://www.baidu.com的结果明显少了很多内容。这其实就是因为反爬的原因。 为什么返回的结果很少是因为我们提供的数据不完整。那么如何做到无差别浏览器呢我们慢慢来~
1.4 请求对象定制 UA介绍 User Agent 中文名为用户代理简称UA它是一个特殊字符串头使得服务器能够识别客户使用的操作系统及版本、CPU类型、浏览器及版本。浏览器内核、浏览器渲染引擎、浏览器语言等。
import urllib.requesturl https://www.baidu.com
# f12打开百度的network控制台查看请求头里面携带的user-agent内容复制过来进行伪造
headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
}
# 请求对象定制
# 因为urlopen中不能传入字典,不能直接传入headers
request urllib.request.Request(urlurl, headersheaders)
response urllib.request.urlopen(request)
content response.read().decode(utf-8)
print(content) ok现在可以正常访问了。
这是我们遇到的第一个反爬ua反爬
1.5 get请求的quote方法 案例演示 我们模拟百度搜索周杰伦
import urllib.requesturl https://www.baidu.com/s?wd周杰伦headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
}requests urllib.request.Request(urlurl, headersheaders)response urllib.request.urlopen(requests)content response.read().decode(utf-8)print(content)
运行报错 默认情况下只检索ascii码因此需要把‘周杰伦’转换成Unicode编码怎么转呢
使用quote方法
import urllib.request
# 需要提前引入
import urllib.parseparam 周杰伦
param urllib.parse.quote(param)
url https://www.baidu.com/s?wd paramheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
}requests urllib.request.Request(urlurl, headersheaders)response urllib.request.urlopen(requests)content response.read().decode(utf-8)print(content) 此时就不在报错了但是弹出的页面是安全验证这又是百度的一个反爬手段我们后续再说
1.6 多个参数转成ascii编码
当然了我们可以把参数参数整体作为一个参数通过quote方法转。
不过不建议这里推荐使用urlencode方法
import urllib.parsedata {wd: 周杰伦,sex: 男
}a urllib.parse.urlencode(data)print(a) ok我们再测试一下
import urllib.parse
import urllib.request
data {wd: 周杰伦,sex: 男
}a urllib.parse.urlencode(data)headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
}url https://www.baidu.com/s? arequests urllib.request.Request(urlurl, headersheaders)response urllib.request.urlopen(requests)content response.read().decode(utf-8)print(content)还是遇到了这个安全验证的反爬说明可能服务器不知道我是谁那么试试把cookie带上呢。这个留到下面再去实现吧~
1.7 post请求
post请求传参通常不应该也不推荐拼接再url请求路径后而是放在请求体中。
下面以百度翻译为例介绍post请求爬虫翻译。
import json
import urllib.request
import urllib.parseurl https://fanyi.baidu.com/sugheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
}# 参数
data {kw: 玫瑰
}
data urllib.parse.urlencode(data).encode(utf-8)# 检查参数拼接是否正确
# print(data)request urllib.request.Request(urlurl, datadata, headersheaders)response urllib.request.urlopen(request)content response.read().decode(utf-8)# {errno:0,data:[{k:\u73ab\u7470,v:rose; [\u690d] rugosa rose; rosa rugosa; hep},{k:\u73ab\u7470\u56ed,v:rosary; rosarium; [\u7535\u5f71]Roseland},{k:\u73ab\u7470\u6728,v:rose wood},{k:\u73ab\u7470\u679c,v:fructus rosae},{k:\u73ab\u7470\u6c34,v:[\u533b] aquae rosae; rose water}],logid:65895191}
# print(content)# 字符串 - json对象
obj json.loads(content)
# {errno: 0, data: [{k: 玫瑰, v: rose; [植] rugosa rose; rosa rugosa; hep}, {k: 玫瑰园, v: rosary; rosarium; [电影]Roseland}, {k: 玫瑰木, v: rose wood}, {k: 玫瑰果, v: fructus rosae}, {k: 玫瑰水, v: [医] aquae rosae; rose water}], logid: 148055707}
print(obj)
1.8 综合案例演示
// todo