爬虫如何获取免费代理IP(二)

89ip代理爬取代码实现

一、代码实现

import requests
import time
import random
from fake_useragent import UserAgent
from lxml import etree
import os
import csv"""
89ip代理爬取
"""class IPSipder(object):def __init__(self):self.url = "https://www.89ip.cn/index_{}.html"self.headers = {'User-Agent': UserAgent().random}# 统计有效ip个数self.count = 0# 获取ip表格行def get_html(self, url):html = requests.get(url=url, headers=self.headers).textparser_html = etree.HTML(html)tr_list = parser_html.xpath('//tbody/tr')return tr_list# 提取ip和portdef parser_html(self, tr_list):proxies_list = []for tr in tr_list:# 获取ipip = tr.xpath('./td/text()')[0].strip()# 获取portport = tr.xpath('./td/text()')[1].strip()# 将ip和port封装到字典中,便于proxies代理调用ip_dict = {"http": "http://" + ip + ":" + port,"https": "https://" + ip + ":" + port}# 将获取的所有ip和port放入列表proxies_list.append(ip_dict)return proxies_list# 保存有效ip到csv文件,如不要保存,可用在run方法中将其注释掉即可def save_ip(self, proxy, save_filename):try:if proxy:# 设置将保持的文件放到桌面save_path = "c:/Users/" + os.getlogin() + "/Desktop/"save_file = save_path + save_filenameprint('保存位置:', save_file + '.csv')with open(save_file + ".csv", 'a+', encoding='utf-8') as f:fieldnames = ['http', 'https']writer = csv.DictWriter(f, fieldnames=fieldnames)writer.writerows(proxy)except Exception as e:print(e.args)# 检查哪些IP是可用的def check_ip(self, proxies_list):use_proxy = []for ip in proxies_list:try:response = requests.get(url="http://httpbin.org/", headers=self.headers, proxies=ip, timeout=3)# 使用百度一直失败,不知何原因# response = requests.get(url="https://www.baidu.com/", headers=self.headers, proxies=ip, timeout=3)# 判断哪些ip可用if response.status_code == 200:# 将可用IP封装到列表,共后期使用或保存use_proxy.append(ip)self.count += 1print('当前检测ip', ip, '检测可用')except Exception as e:# print(e.args)print('当前检测ip', ip, '请求超时,检测不合格')# else:#     print('当前检测ip', ip, '检测可用')return use_proxydef run(self):begin = int(input("请输入要抓取的开始页:"))end = int(input("请输入要抓取的终止页:"))filename = input("请输入保存文件名称:")for page in range(begin, end + 1):print(f"#################抓取第{page}页################################")# 重构urlurl = self.url.format(page)# 解析出所有的ip行parser_html = self.get_html(url)# 获取所有的ip代理proxies_list = self.parser_html(parser_html)# 筛选可用的ipproxy_id = self.check_ip(proxies_list)# 将可用的IP代理存入文件中:如若不想保存到文件中,将下面这行代码注销即可self.save_ip(proxy_id, filename)# 随机休眠2~3秒time.sleep(random.randint(2, 3))if __name__ == "__main__":spider = IPSipder()# 执行spider.run()print(f'共统计到有效ip' + str(spider.count) + "个!")

二、代码运行

