urllib模块

在介绍关于防止反爬虫策略之前,先学习另一个爬虫方法。
在之前的文章中提到了最常用的爬虫方式就是调用requests模块,下面介绍另一个方法,就是调用urllib模块,然后利用里面的urlopen和read方法去获取网页信息。
下面以百度为例,利用urllib模块获取百度页面信息,具体代码如下:

"""
python3:urlliburllib.requestpython2:urlliburllib2"""
from urllib import request
from urllib import error
from urllib import parsetry:url = 'http://www.baidu.com:80'obj = parse.urlparse(url)# print(obj)response = request.urlopen(url)print("访问的网站是: ", obj.netloc)
except error.HTTPError as e:print(e.code, e.reason, e.headers)
except error.URLError as e:print(e.reason)
else:bytes_content = response.read()print(type(bytes_content))str_content = bytes_content.decode('utf-8')print(type(str_content))

输出结果如下:

可见,read方法获取的页面内容为bytes类型,要转成字符串格式需要对其进行decode解码。

反爬虫

第一步:模拟浏览器(改变headers中的User-Agent)

通过模拟浏览器中的user-agent信息,可以实现防止反爬虫,让服务器认为是浏览器发出的请求,而不是python发出的,从而防止反爬虫。
首先要查看浏览器的user-agent信息:打开网页之后,然后按F12就可以查看网页信息,可以对网页进行分析。再点击上面的Network选项卡,刷新之后点击出现的第一个网址,就可以看到请求与响应信息。
如下图所示:

把这个信息复制到代码中:

"""
浏览器的模拟应用场景:有些网页为了防止别人恶意采集其信息所以进行了一些反爬虫的设置,而我们又想进行爬取。解决方法:设置一些Headers信息(User-Agent),模拟成浏览器去访问这些网站。
"""
from urllib import request
from urllib import error
from urllib import parse
try:url = 'http://www.baidu.com:80'obj = parse.urlparse(url)headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) '}# 实例化请求对象, 修改请求的头部信息;requestObj = request.Request(url, headers=headers)# urlopen方法可以打开一个url地址, 也可以打开一个请求对象(一般为了修改请求头部)response = request.urlopen(requestObj)print("访问的网站是: ", obj.netloc)
except error.HTTPError as e:print(e.code, e.reason, e.headers)
except error.URLError as e:print(e.reason)
else:bytes_content = response.read()print(type(bytes_content))str_content = bytes_content.decode('utf-8')print(type(str_content))# 请求对象拥有的方法:# 相应对象拥有的方法:# print(dir(requestObj))# print(dir(response))print("请求头部信息:", requestObj.headers)print("响应头部信息: ", response.headers)print("响应的状态码: ", response.code)

这样就模拟浏览器可以防止反爬虫,当然在调用requests模块爬虫时,在get方法中加入浏览器的user-agent信息也是一样的可以防止反爬虫。

第二步:设置代理IP

当我们使用同一个IP去爬取同一个网站上的网页时,久了之后会被该网站服务器屏蔽掉,这样是对我们很不利的。因此我们可以利用一些其他的代理IP去代替我们自己的IP,这样就算被屏蔽掉,在换一个IP就可以。

在urllib中需要使用ProxyHandler类来创建新的代理,代码如下:

"""
代理服务器的设置应用场景:使用同一个IP去爬取同一个网站上的网页,久了之后会被该网站服务器屏蔽。解决方法:使用代理服务器。 (使用代理服务器去爬取某个网站的内容的时候,在对方的网站上,显示的不是我们真实的IP地址,而是代理服务器的IP地址)
"""
from urllib.request import ProxyHandler, build_opener, urlopen, install_opener
import randomproxyes = [{'HTTPS': '163.204.247.157:9999'},{'HTTP': '163.204.246.39:9999'},{'HTTP': '163.204.243.135:9999'},
]
# url = 'http://www.baidu.com'
url = 'http://httpbin.org/get'
# 1. 调用类名创建IP代理的处理器
proxy_support = ProxyHandler(random.choice(proxyes))# 2. build_opener === urlopen
opener = build_opener(proxy_support)
install_opener(opener)
# 3.打开url地址, 访问
response = opener.open(url)
print('>>>>>>')
content = response.read()
print(len(content))
print(content)

而利用requests模块爬取页面信息修改代理IP要简单很多,代码如下:

import requests
import randomproxies = [{'http': '123.139.56.238:9999'},{'http': '158.140.182.175:8080'}
]
headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) '}
# url = 'http://www.baidu.com'
url = 'http://httpbin.org/get'
proxy = random.choice(proxies)
print(proxy)
response = requests.get(url, headers=headers, proxies=random.choice(proxies))
print(response.text)
print(response.headers)

通过上面的代码就利用设置代理IP实现了防止反爬虫。

当我们使用代理IP时,怎么才能知道该IP是否可用呢?下面的一小段代码就可以测试IP是否可用:

"""
测试代理IP是否可用?
"""
# -*- coding: utf-8 -*-
import telnetlibprint('------------------------connect---------------------------')
ip = '123.139.56.238'
try:tn = telnetlib.Telnet(ip, port='9999', timeout=10)
except Exception as e:print(e)print('error')
else:print('ok')print('-------------------------end----------------------------')

运行结果如下:

说明该IP是可以使用的。

