Python破解反爬虫的两种方法
由于有很多企业为了减轻网页负荷,抵御爬虫爱好者,设置了许多方法阻挡爬虫,本人也只是个菜鸡,
目前只会两种方法绕过反爬虫机制,本文也就只列出这两种方法。
1.伪装浏览器
由于爬虫多直接由python脚本直接访问网页,部分企业也就由此建立了识别来访者是否为Python脚本访问,所以,我们可以使用伪装浏览器的方式对此种防御方式进行破解。
from urllib.request import urlopen
from urllib import request
url = "http://www.cbrc.gov.cn/chinese/jrjg/index.html"
# 如何伪装成浏览器访问?
# 1. 定义一个真实浏览器的代理名称
user_agent = "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
# 2. 写到请求页面的header里面去
req = request.Request(url,headers={'User-Agent': user_agent} )
# 3. 打开网页, 获取内容
print(urlopen(req).read().decode('utf-8'))
关于 user-agent 需要你查看你的浏览器,调出如下图所示,右侧User-Agent即为。
2.IP代理
由于爬虫常常需要多次爬取某一网站,网站则会根据访问次数判断是否为爬虫,若次数很多时,将会封禁此时使用的IP,应对方法为寻找代理IP,若封禁某一IP,则使用代理IP继续爬取。
实现步骤:
- 1). 调用
urllib.request.ProxyHandler(proxies=None)
; — 类似理解为Request
对象 - 2). 调用
opener
— 类似与urlopen
, 这个是定制的 - 3). 安装
opener
- 4). 代理IP的选择
from urllib import request
from urllib.error import URLError
# url = 'https://www.whatismyip.com/'
url = 'https://httpbin.org/get'
proxy = {'https':'171.221.239.11:808', 'http':'218.14.115.211:3128'}
user_agent = 'Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0'
# 1).调用urllib.request.ProxyHandler(proxies=None); --- 类似理解为Request对象
proxy_support = request.ProxyHandler(proxy)
# 2).调用Opener - -- 类似与urlopen, 这个是定制的
opener = request.build_opener(proxy_support)
# 伪装浏览器
opener.addheaders = [('User-Agent',user_agent)]
# 3).安装Opener
request.install_opener(opener)
# 4).代理IP的选择
response = request.urlopen(url)
content = response.read().decode('utf-8') #content即为爬取结果