请输入要抓取的开始页:2
请输入要抓取的终止页:2
请输入保存文件名称:proxy-ip
#################抓取第2页################################
当前检测ip {'http': 'http://139.196.151.191:9999', 'https': 'https://139.196.151.191:9999'} 检测可用
当前检测ip {'http': 'http://114.102.45.39:8089', 'https': 'https://114.102.45.39:8089'} 请求超时,检测不合格
当前检测ip {'http': 'http://114.231.46.231:8089', 'https': 'https://114.231.46.231:8089'} 请求超时,检测不合格
当前检测ip {'http': 'http://124.71.157.181:8020', 'https': 'https://124.71.157.181:8020'} 检测可用
当前检测ip {'http': 'http://121.40.137.141:80', 'https': 'https://121.40.137.141:80'} 请求超时,检测不合格
当前检测ip {'http': 'http://117.69.232.45:8089', 'https': 'https://117.69.232.45:8089'} 请求超时,检测不合格
当前检测ip {'http': 'http://114.102.45.89:8089', 'https': 'https://114.102.45.89:8089'} 请求超时,检测不合格
当前检测ip {'http': 'http://115.29.148.215:8999', 'https': 'https://115.29.148.215:8999'} 检测可用
当前检测ip {'http': 'http://120.46.197.14:8083', 'https': 'https://120.46.197.14:8083'} 检测可用
当前检测ip {'http': 'http://113.223.215.128:8089', 'https': 'https://113.223.215.128:8089'} 请求超时,检测不合格
当前检测ip {'http': 'http://112.124.2.212:20000', 'https': 'https://112.124.2.212:20000'} 检测可用
当前检测ip {'http': 'http://114.102.47.164:8089', 'https': 'https://114.102.47.164:8089'} 请求超时,检测不合格
当前检测ip {'http': 'http://117.69.154.91:41122', 'https': 'https://117.69.154.91:41122'} 请求超时,检测不合格
当前检测ip {'http': 'http://123.182.59.167:8089', 'https': 'https://123.182.59.167:8089'} 请求超时,检测不合格
当前检测ip {'http': 'http://223.215.176.74:8089', 'https': 'https://223.215.176.74:8089'} 请求超时,检测不合格
当前检测ip {'http': 'http://114.231.105.68:8089', 'https': 'https://114.231.105.68:8089'} 请求超时,检测不合格
当前检测ip {'http': 'http://121.43.34.143:80', 'https': 'https://121.43.34.143:80'} 请求超时,检测不合格
当前检测ip {'http': 'http://121.40.109.183:80', 'https': 'https://121.40.109.183:80'} 请求超时,检测不合格
当前检测ip {'http': 'http://116.63.130.30:7890', 'https': 'https://116.63.130.30:7890'} 请求超时,检测不合格
当前检测ip {'http': 'http://114.102.44.113:8089', 'https': 'https://114.102.44.113:8089'} 请求超时,检测不合格
当前检测ip {'http': 'http://116.63.130.30:443', 'https': 'https://116.63.130.30:443'} 请求超时,检测不合格
当前检测ip {'http': 'http://114.231.46.160:8089', 'https': 'https://114.231.46.160:8089'} 请求超时,检测不合格
当前检测ip {'http': 'http://183.164.243.29:8089', 'https': 'https://183.164.243.29:8089'} 请求超时,检测不合格
当前检测ip {'http': 'http://114.102.44.137:8089', 'https': 'https://114.102.44.137:8089'} 请求超时,检测不合格
当前检测ip {'http': 'http://117.57.93.63:8089', 'https': 'https://117.57.93.63:8089'} 请求超时,检测不合格
当前检测ip {'http': 'http://159.226.227.90:80', 'https': 'https://159.226.227.90:80'} 请求超时,检测不合格
当前检测ip {'http': 'http://159.226.227.99:80', 'https': 'https://159.226.227.99:80'} 请求超时,检测不合格
当前检测ip {'http': 'http://183.164.243.44:8089', 'https': 'https://183.164.243.44:8089'} 请求超时,检测不合格
保存位置: c:/Users/qwy/Desktop/proxy-ip.csv
共统计到有效ip5个!

三、说明

1.在 c:/Users/qwy/Desktop/proxy-ip.csv下的文件如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/595236.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 操作 JMeter 探索:pymeter 实操指南

概要 JMeter 是一个流行的性能测试工具,用于测试 Web 应用程序的性能和负载。它通常与 GUI 一起使用,但如果您想在自动化测试中集成 JMeter,或者以编程方式创建和运行测试计划,那么 pymeter 库将是一个强大的工具。本文将介绍如何…

2023-12-26分割回文串和子集以及子集II

131. 分割回文串 思想:回溯三步骤!① 传入参数 ② 回溯结束条件 ③ 单层搜索逻辑!抽象成回溯树,树枝上是每次从头部穷举切分出的子串,节点上是待切分的剩余字符串【从头开始每次往后加一】 class Solution:def partiti…

JavaScript中实现页面跳转的多种方法【通俗易懂】

✨前言✨   本篇文章主要在于如何使用JavaScript中的各种实现页面跳转的方式 🍒欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍒博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 在JavaScr…

Fortify漏洞之Sql Injection(sql注入)

Fortify漏洞之Sql Injection(sql注入) 前言 本篇先对Fortify做个简单的认识,同时总结一下sql注入的漏洞! 一、Fortify软件介绍 Fortify是一款能扫描分析代码漏洞的强大工具,是由一家加州软件安全厂商开发而成&#…

为什么要为IP地址申请SSL证书?

在不断发展的互联网世界中,网络安全越来越受到重视,这不仅是因为相关法律法规政策的实施,还因为确保网络安全可以为企业减少财产损失。而确保企业在线业务安全的关键一点,就是SSL证书的部署,SSL证书不仅可以加密数据&a…

Unity中Shader雾效在场景中的调节技巧

文章目录 前言一、修改棋盘格Shader的Cull可以在属性面板控制1、在属性面板定义CullMode2、在SubShader中,使用CullMode3、这样就可以在不同剔除情况下使用棋盘格场景了 二、调节天际线颜色和雾融为一体1、在摄像机设置不渲染天空盒,渲染单一颜色2、采样…

