人生苦短,我用 Python

前文传送门:

小白学 Python 爬虫(1):开篇

小白学 Python 爬虫(2):前置准备(一)基本类库的安装

小白学 Python 爬虫(3):前置准备(二)Linux基础入门

小白学 Python 爬虫(4):前置准备(三)Docker基础入门

小白学 Python 爬虫(5):前置准备(四)数据库基础

小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装

小白学 Python 爬虫(7):HTTP 基础

小白学 Python 爬虫(8):网页基础

小白学 Python 爬虫(9):爬虫基础

小白学 Python 爬虫(10):Session 和 Cookies

小白学 Python 爬虫(11):urllib 基础使用(一)

小白学 Python 爬虫(12):urllib 基础使用(二)

小白学 Python 爬虫(13):urllib 基础使用(三)

小白学 Python 爬虫(14):urllib 基础使用(四)

小白学 Python 爬虫(15):urllib 基础使用(五)

小白学 Python 爬虫(16):urllib 实战之爬取妹子图

小白学 Python 爬虫(17):Requests 基础使用

小白学 Python 爬虫(18):Requests 进阶操作

小白学 Python 爬虫(19):Xpath 基操

小白学 Python 爬虫(20):Xpath 进阶

小白学 Python 爬虫(21):解析库 Beautiful Soup(上)

小白学 Python 爬虫(22):解析库 Beautiful Soup(下)

小白学 Python 爬虫(23):解析库 pyquery 入门

小白学 Python 爬虫(24):2019 豆瓣电影排行

小白学 Python 爬虫(25):爬取股票信息

小白学 Python 爬虫(26):为啥买不起上海二手房你都买不起

小白学 Python 爬虫(27):自动化测试框架 Selenium 从入门到放弃(一)

小白学 Python 爬虫(28):自动化测试框架 Selenium 从入门到放弃(下)

小白学 Python 爬虫(29):Selenium 获取某大型电商网站商品信息

引言

我们在使用爬虫的时候,经常遇到一种情况,刚开始的运行的时候,都如丝般顺滑,可能一杯茶的功夫,就完犊子了,可能会出现各种各样的限制,比如 403 Forbidden 、 429 Too Many Request 等等。

这时候,很有可能就是我们的 IP 被限制了。

出现以上问题一般是因为网站的安全限制或者是机房的安全限制,有时候实在服务器上做检测,有时候是在网关处做检测,一旦发现某个 IP 在单位时间内的访问次数超过了当前限定的某个阀值,就会直接拒绝服务,这种情况我们统称为:封 IP 。

对于上面这种情况难道我们就这么认了么,当然不!

代理就是为了解决这个问题的。

代理解决上面这个问题的方式就是请求中间增加的代理服务器做转发,本来请求是由 A 直接访问到服务器 C 的,如: A -> C ,加了代理 B 之后就变成了这个样子: A -> B -> C 。

代理的获取

在做实战之前,我们先了解下如何获取代理。

首先在百度上输入 “代理” 两个字进行查询,可以看到有很多提供代理服务的网站,当然哈,大多数都是收费的。但是其中不乏会有一部分免费的代理。

当然免费的代理会有各种各样的坑,比如经常性连不通,比如网络延迟非常高等等等等。

但是,人家免费啊,还要啥自行车。

当然如果想要获得稳定的、网络延时低的代理服务,建议付费使用,毕竟用的少也花不了多少钞票。

代理的站点小编就不列举了,是在太多,我们随便打开一个免费代理的网站:

可以发现,代理好像分两种,一种是高匿代理,还有一种是透明代理,这两个有什么区别呢?

其实,除了高匿代理和透明代理以外,还有一种中间形态叫做匿名代理。

这几种代理之间的区别在于转发请求的头部参数不同。

透明代理

目标服务器可以知道我们使用了代理,并且也知道我们的真实 IP 。 透明代理访问目标服务器所带的 HTTP 头信息如下:

  • REMOTE_ADDR = 代理服务器IP

  • HTTP_VIA = 代理服务器IP

  • HTTP_X_FORWARDED_FOR = 我们的真实IP

透明代理还是将我们的真实IP发送给了对方服务器,因此无法达到隐藏身份的目的。

匿名代理

目标服务器可以知道我们使用了代理,但不知道我们的真实 IP 。匿名代理访问目标服务器所带的 HTTP 头信息如下:

  • REMOTE_ADDR = 代理服务器IP

  • HTTP_VIA = 代理服务器IP

  • HTTP_X_FORWARDED_FOR = 代理服务器IP

匿名代理隐藏了我们的真实IP,但是向目标服务器透露了我们是使用代理服务器访问他们的。

