用户代理池
概述
我们已经学会了如何构建用户代理(浏览器伪装),那么用户代理池如何构建呢?所谓用户代理池,即将不同的用户代理组建成为一个池子,然后随机调用。
实战
'''
用户代理池构建
即将不同浏览器的User-Agent放在一起,称为用户代理池构建
'''
import re,urllib.request,random
#用户代理池
uapools = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0",
"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko",
]
def ua(uapools):
thisua = random.choice(uapools)
print(thisua)
#浏览器伪装
headers = ("User-Agent",thisua)
#创建一个opener
opener = urllib.request.build_opener()
opener.addheaders = [headers]
#将opener安装为全局
urllib.request.install_opener(opener)
#爬取页面1到3的Python标题
for i in range(0,3):
ua(uapools) #调用函数,得到用户代理池中随机的用户代理.
url = "https://www.baidu.com/s?wd=Python&pn="+str(i*10)+"&oq=Python"
#用urlopen打开网页
data=urllib.request.urlopen(url).read().decode('utf-8')
pat = 'data-tools=.*?"title":"(.*?)"'
link = re.compile(pat).findall(data)
print(link)
print("----------------")
IP代理与IP代理池构建的两种方式
IP代理概述
使用代理IP,这是爬虫/反爬虫的第二大招,通常也是最好用的。
很多网站会检测某一段时间某个IP的访问次数(通过流量统计,系统日志等),如果访问次数多的不像正常人,它会禁止这个IP的访问。
所以我们可以设置一些代理服务器,每隔一段时间换一个代理,就算IP被禁止,依然可以换个IP继续爬取。
在urllib.request库中,通过ProxyHandler来设置使用代理服务器,下面通过例子来说明如何使用自定义opener来使用代理:
免费短期代理网站:西刺免费代理IP(http://www.xicidaili.com/)
IP代理池构建
'''
ip代理池构建
'''
import re,urllib.request
import random
#构建ip代理池
ip_pools = [
"115.159.201.179",
"110.86.136.14"
]
def ip(ip_pools, url):
ip = random.choice(ip_pools)
print(ip)
#将ip转为相应的格式
proxy = urllib.request.ProxyHandler({"http":ip})
#把IP代理装入opener
opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
#将opener设为全局
urllib.request.install_opener(opener)
data = urllib.request.urlopen(url).read()
return data
#用任意ip代理爬取三次
for i in range(0,3):
url = "https://www.baidu.com"
data = ip(ip_pools , url)
print(data)
fh = open("F://ip//ip"+str(i)+".html","wb")
fh.write(data)
fh.close()