IntelliJ IDEA 劝酒文化 tkinter methods printing uiviewcontroller angular material ip handlebarsjs vue遍历 jquery查找子元素 bootstrap日历插件 float占几个字节 python与机器学习 python编程练习题 jquery获取兄弟节点 SketchUp pythonsocket编程 python当前日期 python中的join函数 数据结构java版 java编程学习入门 java初学 java开发入门 java输出数组 java框架学习 javahttp linuxtail命令 linuxtar命令 java游戏制作 信息系统项目管理师教程 计算机电子书 一键刷入recovery 小程序游戏源码 绘图软件下载 ps怎么做漂亮艺术字 日志软件 小米手机开发者模式 服务器系统安装教程 eclipse汉化版
当前位置: 首页 > 学习教程  > 编程语言

通过爬虫获取免费IP代理

2021/2/13 17:09:27 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

文章目录前言简介代码总结前言 常见的反爬虫措施之一,就是查看用户发起请求的IP地址,若很频繁,则封IP。我们可以通过使用动态代理IP池实现反爬虫。百度搜索:爬虫IP池, 就有很多网站,这些网站一般都有提供免…

文章目录

    • 前言
    • 简介
    • 代码
    • 总结

前言

常见的反爬虫措施之一,就是查看用户发起请求的IP地址,若很频繁,则封IP。我们可以通过使用动态代理IP池实现反爬虫。百度搜索:爬虫IP池, 就有很多网站,这些网站一般都有提供免费的代理IP。但是这些IP质量不高,需要自己手动复制粘贴,测试后再使用,效率底下。我们可以写个爬虫,批量获取免费IP,自动测试后,再使用。

本篇文章使用的目标网址为:高可用全球免费代理IP库

简介

传入URL地址,返回可用的IP地址list列表。

  • __init __ :设置请求头、请求地址list
  • parse : 获得当前页面上的所有IP,返回一个list
  • check_ip : 检查IP地址是否可用,返回可用的当前页面上的IP地址list
  • get_ip : 运行主方法,返回所有可用的IP列表

代码

import requests
from lxml import etree


class FreeIp():
    def __init__(self):
        self.start_url = "https://ip.jiangxianli.com/?page={}"
        self.url_list = [self.start_url.format(i) for i in range(1,6)]
        self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"}

    def parse(self, html):
        tr_list = html.xpath("//table[@class='layui-table']/tbody/tr")
        ip_list = []
        for tr in tr_list:
            if  tr.xpath("./td/text()")[2] == "高匿":
                ip = {}
                ip["ip"] = tr.xpath("./td/text()")[0]
                ip["type"] = tr.xpath("./td/text()")[3]
                ip_list.append(ip)

        return ip_list

    def check_ip(self, ip_list):
        correct_ip = []
        for ip in ip_list:
            proxies = {'http': ip["ip"]}
            try:
                requests.get('https://www.baidu.com', proxies=proxies, timeout=2, )
                print("可用的IP地址为:{}".format(ip))
                correct_ip.append(ip["ip"])
            except:
                print("不可用的IP地址为:{}".format(ip))
        return correct_ip

    def get_ip(self):
        #获得URL地址
        correct_all_ip = []
        for url in self.url_list:
            #获得请求,
            response = requests.get(url, headers=self.headers).content.decode()
            #解析页面
            html = etree.HTML(response)
            #得到IP
            ip_list = self.parse(html)
            #检查IP
            correct_ip = self.check_ip(ip_list)
            correct_all_ip.extend(correct_ip)
        #返回所有IP
        return correct_all_ip

if __name__ == '__main__':
    free_ip = FreeIp()
    ip = free_ip.get_ip()
    print(ip)
    print(len(ip))

总结

  • 可以将此作为一个函数调用的接口,每次使用爬虫时,请求的IP地址从此函数得到的list中随机选取一个。
  • proxies = {‘http’: ip[“ip”]} 中,请求的是https网址,需要设置为http。请求的是http网址,需要设置为https。具体为啥,我也不清楚

本文链接: http://www.dtmao.cc/news_show_700067.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?