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. Win8 Metro(C#)数字图像处理--2.66FloodFill算法
  2. 这是一个测试rss的内容哦
  3. Linux 小知识翻译 - 「端口和端口号」
  4. Sentinel介绍与使用
  5. 什么叫补仓,什么是补仓
  6. c++里面的内联函数
  7. 解决正在等待响应_解决一些等待问题
  8. 中国智能卡市场的新机会
  9. 从0开始学Swift笔记整理(五)
  10. Tap titans乐趣
  11. eclipse JSP页面中的JS代码为黑色,JS单独文件是OK的
  12. 孟岩:参与设计20多个区块链经济系统后,我总结出4个原则和7个陷阱 |区块链捕手
  13. 读书随笔《36岁, 半熟人生》
  14. 大厂程序员教你如何写简历(附简历模板)//简历、秋招、简历模板。经验分享、资源分享
  15. Spelling Error Correction with Soft-Masked BERT
  16. 【网页设计】HTML做一个属于我的音乐页面(纯html代码)
  17. 羊皮卷二我要用心中的爱来迎接今天(中英对照)
  18. 中文最全停用词表(可以直接复制)
  19. 用友u8服务器安装后系统假死,服务器打开用友U8企业应用平台没有反应的问题。-用友U8...
  20. java电子日记本代码_计算法日记将规则的价值视为无需计算机的代码

热门文章

  1. 控制Tello无人机扫描条形码
  2. cad2019菜单栏怎么调出来_AutoCAD2019工具栏没了找不到解决方法 AutoCAD2019工具栏怎么调出来...
  3. java saxreader,java – 如何使用dom4j SAXReader脱机?
  4. Soui Button学习一
  5. CSP202104-4 校门外的树
  6. java中输出日历_Java:输入年份和月份打印出相应的日历表
  7. 地理数据处理之矢量数据
  8. Python数据处理及分析详解
  9. ape格式转换ogg格式用什么软件好
  10. maven 常用命令