python抓取代理IP

众所周知,IP地址就是网络用户畅游互联网的通行证。代理IP可以伪装我们的真实IP地址,代理网络用户去取得网络信息。每个卖代理IP的网站都提供了免费IP,对于初学者来说这些就够用了。
这篇文章就是学习如何通过python,从代理IP网站抓取一些IP。主要知识点有通过requests库得到网页代码,re正则表达式提取我们需要的数据,xlwt保存数据。

完整代码如下。

import requests
import re
import xlwt
import telnetlib

headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36'
    }

def get_ip_port():
    """
    爬取网页,提取数据
    :return:IP列表
    """
    ip_port_list = []
    for i in range(1, 11):
        url = 'https://www.kuaidaili.com/free/inha/{}/'.format(i)
        response = requests.get(url, headers=headers, timeout=5)
        ip_list=re.compile('<td data-title="IP">(.*?)</td>').findall(response.text)#正则表达式提取IP
        port_list = re.compile('<td data-title="PORT">(.*?)</td>').findall(response.text)#正则表达式提取PORT
        for ip_port in zip(ip_list,port_list):#zip()函数,IP和PORT一一对应
            ip_port_list.append(ip_port)#列表添加
    print(ip_port_list)
    return ip_port_list

def check_IP_alive(ip_port_list):
    """
    检查代理IP是否可用
    :param ip_port_list: IP列表
    :return: 可用的IP列表
    """
    alive_list = []
    for ip_port in ip_port_list:
        try:
            tn=telnetlib.Telnet(ip_port[0],port=ip_port[1],timeout=2)
            #print(tn)
        except:
            print(ip_port[0]+':'+ip_port[1]+'不可用')
        else:
            print(ip_port[0]+':'+ip_port[1]+'可用')
            alive_list.append(ip_port)
            if len(alive_list)>10:#有这么些个就停止
                break
    print(alive_list)
    return alive_list

def write_data(alive_list):
    """
    写入数据,保存
    :param alive_list: 可用的IP列表
    :return:
    """
    excel = xlwt.Workbook()
    sheet = excel.add_sheet('ip_port')
    for i in range(0, len(alive_list)):
        for j in range(0, len(alive_list[i])):
            sheet.write(i, j, alive_list[i][j])
    excel.save(r'C:\Users\Administrator\Desktop\w.xls')
    print('已保存文件!' + r'C:\Users\Administrator\Desktop\w.xls')

if __name__ == '__main__':
    ip_port_list = get_ip_port()
    alive_list = check_IP_alive(ip_port_list)
    write_data(alive_list)

运行结果。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

崇赛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值