#ip代理池构建的第一种方式
import random
import urllib.request
import re
#用户代理池用列表存储,这里构建3个用户代理(自己随便构建个数)
ippools = [
“”, #这里输入不同的 User-Agent 的值
“”, #这里输入不同的 User-Agent 的值
“”, #这里输入不同的 User-Agent 的值
]
#接下来构建一个函数,来实现用户代理池的功能
def ip(ippools): # uapools 形参
thisip = random.choice(ippools) #choice 从列表中 随机 选一个参数
print(thisip) #thisip
proxy = urllib.request.ProxyHandler({“http”:thisip}) #thisip
opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler) #在 初始化 的时候,就实现了代理 ip 的操作
urllib.request.install_opener(opener) # 将opener安装为全局
#ip(ippools) #如果报错,这里运行一下,意思是从外边调用一下,看能不能运行
#url = “” # 要爬的网站地址 # 这里是查看异常语句能否运行
data1 = urllib.request.urlopen(url)
data = data1.read().decode(“utf-8”, “ignore”)
print(len(data)) #打印出来看看
for i in range(0,3): #加入爬3次
try:
ip(ippools) #这里 –每爬一下,它都切换一下 代理 ip
url = “” # 要爬的网站地址
data1 = urllib.request.urlopen(url)
data = data1.read().decode(“utf-8”, “ignore”)
# print(len(data)) #打印出来看看
# 将爬取的内容写进本地文件中 expected string or bytes-like oject 无法写进文件或者无法爬取
fh = open(“D:/xxxxx” + str(i) + “.htm”, “wb”)
fh.write(data1)
fh.close()
except Exception as err:
print(err)
#ip代理池构建的第二种方式,接口方式,对不稳定的ip好很多
import random
import urllib.request
import re
#接下来构建一个函数,来实现用户代理池的功能,接口方式
def ip(): # uapools 形参
thisip = urllib.request.urlopen(“大象那个外国网址(注意构建一下)”).read().decode(“utf-8”,“ignore”)
print(thisip) #thisip
proxy = urllib.request.ProxyHandler({“http”:thisip}) #thisip
opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler) #在 初始化 的时候,就实现了代理 ip 的操作
urllib.request.install_opener(opener) # 将opener安装为全局
for i in range(0,5):
try:
ip() #这里 –每爬一下,它都切换一下 代理 ip
url = “” # 要爬的网站地址
data1 = urllib.request.urlopen(url)
data = data1.read().decode(“utf-8”, “ignore”)
# print(len(data)) #打印出来看看
# 将爬取的内容写进本地文件中 expected string or bytes-like oject 无法写进文件或者无法爬取
fh = open(“D:/xxxxx” + str(i) + “.htm”, “wb”)
fh.write(data1)
fh.close()
except Exception as err:
print(err)
#上面的thisip改进,一下提取10个,用正则提取
‘’’
for item in thisall:
print(item)
#读取这个数据,一行一行读取 这个for循环专门复制到python idea里运行一下,看一下提取的ip的格式,
先用解码代码,如果ip格式还是不正规
import re
item.decode(“utf-8”,“ignore”)
然后用正则提取正规样式的ip格式
‘’’
#第一个函数是添加ip的
def ip(time,isurllib): # time 调用几次 isurllib 是否调用
print("这一次调用了接口")
thisall = urllib.request.urlopen("大象那个外国网址(注意构建一下)").read().decode("utf-8","ignore") #这里构建的网址,一下提取10个,num=10
#用一个空列表存储这些ip
ippools = []
for item in thisall:
ippools.append(item.decode("utf-8","ignore"))
print(item.decode(“utf-8”,“ignore”)) #读取这个数据,一行一行读取 这个for循环专门复制到python idea里运行一下,看一下提取的ip的格式,先用解码,然后用正则提取正规样式的ip格式
else:
print("这一次没有调用接口")
print("当前的所有ip列表是:")
print(ippools)
thisip = ippools[time] # 如果isurllib != 1,那么此时直接执行这句,就是直接从接口中调用
print("当前用的ip是:" + ippools[time]) #thisip
proxy = urllib.request.ProxyHandler({"http":thisip}) #thisip
opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler) #在 初始化 的时候,就实现了代理 ip 的操作
urllib.request.install_opener(opener) # 将opener安装为全局
#第二个函数是添加代理ip的
def proxy_ip(ippools,time): #ippools 第一个参数是传过来的所有ip列表ippools
thisip = ippools[time]
print(“当前用的ip是:” + ippools[time]) # thisip
proxy = urllib.request.ProxyHandler({“http”: thisip}) # thisip
opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler) # 在 初始化 的时候,就实现了代理 ip 的操作
urllib.request.install_opener(opener) # 将opener安装为全局
#这里是调用10次ip的案例
x=0
for i in range(0,45):
try:
if(x % 10 == 0):
time = x % 10
ip(time,1) #调用一下ip
else:
ip(time, 0)
ip() #这里 –每爬一下,它都切换一下 代理 ip
url = “” # 要爬的网站地址
data1 = urllib.request.urlopen(url)
data = data1.read().decode(“utf-8”, “ignore”)
# print(len(data)) #打印出来看看
# 将爬取的内容写进本地文件中 expected string or bytes-like oject 无法写进文件或者无法爬取
fh = open(“D:/xxxxx” + str(i) + “.htm”, “wb”)
fh.write(data1)
fh.close()
x += 1
except Exception as err:
print(err)
x += 1
今天的文章python16分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/65810.html