先領會防止爬蟲被反的兩個策略;在進行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 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!