Python3中-爬虫库Urllib
- 代理IP
- 1. urllib.request.ProxyHandler()
- 2. 演示一下代理IP去访问目标网址吧
- Cookies的使用
- 1. Urllib提供HTTPCookieProcessor()
- 1.1 Cookies写入文件:
- 1.2 Cookies读取:
- 证书验证
代理IP 1. urllib.request.ProxyHandler() ①代理IP的原理:本机---->大力IP---->访问的网站(服务器)
文字描述:本机先访问代理IP,再通过代理IP地址访问互联网,这样网站(服务器)接收到的访问IP就是代理IP地址。
②由Urllib提供urllib.request.ProxyHandler()方法可动态设置代理IP池,具体摘录如下:
文章图片
2. 演示一下代理IP去访问目标网址吧 ①打开浏览器,去搜索几个免费的代理ip吧,如下是我找的免费ip代理(时间是2020年07月28日 09:53,后续也许能用,也许用不了,用不了的话,就自己网上找一下吧)
58.211.134.9838480
171.35.163.2309999
218.241.154.252 3128
118.113.247.4 9999
182.149.82.88 9999
116.196.85.150 3128
110.189.152.86 40698
②找到免费的代理ip,然后就开始写代码,如下代码:
# 方法一
import urllib.request
# 请求的url
url = "https://movie.douban.com/"# 添加请求头字典
# headers = {
#'User-Agent': "Mozilla/5.0 (Windows NT 6.3;
Win64;
x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
#'Referer': " https://movie.douban.com/",
#'Connection': "keep-alive"}
# 注意:此处的headers要写为一个元组类型才可以。写为字典类型的话会报错!
headers = [('User-Agent',"Mozilla/5.0 (Windows NT 6.3;
Win64;
x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"),
('Referer',"https://movie.douban.com/"),
('Connection',"keep-alive")]# ①设置代理IP
proxy_handler = urllib.request.ProxyHandler({
'http':'58.211.134.98:38480',
'http':'171.35.163.230:9999',
'http':'218.241.154.252:3128',
'http':'118.113.247.4:9999',
'http':'182.149.82.88:9999',
'http':'116.196.85.150:3128',
'http':'110.189.152.86:40698'
})
# ②使用build_opener()函数创建带有代理ip功能的opener对象
opener = urllib.request.build_opener(proxy_handler)
# ③增加请求头
opener.addheaders = headers
response = opener.open(url)
# 读取返回内容
html = response.read().decode('utf8')
# 写入文件txt
f = open('html.txt', 'w', encoding='utf8')
f.write(html)
f.close()
# 方法二
import urllib.request
import random# 请求的url
url = "https://movie.douban.com/"# 添加请求头字典
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.3;
Win64;
x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
'Referer': " https://movie.douban.com/",
'Connection': "keep-alive"}# ①设置代理IP
proxy_list = [
{'http':'58.211.134.98:38480'},
{'http':'171.35.163.230:9999'},
{'http':'218.241.154.252:3128'},
{'http':'118.113.247.4:9999'},
{'http':'182.149.82.88:9999'},
{'http':'116.196.85.150:3128'},
{ 'http':'110.189.152.86:40698'},
]
# 随机选择一个代理proxy_ip = random.choice(proxy_list)
print(proxy_ip)# 打印一下随机的代理ip# 使用选择的代理构建代理处理器对象
proxy_handler = urllib.request.ProxyHandler(proxy_ip)
opener = urllib.request.build_opener(proxy_handler)
request = urllib.request.Request(url, headers=headers)
response = opener.open(request)
# 读取返回内容
html = response.read().decode('utf8')
# 写入文件txt
f = open('html1.txt', 'w', encoding='utf8')
f.write(html)
f.close()
上述代码验证是可以的(验证时间2020年7月28日11:43)
错误 | 描述说明 |
---|---|
ConnectionResetError | [WinError 10054]远程主机强迫关闭了一个现有的连接。 |
urllib.error.URLError | urlopen error Remoteend closed connection without response(结束没有响应的远程连接) |
urllib.error.URLError | urlopen error[WinError 10054]远程主机强迫关闭了一个现有的连接 |
TimeoutError | [WinError 10060]由于连接方在一段时间后没有正确答复或连接的主机没有反应,因此连接尝试失败 |
urllib.error.URLError | urlopen error[WinError 10061]由于目标计算机拒绝访问,因此无法连接。 |
文章图片
1. Urllib提供HTTPCookieProcessor() Urllib提供HTTPCookieProcessor() 对Cookies操作,但Cookies的读写是由MozillaCookieJar()完成的。
1.1 Cookies写入文件:
import urllib.request
from http import cookiejar
import random# 请求的url
url = "https://movie.douban.com/"# 添加请求头字典
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.3;
Win64;
x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
'Referer': " https://movie.douban.com/",
'Connection': "keep-alive"}# ①设置代理IP
proxy_list = [
{'http':'58.211.134.98:38480'},
{'http':'171.35.163.230:9999'},
{'http':'218.241.154.252:3128'},
{'http':'118.113.247.4:9999'},
{'http':'182.149.82.88:9999'},
{'http':'116.196.85.150:3128'},
{ 'http':'110.189.152.86:40698'},
]
# 随机选择一个代理proxy_ip = random.choice(proxy_list)
print(proxy_ip)# 打印一下随机的代理ipfilename = "cookie.txt"
# MozillaCookieJar保存cookie
cookie = cookiejar.MozillaCookieJar(filename)
# HTTPCookieProcess创建cookie处理器
handler = urllib.request.HTTPCookieProcessor(cookie)
# 使用选择的代理构建代理处理器对象
proxy_handler = urllib.request.ProxyHandler(proxy_ip)
#创建自定义opener
opener = urllib.request.build_opener(proxy_handler,handler)
request = urllib.request.Request(url,headers=headers)
# open方法打开网页
response = opener.open(request)
# 保存cookie文件
cookie.save()
运行结果:
文章图片
1.2 Cookies读取:
import urllib.request
from http import cookiejar# 请求的url
url = "https://movie.douban.com/"
# 添加请求头字典
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.3;
Win64;
x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
'Referer': " https://movie.douban.com/",
'Connection': "keep-alive"}
filename = "cookie.txt"
# 创建MozillaCookieJar对象
cookie = cookiejar.MozillaCookieJar()# 读取cookie.txt内容到变量
cookie.load(filename)# HTTPCookieProcessor创建cookie处理器
handler = urllib.request.HTTPCookieProcessor(cookie)
# 创建opener
opener = urllib.request.build_opener(handler)request = urllib.request.Request(url,headers=headers)
# opener打开网页
response = opener.open(request)
# 输出结果
print(cookie)
执行结果:
文章图片
文章图片
证书验证 摘录过来的:
当遇到一些特殊的网站时,在浏览器上会显示连接不是私密连接而导致无法浏览该网页。若在没有安装12306根证书的情况下访问12306网站
文章图片
文章图片
import urllib.request
import ssl# 关闭证书校验
ssl._create_default_https_context = ssl._create_unverified_context
url = "https://kyfw.12306.cn/otn/leftTicket/init"
response = urllib.request.urlopen(url)
# 输出状态码
print(response.getcode())
【爬虫|爬虫库Urllib(代理IP等)】执行结果:
文章图片
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)