当前位置:   article > 正文

python spider 爬虫 之 urllib系列 urlretrieve下载照片、视频 网页_urlretrieve下载图片

urlretrieve下载图片

python 中 集成了 urllib

urllib

import urllib.request 

# urlopen 方法
url="url"
response =  urllib.request.urlopen(url)

print(type(response ))
print(response.read())
#  解码   字节--->字符串  decode    字符串--》字节  encode
print(response.read().decode("utf-8"))
# readline 读取一行
print(response.readline())
# 一行一行的读取 返回是列表
print(response.readlines())
#  获取状态码  200  400  500等
print(response.getcode())
# 获取headers
print(response.getheads())

# urlretrieve 方法  请求网页、图片、视频   同时下载他们
# 下载网页,下载图片 下载视频
url_page="xx"
# url:代表的下载的路径,filename 下载下来文件存储的文件的名字
urllib.request.urlretrieve(url=url_page,filename="xxx")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

UA User Agent
用户代理,简称UA,它是特殊的字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU类型、浏览器及版本。
浏览器内核、浏览器渲染引擎、浏览器语言、浏览器插件等
在这里插入图片描述

#  https  协议 是ssl,  所以需要模拟代理
from urllib import request
heads = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
#  关键字传参
req = request.Request(url="https://www.baidu.com", data=None, headers=heads)
response = request.urlopen(req)
print(response.read().decode('utf-8'))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

UnicodeEncodeError: ‘ascii’ codec can’t encode character ‘\u6211’ in position 9: ordinal not in range(128)

将汉字转换unicode 统一编码 两种方法

quote 应用场景 单个参数

①urllib.parse.quote(“中文”) 转换成unicode字符

urlencode 应用场景 多个参数的时候

②urllib.parse.urlencode({字典})

POST 请求

在这里插入图片描述

# POST 请求
from urllib import request
from urllib import parse

heads = {
    "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
url = 'https://fanyi.baidu.com/sug'
data = {
    'kw': "Ares"
}
#   encode  转换字节  post  请求,要encode编码,get  不需要encode()
new_data = parse.urlencode(data).encode('utf-8')
print(new_data)
#   Request 不需要传参数 method='post'
req = request.Request(url=url, data=new_data, headers=heads)
# 模拟浏览器向服务器发送请求
response = request.urlopen(req)
content = response.read().decode('utf-8')
print(content)
# 上面打印的json字符串,且中文为unicode编码
import json
obj = json.loads(content)
# 打印中文的json对象
print(obj)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
Cookie 反爬

在这里插入图片描述

异常 HTTPError URLError

  1. HTTPError类是URLError类的子类
  2. 导入的包urllib.error.HTTPError urllib.error.URLError
  3. http报错:http错误是针对浏览器无法连接到服务器而增加出来的错误提示。引导并告诉浏览者该页是哪里出了问题
  4. 通过urllib发送请求的时候,有可能会发送失败。这个时候如果想让你的代码更加的健壮,可以通过try: except进行捕获异常。

Cookie 登录

适应场景:数据采集时,需要绕过登录,然后进入到某个页面

个人信息页面是utf-8,但还说报错了编码错误,因为并没有进入到个人信息页面,而是跳转到登录页面了,同时登录页面不是utf-8编码,所以报错

代理

Handler 处理器

在这里插入图片描述

# Handler 访问百度,获取百度源码
from urllib import request

headers = {
    "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
url = 'https://www.baidu.com/'

# 创建request请求对象
req = request.Request(url=url,headers=headers)

# handler   build_opener   open

#  获取handler 对象
# handler = request.HTTPHandler()
# ProxyHandler  代理服务器,相当于用别的IP地址访问百度, 
proxies = {
    'http':'xxx.xx.xx.xx:port'
}
handler = request.ProxyHandler(proxies=proxies)
# 获取opener对象
opener = request.build_opener(handler)

# 调用open方法
response = opener.open(req)

content = response.read().decode('UTF-8')

print(content)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

代理服务器
在这里插入图片描述
通过random.choice 在代理池中随机选择代理
在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/1012380
推荐阅读
相关标签
  

闽ICP备14008679号