使用代理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'))

 

 
posted @ 2018-12-10 14:56  陈桑啊丶  阅读(2284)  评论(0编辑  收藏  举报