Python 爬虫从入门到进阶之路(五)

在之前的文章中我们带入了 opener 方法,接下来我们看一下 opener 应用中的 ProxyHandler 处理器(代理设置)。

使用代理IP,这是爬虫/反爬虫的第二大招,通常也是最好用的。

很多网站会检测某一段时间某个IP的访问次数(通过流量统计,系统日志等),如果访问次数多的不像正常人,它会禁止这个IP的访问。

所以我们可以设置一些代理服务器,每隔一段时间换一个代理,就算IP被禁止,依然可以换个IP继续爬取。

urllib.request 中通过ProxyHandler来设置使用代理服务器,下面代码说明如何使用自定义 opener 来使用代理:

 1 import urllib.request
 2
 3 # 构建了两个代理Handler,一个有代理IP,一个没有代理IP
 4 httpproxy_handler = urllib.request.ProxyHandler({"https": "27.191.234.69:9999"})
 5 nullproxy_handler = urllib.request.ProxyHandler({})
 6
 7 # 定义一个代理开关
 8 proxySwitch = True
 9
10 # 通过 urllib.request.build_opener()方法使用这些代理Handler对象,创建自定义opener对象
11 # 根据代理开关是否打开,使用不同的代理模式
12 if proxySwitch:
13     opener = urllib.request.build_opener(httpproxy_handler)
14 else:
15     opener = urllib.request.build_opener(nullproxy_handler)
16
17 request = urllib.request.Request("http://www.baidu.com/")
18
19 # 1. 如果这么写,只有使用opener.open()方法发送请求才使用自定义的代理,而urlopen()则不使用自定义代理。
20 response = opener.open(request)
21
22 # 2. 如果这么写,就是将opener应用到全局,之后所有的,不管是opener.open()还是urlopen() 发送请求,都将使用自定义代理。
23 # urllib.request.install_opener(opener)
24 # response = urllib.request.urlopen(request)
25
26 # 获取服务器响应内容
27 html = response.read().decode("utf-8")
28
29 # 打印字符串
30 print(html)

最终结果如下:

在上面的代码第 4 行,我们使用了一个免费的代理 IP,国内有很多免费的代理 IP 地址,如下:

但是上面的免费代理只支持短期的,就是说在我们在短期爬取信息或者自己做测试可以去上面找可以使用的,但是如果要是长期的话我们需要自己购买代理 IP 比较稳妥。

为了避免我们的代理 IP 被封后爬取失败,我们可以使用多个代理 Ip,然后不定时切换就可以了,如下:

 1 import urllib.request
 2 import random
 3
 4 # 代理列表
 5 proxy_list = [
 6     {"http": "27.191.234.69:9999"},
 7     {"http": "27.191.234.69:9999"},
 8     {"http": "27.191.234.69:9999"},
 9     {"http": "27.191.234.69:9999"},
10 ]
11 # 随机选择一个代理
12 proxy = random.choice(proxy_list)
13 # 使用选择的代理构建代理处理器对象
14 httpproxy_handler = urllib.request.ProxyHandler(proxy)
15
16 # 通过 urllib.request.build_opener()方法使用这些代理Handler对象,创建自定义opener对象
17 opener = urllib.request.build_opener(httpproxy_handler)
18
19 request = urllib.request.Request("http://www.baidu.com/")
20 response = opener.open(request)
21 html = response.read().decode("utf-8")
22 print(html)

接下来我们看一下自己购买的私密 IP 该如何使用代理。

 1 import urllib.request
 2
 3 # 私密代理授权的账户
 4 user = "user"
 5 # 私密代理授权的密码
 6 passwd = "passwd"
 7 # 私密代理 IP
 8 proxyserver = "62.151.164.138:12816"
 9
10 # 1. 构建一个密码管理对象,用来保存需要处理的用户名和密码
11 passwdmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
12
13 # 2. 添加账户信息,第一个参数realm是与远程服务器相关的域信息,一般没人管它都是写None,后面三个参数分别是 代理服务器、用户名、密码
14 passwdmgr.add_password(None, proxyserver, user, passwd)
15
16 # 3. 构建一个代理基础用户名/密码验证的 ProxyBasicAuthHandler 处理器对象,参数是创建的密码管理对象
17 #   注意,这里不再使用普通 ProxyHandler 类了
18 proxyauth_handler = urllib.request.ProxyBasicAuthHandler(passwdmgr)
19
20 # 4. 通过 build_opener()方法使用这些代理 Handler 对象,创建自定义 opener 对象,参数包括构建的 proxy_handler 和 proxyauth_handler
21 opener = urllib.request.build_opener(proxyauth_handler)
22
23 # 5. 构造Request 请求
24 request = urllib.request.Request("http://www.baidu.com/")
25
26 # 6. 使用自定义opener发送请求
27 response = opener.open(request)
28
29 # 7. 打印响应内容
30 html = response.read().decode("utf-8")
31 print(html)

免费开放代理一般会有很多人都在使用,而且代理有寿命短,速度慢,匿名度不高,HTTP/HTTPS支持不稳定等缺点(免费没好货)。