高匿代理

目标服务器不知道我们使用了代理,更不知道我们的真实 IP 。高匿代理访问目标服务器所带的 HTTP 头信息如下:

  • REMOTE_ADDR = 代理服务器IP

  • HTTP_VIA 不显示

  • HTTP_X_FORWARDED_FOR 不显示

高匿代理隐藏了我们的真实 IP ,同时目标服务器也不知道我们使用了代理,因此隐蔽度最高。

可以看到,处于中间态的匿名代理,事情做了一半没做完,反而是没什么用武之地的。

代理设置

上面我们看到了一些代理服务,接下来我们看一下各种 HTTP 请求库设置代理的方式:

urllib

我们先使用 urllib 来做测试,测试的链接就选择:https://httpbin.org/get 这个我们之前用过的测试链接,访问该站点可以得到请求的一些相关信息,其中 origin 字段就是请求来源的 IP,我们可以根据它来判断代理是否设置成功,也就是是否成功伪装了 IP ,代理嘛小编就在网上随便找了个免费的高匿代理,示例如下:

from urllib.error import URLErrorfrom urllib.request import ProxyHandler, build_opener

proxy_handler = ProxyHandler({'http': 'http://182.34.37.0:9999','https': 'https://117.69.150.84:9999'})opener = build_opener(proxy_handler)try:    response = opener.open('https://httpbin.org/get')    print(response.read().decode('utf-8'))except URLError as e:    print(e.reason)

代码很简单,我们看下执行结果:

{"args": {},"headers": {"Accept-Encoding": "identity","Host": "httpbin.org","User-Agent": "Python-urllib/3.7"  },"origin": "117.69.150.84, 117.69.150.84","url": "https://httpbin.org/get"}

可以看到,目标服务器已经认为我们是由代理访问的了, origin 参数显示的是我们的代理服务器的 IP 。

注意: 这里我们使用了 ProxyHandler 来进行代理设置,ProxyHandler 的参数类型是字典类型, key 是我们使用的协议,而值是我们具体所使用的代理,小编这里设置了两个代理,一个是 http 的还有一个是 https 的,当我们请求的链接是 http 的会自动的选择我们的 http 的代理,当我们的请求的链接是 https 的时候则会自动的选择我们设置的 https 的代理。

Requests

对于 Requests 来讲,代理的设置更加的简单加直白。示例代码如下:

import requests

proxies = {'http': 'http://59.52.186.117:9999','https': 'https://222.95.241.6:3000',}try:    response = requests.get('https://httpbin.org/get', proxies = proxies)    print(response.text)except requests.exceptions.ConnectionError as e:    print('Error', e.args)

结果如下:

{"args": {},"headers": {"Accept": "*/*","Accept-Encoding": "gzip, deflate","Host": "httpbin.org","User-Agent": "python-requests/2.22.0"  },"origin": "222.95.241.6, 222.95.241.6","url": "https://httpbin.org/get"}

小编这里选择的还是高匿代理,所以这里显示出来的 IP 还是我们代理的 IP 。

Selenium

Selenium 同样可以设置代理,同时也非常简单,示例如下:

from selenium import webdriver

proxy = '222.95.241.6:3000'chrome_options = webdriver.ChromeOptions()chrome_options.add_argument('--proxy-server=https://' + proxy)driver = webdriver.Chrome(chrome_options=chrome_options)driver.get('https://httpbin.org/get')

结果如下:

设置 FireFox 浏览器和设置 Chrome 浏览器近乎一样,唯一的区别就是在初始化的时候初始化一个 FireFox ,并且在这是启动参数的是时候使用 FirefoxOptions() 方法,其他的无任何区别,同学们可以自己尝试下。

免费代理

因为免费代理的连通率和稳定性确实不高,小编这里找了几个免费代理的网站,仅供大家参考使用:

http://www.ip3366.net/

https://www.kuaidaili.com/free/

https://www.xicidaili.com/

示例代码

本系列的所有代码小编都会放在代码管理仓库 Github 和 Gitee 上,方便大家取用。

示例代码-Github:https://github.com/meteor1993/python-learning/tree/master/python-spider/proxy-set-demo

示例代码-Gitee:https://gitee.com/inwsy/python-learning/tree/master/python-spider/proxy-set-demo

参考

https://www.jianshu.com/p/bb00a288ee5f