如何解决大模型的「幻觉」问题?

如何解决大模型的「幻觉」问题? 如何解决大模型的「幻觉」问题?幻觉产生原因?模型原因数据层面 幻觉怎么评估?Reference-based(基于参考信息)基于模型的输入、预先定义的目标输出基于模型的输入 Reference-…

Elasticsearch基本操作之索引操作

本文说下Elasticsearch基本操作之索引操作 文章目录 概述创建索引创建索引示例重复创建索引示例 查看索引查看所有索引查看单个索引 删除索引删除索引 概述 由于是使用命令来操作Elasticsearch,可以使用kibana,postman和apifox等工具 我使用了apifox来执…

【bug】【VSCode】远程终端TERMINAL打不开

【bug】【VSCode】远程终端TERMINAL打不开 可能的原因现象分析解决 可能的原因 昨天晚上vscode在打开多个TERMINAL的情况下,挂了一晚上,今早上来看的时候全都lost connections…。然后关闭再打开就出现了如上现象。 早上一来到实验室就要debug… 现象…

西北工业大学计算机组成原理实验报告——verilog前两次

说明 为了有较好的可读性,报告仅仅粘贴关键代码。该PDF带有大纲功能,点击大纲中的对应标题,可以快速跳转。 实验目标 掌握单周期CPU执行指令的流程和原理;学习使用verilog HDL语言实现单周期CPU, 并通过功能仿真;提…

k8s之pod

pod是k8s中最小的资源管理组件 pod也是最小化运行容器化的应用的资源管理对象 pod是一个抽象的概念,可以理解成一个或者多个容器化应用的集合 pod可以是一个或者多个 在一个pod中运行一个容器(最常用的方式) 在一个pod中同时运行多个容器…

第二证券:长期布局重要窗口或至 险资看涨A股

新年伊始,稳妥资金对2024年权益商场出资更为达观。多家险资组织告诉上海证券报记者,在经历了2023年的震动调整行情后,2024年A股商场机遇大于危险,商场体现或将显着优于2023年。 详细来看,两方面要素支撑权益商场向好&…

总结MySQL 的一些知识点:MySQL 排序

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

[每周一更]-(第56期):不能不懂的网络知识

作为程序员,在网络方面具备一定的知识和技能是非常重要的。以下是一些程序员需要熟练掌握的网络知识: 基础网络概念: IP地址:了解IPv4和IPv6地址的格式和分配方式,以及常见的IP地址分类。子网掩码:理解子…

Vue3 使用路由 Router

Vue3 使用路由 Router 之前几篇博文说了一下 vue 的基本语法和 vue 的传参,今天这篇博文稍微说一下 vue3 里面使用路由。 介绍 众所周知,vue 是用来构建单页面应用的前端框架,大于大多数此类型应用来讲,都推荐使用官方支持的 vue…

宋仕强论道之华强北后山寨手机时代(三十六)

今天继续讲华强北山寨手机,跟手机配套周边产品。华强北,作为中国电子产品的集散地和创新中心,一直以来都是电子产品和数码产品的聚集地。在早期,赛格市场以其走私、翻新的电脑和电脑周边产品而闻名。赛格大厦以前5楼以上都是做电脑…

乒乓球廉价底板评测之五F勒布伦打法讨论

菲利克斯勒布伦的直拍打法让直板又焕发了青春,那他的打法又有什么特点呢?和中国众多直板选手的区别在哪呢?这篇微博我们简单分一下。 首先说下他的器材,纤维板中置碳,淘宝上的版本是碳在大芯两侧,是七层板&…

Unity中URP下统一不同平台下的z值

文章目录 前言一、ComputeFogFactor 来计算雾效混合因子二、UNITY_Z_0_FAR_FROM_CLIPSPACE 来统一计算不同平台下的Z值1、DirectX平台2、GL平台下(在Unity.2022.LTS下,该功能没有完善)3、Opengl下 前言 在之前的文章中,我们实现了URP下的雾效…

电动汽车BMS PCB制板的技术分析与可制造性设计

随着电动汽车行业的迅猛发展,各大厂商纷纷投入巨资进行技术研发和创新。电动汽车的核心之一在于其电池管理系统(Battery Management System, BMS),而BMS的心脏则是其印刷电路板(PCB)。通过这篇文章探讨电动…

Graphics Control

Graphics Control提供了一个易于使用的图形设置管理解决方案,帮助您加快开发。它附带了一个常用设置库,如分辨率、垂直同步、全屏模式、光晕、颗粒、环境光遮挡等。我们的可自定义设置面板UI预制件为您提供了一个可用的UI面板,支持完整的游戏手柄和键盘输入。图形控制还附带…