专业爬虫工程师或爬虫公司会使用高品质的私密代理,这些代理通常需要找专门的代理供应商购买,再通过用户名/密码授权使用(舍不得孩子套不到狼)。

原文地址:https://www.cnblogs.com/weijiutao/p/10749802.html

时间: 2024-08-30 15:14:55

Python 爬虫从入门到进阶之路(五)的相关文章

Python 爬虫从入门到进阶之路(十一)

之前的文章我们介绍了一下 Xpath 模块,接下来我们就利用 Xpath 模块爬取<糗事百科>的糗事. 之前我们已经利用 re 模块爬取过一次糗百,我们只需要在其基础上做一些修改就可以了,为了保证项目的完整性,我们重新再来一遍. 我们要爬取的网站链接是 https://www.qiushibaike.com/text/page/1/ . 我们通过 Xpath Helper 的谷歌插件经过分析获取到我们想要的内容为: //div[@class="content"]/span[

Python 爬虫从入门到进阶之路(十四)

之前的文章我们已经可以根据 re 模块,Xpath 模块和 BeautifulSoup4 模块来爬取网站上我们想要的数据并且存储在本地,但是我们并没有对存储数据的格式有要求,本章我们就来看数据的存储格式 JSON 及 Python 中的 json 模块. JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与后台之间的数据交互. JSON和XML的比较

Python爬虫从入门到进阶(2)之爬虫简介

1.爬虫入门:使用代码模拟真实用户发送网络请求批量获取数据1).爬虫价值: 1.买卖数据(高端领域特别贵) 2.数据分析(出分析报告) 3.流量 4.阿里指数,百度指数2).合法性:灰色产业政府没有法律规定爬虫是否违法 公司概念:公司让你爬取数据 爬虫是否可以爬所有的东西?不可以,爬虫只能爬取到用户可以访问的数据 爱奇艺视频(vip 用户,非 vip 用户) 付费小说(付费才能爬取) 2.爬虫分类: 1.通用爬虫:使用搜索引擎:百度,360,谷歌... 劣势:目标不明确,返回的内容90%是用户不

Python爬虫从入门到进阶(1)之Python概述

1.计算机语言概述 (1).语言:交流的工具,沟通的媒介 (2).计算机语言:人跟计算机交流的工具 (3).Python是计算机语言的一种 2.Python编程语言 代码:人类的语言,同代码命令机器,跟机器交(2).python解释器:担任翻译工作(3)流程: 写代码 --> 执行:由翻译官(Python解释器)把命令(Code)翻译给机器,同时把机器结果翻译给我们 3.Python简史 (1).1989 (2).2008:Python 3.0 诞生 (3)2014:宣布2.7支持到2020年

Python爬虫从入门到进阶(3)之requests的使用

快速上手(官网地址:http://www.python-requests.org/en/master/user/quickstart/) 发送请求 首先导入Requests模块 import requests 试着获取一个网页 r = requests.get('https://api.github.com/events') 返回的 r 是 Response 对象,可以从这个对象中获得所有信息. Requests 简单的 API 意味着所有 HTTP 请求类型都是显而易见的.例如,可以这样发送一

Python爬虫从入门到进阶(4)之xpath的使用

官网地址:https://lxml.de/xpathxslt.html 导入: from lxml import etree lxml.tree 支持 ElementTree 和 Element 上的 find,findall,findtext方法的简单路径语法,作为特定的 lxml 扩展,这些类提供了 xpath()方法,该方法支持完整xpath语法中的表达式,以及定制的扩展函数. xpath()方法 对于ElementTree,xpath 方法对文档(绝对路径)或者根节点执行全局(相对路径)

python爬虫-基础入门-爬取整个网站《3》

python爬虫-基础入门-爬取整个网站<3> 描述: 前两章粗略的讲述了python2.python3爬取整个网站,这章节简单的记录一下python2.python3的区别 python2.x 使用类库: >> urllib 库 >> urllib2 库 python3.x 使用的类库: >> urllib 库 变化: -> 在python2.x中使用import urllib2 ----- 对应的,在python3.x 中会使用import url

python爬虫小小白入门

python爬虫小小白入门 学习目标: 爬虫基本思想 python爬虫常用包,官方文档,用途,安装方法,常用方法. 简单爬虫实例--从W3Cschool爬取C语言教程文本 python环境:: Anaconda3, spyder, windows10 一.基本思想 爬虫就是从网页上抓取你想要的内容,主要分为三个步骤.首先需要仔细分析目标页面内容,知道你想要的内容:文字,图片,视频在HTML中的哪个标签里,然后通过爬虫代码向服务器发起请求,得到HTML页面内容,最后把目标内容解析出来. 分析目标页

Python爬虫小白入门必读,成为大牛必须经历的三个阶段

学习任何一门技术,都应该带着目标去学习,目标就像一座灯塔,指引你前进,很多人学着学着就学放弃了,很大部分原因是没有明确目标,所以,一定要明确学习目的,在你准备学爬虫前,先问问自己为什么要学习爬虫.有些人是为了一份工作,有些人是为了好玩,也有些人是为了实现某个黑科技功能.不过可以肯定的是,学会了爬虫能给你的工作提供很多便利. 大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自