使用代理IP和隨機請求頭


#為什么要設置代理IP和隨機請求頭?
#爬蟲默認的User-Agent(python-urllib/python版本)
#1.服務器會判斷一個頻繁的請求是不是來自於同一個User-Agent標識,或者判斷User-Agent是不是以python開頭。如果是,則會限制訪問。
#解決方案:隨機切換User-Agent的值
#2.服務器會判斷一個頻繁的請求是不是來自於同一個IP地址發出的,如果是,則會對IP進行限制訪問。
#解決方案:使用代理IP,隨機切換IP地址,不使用真實的IP來發起請求。
1.設置隨機請求頭

# #定義一個要訪問的網址:
url='http://httpbin.org/get'
# #設置一個瀏覽器標識的列表
user_agent_list=['Mozilla/5.0(Windows;U;WindowsNT6.1;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50','Mozilla/5.0(Macintosh;IntelMacOSX10.6;rv:2.0.1)Gecko/20100101Firefox/4.0.1','Mozilla/5.0(Macintosh;IntelMacOSX10_7_0)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11']
#設置一個請求頭
headers={
    'User-Agent':random.choice(user_agent_list)
}
request=urllib.request.Request(url,headers=headers,method='GET')
response=urllib.request.urlopen(request).read().decode('utf-8')
print(response)

2.動態的添加請求頭

import urllib.request
import random
result=urllib.request.Request(url,method='GET')
result.add_header('User-Agent','Mozilla/5.0(Windows;U;WindowsNT6.1;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50')
response=urllib.request.urlopen(result)
print(response.read().decode('utf-8'))

 

3.設置代理隨機IP

import urllib.request
import random
from urllib.request import ProxyHandler,build_opener
#設置一個代理IP列表
ip_list=[{'http':'http://61.135.217.7:80'},{'https':'https://111.231.223.236:808'},{'http':'http://111.155.116.236:8123'}]
#創建一個IP代理對象
proxy_handler=ProxyHandler(random.choice(ip_list))
#根據IP代理對象,創建用於發送請求的opener對象
opener=build_opener(proxy_handler)
opener.addheaders=[('User-Agent','Mozilla/5.0(Windows;U;WindowsNT6.1;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50')]
#再使用opener這個對象發起請求
response=opener.open('http://httpbin.org/get')
print(response.read().decode('utf-8'))

4.代理IP+隨機請求頭

 
        
import urllib.request
import random
from urllib.request import ProxyHandler,build_opener
# url='http://httpbin.org/get'
# #設置一個瀏覽器標識的列表
user_agent_list=['Mozilla/5.0(Windows;U;WindowsNT6.1;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50','Mozilla/5.0(Macintosh;IntelMacOSX10.6;rv:2.0.1)Gecko/20100101Firefox/4.0.1','Mozilla/5.0(Macintosh;IntelMacOSX10_7_0)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11']
ip_list=[{'http':'http://61.135.217.7:80'},{'https':'https://111.231.223.236:808'},{'http':'http://111.155.116.236:8123'}]
#設置一個請求頭
headers={
    'User-Agent':random.choice(user_agent_list)
}
request=urllib.request.Request(url,headers=headers,method='GET')
#創建一個IP代理對象
proxy_handler=ProxyHandler(random.choice(ip_list))
#根據IP代理對象,創建用於發送請求的opener對象
opener=build_opener(proxy_handler)

#使用install_opener方法之后,會將程序中默認的urlopen方法替換掉,也就是說使用install_opener之后,在該文件中,再次調用urlopern會使用以及創建好的operner對象。如果不想替換,只是想臨時用一下,可以使用opener.open()這樣就不會對程序默認的urlopen有影響。
# urllib.request.install_opener(opener)

#再使用opener這個對象發起請求
response=opener.open(request)

print(response.read().decode('utf-8'))
 
        

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM