秒拨动态ip切换技术python_Python爬虫如何通过更换IP避开网站的反爬虫机制(一)...

爬取网站的时候经常会遇到网站上都部署了反爬虫机制,当服务器检测到一段时间内同一个 IP 持续密集的访问网站,则将其判定为爬虫程序,在一段时间内不允许该 IP 地址访问服务器。

这种情况其实可以写个延迟函数,每爬一次随机歇个几秒钟,有效的降低访问密度,从而避开反爬机制。但是弊端是太浪费时间,一天爬几万条数据会感到非常吃力。这时就需要更加有效率的爬取数据,所以需要使用动态ip 和随机 UA(User-Agent)。说白了就是伪装爬虫,假装不同的人使用不同的浏览器在访问网站。

使用动态拨号

除了代理IP以外,还可以使用动态拨号来更换IP,这种方式获得的IP质量更高,而且可以直接在拨号上部署业务,更加方便。这种方式需要进行一些技术处理,实现IP更换和调用。

使用动态ip

使用动态ip 的强大之处在于它在爬虫运行的同时,在线获取动态ip。每次只获取一页,存于数组中,随机使用。当大部分的 IP 失效之后(记录访问失败的次数,当超过一定阈值时,则视为此页动态ip 失效),然后重新获取一页动态ip,如此,可保证每次使用的都是最新的 IP,而且不需要额外的空间和文件来存放动态ip。

def get_proxy(page):

'''

功能:获取 快代理 网站上的最新免费代理IP

参数: page 页数

返回:存有动态ip 的列表 proxyList

'''

# 存放获取到的动态ip 信息    proxyList = []    # 访问 快代理 网站,获取第 page 页的网页信息    headers = {                "User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"    }    request = urllib.request.Request("https://www.kuaidaili.com/free/inha/"+str(page), headers=headers)    html = urllib.request.urlopen(request).read()        # 解析网页信息,从中提取动态ip 的数据    content = etree.HTML(html)    ip = content.xpath('//td[@data-title="IP"]/text()')    port = content.xpath('//td[@data-title="PORT"]/text()')    # 将动态ip 信息存入 proxyList 列表    for i in ip:        for p in port:            proxyList.append(i+':'+p)    return proxyList

你可能感兴趣的:(秒拨动态ip切换技术python_Python爬虫如何通过更换IP避开网站的反爬虫机制(一)...)