Python爬虫网络请求之代理服务器和动态Cookies


Posted in Python onApril 12, 2022

1.IP代理

某些网站会检测一段时间内某IP的访问次数,若访问次数过多会禁止访问,这时需要设置一些代理服务器,每隔一段时间换一个代理。IP代理的分类:

  • ①透明代理:目标网站可以得知使用了代理以及源IP地址,显然这不符合要求;
  • ②匿名代理:目标网站知道使用了代理,但不知道源IP地址;
  • ③高匿代理:最保险的方式,目标网站既不知道使用了代理,也不知道源IP地址。

2.Cookie

解决http的无状态性,第一次向服务器发送请求时,服务器生成Cookie作为请求头并储存到浏览器中;浏览器再次发送请求时将携带Cookie信息。

import urllib.request
from http import cookiejar
filename = 'cookie.txt'
#获取Cookie
def get_cookie():
    #实例化一个MozillaCookieJar用于存储cookie
    cookie = cookiejar.MozillaCookieJar(filename)
    #创建handler对象
    handler = urllib.request.HTTPCookieProcessor(cookie)
    #创建opener对象
    opener = urllib.request.build_opener(handler)
    #请求网址
    url = 'https://tieba.baidu.com/index.html?traceid=#'
    resp = opener.open(url) #发送请求
    #存储cookie文件
    cookie.save()
 
#读取cookie
def use_cookie():
    #实例化MozillaCookieJar
    cookie = cookiejar.MozillaCookieJar()
    #加载cookie文件
    cookie.load(filename)
    print(cookie)
 
get_cookie()
use_cookie()

3.异常处理 

①urllib.error.URLError:用于捕获由urllib.request产生的异常,使用reason属性返回错误原因

import urllib.request
import urllib.error
 
url = 'http://www.google.com'
try:
    resp = urllib.request.urlopen(url)
except urllib.error.URLError as e:
    print(e.reason)

输出结果:

[WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

②urllib.error.HTTPError:用于处理HTTP与HTTPS请求的错误,

有三个属性:

  • code:请求返回的状态码
  • reason:返回错误的原因
  • headers:请求返回的响应头信息
import urllib.request
import urllib.error
 
url = 'https://movie.douban.com/'
try:
    resp = urllib.request.urlopen(url)
except urllib.error.HTTPError as e:
    print('原因:',e.reason)
    print('响应状态码:',str(e.code))
    print('响应头数据:',e.headers)

Python爬虫网络请求之代理服务器和动态Cookies

到此这篇关于Python爬虫之网络请求的文章就介绍到这了!

Python 相关文章推荐
一个检测OpenSSL心脏出血漏洞的Python脚本分享
Apr 10 Python
简单学习Python time模块
Apr 29 Python
numpy中索引和切片详解
Dec 15 Python
基于python内置函数与匿名函数详解
Jan 09 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
Feb 13 Python
opencv设置采集视频分辨率方式
Dec 10 Python
使用PyOpenGL绘制三维坐标系实例
Dec 24 Python
Python基础之函数原理与应用实例详解
Jan 03 Python
使用Bazel编译TensorBoard教程
Feb 15 Python
Django实现任意文件上传(最简单的方法)
Jun 03 Python
关于tf.matmul() 和tf.multiply() 的区别说明
Jun 18 Python
Python gevent协程切换实现详解
Sep 14 Python
分享Python异步爬取知乎热榜
尝试使用Python爬取城市租房信息
Apr 12 #Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 #Python
Python实现批量将文件复制到新的目录中再修改名称
Python多线程实用方法以及共享变量资源竞争问题
Apr 12 #Python
Python使用socket去实现TCP客户端和TCP服务端
Apr 12 #Python
Python闭包的定义和使用方法
Apr 11 #Python
You might like
PHP5 安装方法
2006/10/09 PHP
php巧获服务器端信息
2006/12/06 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
JavaScript 原型链学习总结
2010/10/29 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
js 原型对象和原型链理解
2017/02/09 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
2018/11/21 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
2018/11/22 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
使用Python来开发微信功能
2018/06/13 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
Python猜数字算法题详解
2020/03/01 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
python中sys模块是做什么用的
2020/08/16 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
幼儿园安全检查制度
2014/01/30 职场文书
洗车工岗位职责
2014/03/15 职场文书
运动会开幕式主持词
2014/03/28 职场文书
小学生操行评语
2014/04/22 职场文书
农村环境卫生倡议书
2015/04/29 职场文书
老人节主持词
2015/07/04 职场文书
2015年国庆节广播稿
2015/08/19 职场文书
《将心比心》教学反思
2016/02/23 职场文书
浅谈redis整数集为什么不能降级
2021/07/25 Redis