Python破解反爬虫的两种方法

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即为爬取结果
经验分享 程序员 微信小程序 职场和发展