现在网络爬虫非常普及,导致很多网站对于爬虫的防御越来越严格。如果不用代理IP,一些数据大一些的根本无法爬下来。自从有了一个代理IP池之后,反爬破解就变得简单了,下面IP精灵介绍一个免费的代理IP建造教程给大家。
1、获取代理的json信息
2、分析
很明显每一行是一个json数据,但整个页面你拿到的也不过是字符串而已,每一行末都换行,也就是说每一行末都有"\n",那么思路很清晰,用requests获得整个页面的text(字符串),然后用split('\n') 将每一行分割之后组成的列表,便利这个列表用json.loads()方法,将每一行的字符串转换为json对象,最后取值。
3、代码部分
#!/usr/bin/env python3
# coding:utf-8
#lanxing
import json
import telnetlib
import requests
import random
proxy_url = 'https://raw.githubusercontent.com/fate0/proxylist/master/proxy.list'
# proxyList = []
#定义函数,验证代理ip是否有效
def verify(ip,port,type):
proxies = {}
try:
telnet = telnetlib.Telnet(ip,port=port,timeout=3) #用这个ip请访问,3s自动断开,返回tiemout
except:
print('unconnected')
else:
#print('connected successfully')
# proxyList.append((ip + ':' + str(port),type))
proxies['type'] = type
proxies['host'] = ip
proxies['port'] = port
proxiesJson = json.dumps(proxies)
#保存到本地的proxies_ip.json文件
with open('proxies_ip.json','a+') as f:
f.write(proxiesJson + '\n')
print("已写入:%s" % proxies)
#定义函数,带着url地址去获取数据
def getProxy(proxy_url):
response = requests.get(proxy_url)
#print(type(response))
# 用split('\n') 将每一行分割之后组成的列表,消除换行影响
proxies_list = response.text.split('\n')
for proxy_str in proxies_list:
# 用json.loads()方法,将每一行的字符串转换为json对象,最后取值
proxy_json = json.loads(proxy_str)
host = proxy_json['host']
port = proxy_json['port']
type = proxy_json['type']
verify(host,port,type)
#主函数,入口
if __name__ == '__main__':
getProxy(proxy_url)
关于代理IP池的构建,网络上面大家也可以找到很多相关教程,如果大家想要简单一些,可以直接向靠谱的代理服务商购买代理IP来使用,这样IP的质量更加高,也更加安全。