小白学vb还是python_小白学 Python 爬虫(30):代理基础相关推荐

  1. Python爬虫之XPath基础教程:用代码抓取网页数据

    Python爬虫之XPath基础教程:用代码抓取网页数据 在网络时代,网页数据是获取信息和进行分析的最重要的来源之一.Python的爬虫技术让我们可以轻松抓取网页数据,并进行数据处理.XPath是一种 ...

  2. python爬虫设置代理ip池

    在使用python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术,高强度.高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,那如何解决呢?使用代 ...

  3. python爬虫设置代理ip池——方法(一)

    """ 在使用python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术,高强度.高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网 ...

  4. Python 爬虫使用代理 IP 的正确方法

    代理 IP 是爬虫中非常常用的方法,可以避免因为频繁请求而被封禁.下面是 Python 爬虫使用代理 IP 的正确方法: 1. 选择可靠的代理 IP 供应商,购买或者免费使用代理 IP 列表. 2. ...

  5. 【实战】Python爬虫之代理使用详解

    在Python爬虫中,代理的使用非常常见.代理的主要作用是隐藏客户端的真实IP地址,从而实现更高的网络访问速度和更好的访问隐私保护.下面我们将通过Python爬虫的实例,带你详细了解Python爬虫中 ...

  6. python爬虫使用代理ip_python爬虫如何设置代理ip

    python爬虫设置代理ip的方法:首先写入获取到的ip地址到proxy:然后用百度检测ip代理是否成功,并请求网页传的参数:最后发送get请求,并获取返回页面保存到本地. [相关学习推荐:pytho ...

  7. python爬虫实践——零基础快速入门(四)爬取小猪租房信息

    上篇文章我们讲到python爬虫实践--零基础快速入门(三)爬取豆瓣电影 接下来我们爬取小猪短租租房信息.进入主页后选择深圳地区的位置.地址如下: http://sz.xiaozhu.com/ 一,标 ...

  8. 先学vb还是python_一个初一学生学习编程先学VB好呢还是Python?

    点击查看一个初一学生学习编程先学VB好呢还是Python?具体信息 答:做桌面软件的话,VB好一点,Python主要用于脚本上,网页脚本.系统管理等都经常用,病毒什么的一般也可以用Python写脚本, ...

  9. python中for循环的用法_@Python小白,一文让你掌握Python爬虫

    兴趣 我没事喜欢逛知乎,有一段时间看到了这个问题:利用爬虫技术能做到哪些很酷很有趣很有用的事情: http://t.cn/RptGOPx 觉得回答的一个个炒鸡酷炫 就对爬虫产生了浓厚的兴趣, 于是就开 ...

最新文章

  1. PHP协程:并发 shell_exec
  2. mysql proxy性能差_两种MySQL-Proxy架构的测试对比记录
  3. 动态创建DataGrid的模版列(转)
  4. 全国英语计算机9月统考2019,2019年9月网络教育统考《计算机应用基础》模拟题6...
  5. C# MVC使用阿里云对象存储加快图片加载速度(一)
  6. java selector 源码_Java NIO核心组件-Selector和Channel
  7. win10商店下载位置_Win10删应用商店下载记录|Win10删Microsoft Store下载记录
  8. raspberry pi_如何使用Raspberry Pi测量颗粒物
  9. 文具用品分类html,中国商品分类.doc
  10. [emuch.net]MatrixComputations(7-12)
  11. vue 项目安装 (入门)
  12. Atitit. 最佳实践 QA----降低cpu占有率--cpu占用太高怎么办
  13. 我是如何在开源系统中(Vue)中引入阿里巴巴Icon图标的?
  14. 你负债了吗? 聊聊“去杠杆”!
  15. 关系数据库理论:范式判断、函数依赖、无损分解、正则覆盖
  16. 华为路由器怎么配置DNS?
  17. 备份华为物理服务器目录到U盘
  18. 聚观早报 | 苹果2024年放弃高通;腾讯回应进军类 ChatGPT
  19. 风剑分享“站在上帝视角看数据”,点燃企业大数据梦想与思潮
  20. $.each()和$().each

热门文章

  1. 机器学习、深度学习概念术语的理解
  2. 数据结构 Tricks(一)—— 父节点和左右孩子索引号之间的关系
  3. Trick(十六)—— 随机数的生成
  4. python读取两行字符串_python - 如何为两行之间的行分配值,并在数据帧的列中使用特定字符串? - SO中文参考 - www.soinside.com...
  5. python消费kafka逻辑处理导致cpu升高_爬虫架构|利用Kafka处理数据推送问题(1)
  6. python和java哪个好-Python和Java哪个好?有什么区别?
  7. python安卓下载-python手册中文版apk下载
  8. python自学视频教程 38-python编程开发入门中文视频培训教程38讲
  9. python与java前景-java和python学习哪个未来发展前景更好?
  10. python 下载文件-Python实现批量下载文件