爬虫必备的防止反爬虫策略相关推荐

  1. 爬虫中的那些反爬虫措施以及解决方法

     在爬虫中遇到反爬虫真的是家常便饭了,这篇博客我想结合我自己的经验将遇到过的那些问题给出来,并给出一些解决方案. 1.UserAgent   UserAgent的设置能使服务器能够识别客户使用的操作系 ...

  2. python爬虫(二)——反爬虫机制

    一.headers反爬虫 1.U-A校验 最简单的反爬虫机制应该是U-A校验了.浏览器在发送请求的时候,会附带一部分浏览器及当前系统环境的参数给服务器,这部分数据放在HTTP请求的header部分. ...

  3. python爬虫脚本ie=utf-8_Python反爬虫伪装浏览器进行爬虫

    对于爬虫中部分网站设置了请求次数过多后会封杀ip,现在模拟浏览器进行爬虫,也就是说让服务器认识到访问他的是真正的浏览器而不是机器操作 简单的直接添加请求头,将浏览器的信息在请求数据时传入: 打开浏览器 ...

  4. 网站反爬虫的策略有哪些

    网站有许多反爬虫策略,包括但不限于:1.阻止IP地址:目标网站通过阻止某些IP地址来阻止爬虫的访问.2.验证码:目标网站要求用户在提交表单时输入验证码,以便爬虫无法通过表单提交获取数据.3.User- ...

  5. WebDriver 识别反爬虫的原理和破解方法~

    作者|志斌 来源|python笔记 有时候我们在爬取动态网页的时候,会借助渲染工具来进行爬取,这个"借助"实际上就是通过使用相应的浏览器驱动(即WebDriver)向浏览器发出命令 ...

  6. html中::before 爬虫_反反爬虫系列(四)

    过完年,好了,咱们接着更新反反爬虫系列 至于之前有朋友表示出一下1688呀,x宝的反反爬虫 说实在的,阿里系的反爬虫很厉害,我自愧不能搞定. 比如x宝的登录,用了selenium + chrome的朋 ...

  7. 关于反爬虫,看这一篇就够了

    编者:本文来自携程酒店研发部研发经理崔广宇在第三期[携程技术微分享]上的分享,以下为整理的内容概要.墙裂建议点击视频回放,"现场"围观段子手攻城狮大崔,如何高智商&高情商地 ...

  8. 关于反爬虫,看这一篇就够了 1

    编者:本文为携程酒店研发部研发经理崔广宇在携程技术微分享中的分享内容. [携程技术微分享]是携程技术中心推出的线上公开分享课程,每月1-2期,采用目前最火热的直播形式,邀请携程技术人,面向广大程序猿和 ...

  9. python爬虫反爬 css 知乎 专栏_反反爬虫系列(四)

    过完年,好了,咱们接着更新反反爬虫系列 至于之前有朋友表示出一下1688呀,x宝的反反爬虫 说实在的,阿里系的反爬虫很厉害,我自愧不能搞定. 比如x宝的登录,用了selenium + chrome的朋 ...

  10. python 反爬机制_python3爬虫--反爬虫应对机制

    python3爬虫--反爬虫应对机制 内容来源于: 前言: 反爬虫更多是一种攻防战,网络爬虫一般有网页爬虫和接口爬虫的方式:针对网站的反爬虫处理来采取对应的应对机制,一般需要考虑以下方面: ①访问终端 ...

最新文章

  1. 优化实战:不要随便将字段折腾来折腾去的
  2. android连接Mysql数据库之JDBC方式
  3. 【数据平台】Centos下仅CPU安装TensorFlow
  4. Py之folium:python库之folium的简介、安装、使用方法之详细攻略
  5. Windows Phone开发之路(9) Silverlight之动画
  6. 当前系统时间与服务器时间,操作系统时间和服务器时间
  7. 论文浅尝 - AAAI2020 | 从异质外部知识库中进行基于图的推理实现常识知识问答...
  8. Intent, Bundle, ListView的简单使用
  9. 蓝牙GFSK基带调制解调
  10. java tcp 字节数_服务器无法接收大小超过1500字节的TCP数据包
  11. Spring之ApplicationContextAware接口详解
  12. java g1的并行_Java 11好用吗
  13. Sharepoint定制的时候应该注意的事项
  14. TensorFlow人工智能入门教程之十一 最强网络DLSTM 双向长短期记忆网络(阿里小AI实现)...
  15. SSM+汽车销售平台 毕业设计-附源码171619
  16. abd串口工具使用教程_adb调试工具包(adb调试程序)
  17. spine 导出纹理_Spine 的纹理打包器(texture packer)详解
  18. linux如何将百分比转换为数字,Linux_sql 自定义百分比转换小数函数代码,复制代码 代码如下: --CAST 和 CO - phpStudy...
  19. js(JavaScript):面向对象,Document对象:查找元素对象,修改元素,事件
  20. Lepus监控redis

热门文章

  1. H5倍速播放视频播放器(2x/1.5x/0.5x播放)
  2. 西瓜视频4K修复技术还原经典,为内容创新打开新思路
  3. 【windows】使用键盘代替鼠标的快捷键
  4. C++初学 贪吃蛇项目
  5. java saxreader 字符串_解析XML文件(字符串)的两种方法-----SAXReader 与 DocumentHelper...
  6. 墨墨背单词mysql_GitHub - FunStuff/WeChat-applets: 微信小程序小鸡单词
  7. 判断客户端是手机端还是PC端
  8. 推荐oracle exadata,Exadata的一些常见误区
  9. node.js连接数据库得基本操作
  10. 优惠券如何引流,如何做好优惠券推广,优惠券正确引流方法