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

 

 

转载于:https://www.cnblogs.com/chensang/p/10096494.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值