先领会防止爬虫被反的两个策略;在进行request代办署理设置。
饭爬虫第一招:
动态设置User-Agent(随机切换User-Agent,模拟分歧用户的浏览器信息)
然后,采用 random随机模块的choice方式随机选择User-Agent,这样每次请求城市从中选择,请求很频仍的话就多找几个user-agent。
def load_page(url, form_data):
USER_AGENTS = [
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
"Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
"Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
"Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5"
]
user_agent = random.choice(USER_AGENTS)
headers = {
'User-Agent':user_agent
}
反爬虫第二招:
利用IP地址池:VPN和代办署理IP,此刻大部门网站都是按照IP来ban的。
因为良多网站会检测某一段时候某个IP的拜候次数(经由过程流量统计,系统日记等),若是拜候次数多的不像正常人,它会禁止这个IP的拜候。
所以我们可以设置一些代办署理办事器,每隔一段时候换一个代办署理,就算IP被禁止,依然可以换个IP继续爬取。
urllib2中经由过程ProxyHandler来设置利用代办署理办事器
ProxyHandler处置器(代办署理设置): 这样就设置了一个无需认证的代办署理
import urllib2
#设置一个代办署理hander
httpproxy_handler = urllib2.ProxyHandler({"http" : "124.88.67.81:80"})
opener = urllib2.build_opener(httpproxy_handler)
request = urllib2.Request("http://www.baidu.com/")
response = opener.open(request)
print response.read()
若是代办署理IP足够多,就可以随机选择一个代办署理去拜候网站。
import urllib2
import random
proxy_list = [
{"http" : "124.88.67.81:80"},
{"http" : "124.88.67.81:80"},
{"http" : "124.88.67.81:80"},
{"http" : "124.88.67.81:80"},
{"http" : "124.88.67.81:80"}
]
# 随机选择一个代办署理
proxy = random.choice(proxy_list)
# 利用选择的代办署理构建代办署理处置器对象
httpproxy_handler = urllib2.ProxyHandler(proxy)
opener = urllib2.build_opener(httpproxy_handler)
request = urllib2.Request("http://www.baidu.com/")
response = opener.open(request)
print response.read()
requset 模块设置代办署理方式:
A、通俗代办署理
import requests# 按照和谈类型,选择分歧的代办署理
proxies = {
"http": "http://12.34.56.79:9527",
"https": "http://12.34.56.79:9527",
}
response = requests.get("http://www.baidu.com", proxies = proxies)
print response.text
B、私密代办署理
import requests
# 若是代办署理需要利用HTTP Basic Auth,可以利用下面这种格局:
proxy = { "http": "账号:暗码@61.158.163.130:16816" }
response = requests.get("http://www.baidu.com", proxies = proxy)
print response.text
Google Cache 和 Baidu Cache:若是可能的话,利用谷歌/百度等搜刮引擎办事器页面缓存获取页面数据。
利用 Crawlera(专用于爬虫的代办署理组件),准确设置装备摆设和设置下载中心件后,项目所有的request都是经由过程crawlera发出。
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!