爬虫如何获取免费代理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.hqwc.cn/news/317901.html

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

相关文章

macbook电脑2024免费好用的系统清理优化软件CleanMyMac X4.14.7

CleanMyMac X2024来帮助你找到和删除不需要的文件。CleanMyMac X是一款专业的mac清理软件,它可以智能地扫描你的磁盘空间,找出并删除大型和旧文件,系统垃圾,iTunes垃圾,邮件附件,照片库垃圾等,让…

那些高级工程师才知道的只有几行代码却功能强大python自动化脚本,号称掌握这个python库让你工作效率变得比别人遥遥领先

那些高级工程师才知道的只有几行代码却功能强大python自动化脚本,号称掌握这个python库让你工作效率变得比别人遥遥领先。 如果你也厌倦了每天重复同样乏味的工作?Python,凭借它的简单和通用性,能够为你的问题提供最佳方案。 在本文中,我们将探索10个Python脚本,这些脚本…

数据结构学习 Jz48最长不含重复字符的子字符串

关键词:哈希表 动态规划 滑动窗口 用时:40min 哈希表 动态规划 题解:我觉得这个写的很好。 题目: 方法一: 哈希表 滑动窗口 思路: 我一开始没想到用一个左指针做滑动窗口。 哈希表:存之前…

七:Day06_redis高级01

第一章 Redis入门 1.1 节 什么是NoSql型数据库 NoSQL ,泛指非关系型的数据库, NoSQL Not Only SQL,它可以作为关系型数据库的良好补充。NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。 SQLNoSQL数据结构结构化非…

P59 生成式对抗网络GAN-理论介绍 Theory behind GAN

Object Normal Distribution 的数据 经过 Generator 后生成分布更加复杂的PG. 真实数据的分布为 Pdata , 希望 PG和Pdata 越近越好 LOSS 是 两者之间的分布距离 问题: 如何计算 divergence? Sampling is goog enough Discriminator 希望V越大越好 y~Pdata 代表从 Pdata里…

zabbix离线安装 zabbix api批量添加主机

持续更新最新版本… 全自动安装方法 下载一键安装脚本 一键安装脚本执行命令全自动安装 tar -zxvf zabbix-rocky_8_zabbix_6.0.x_mysql.tar.gz cd zabbix-rocky_8_zabbix_6.0.x_mysql sh autosetup.sh installRocky8.9系统下载Rocky系统bug报告 手动安装方法 操作系统&…

Java 语言概述

Java 概述 是 SUN(Stanford University Network,斯坦福大学网络公司)1995年推出的一门高级编程语言 是一种面向 Internet 的编程语言。Java 一开始富有吸引力是因为 Java 程序可以在 Web 浏览器中运行。这些 Java 程序被称为 Java 小程序&am…

知识付费平台搭建?找明理信息科技,专业且高效

明理信息科技知识付费saas租户平台 在当今数字化时代,知识付费已经成为一种趋势,越来越多的人愿意为有价值的知识付费。然而,公共知识付费平台虽然内容丰富,但难以满足个人或企业个性化的需求和品牌打造。同时,开发和…

Stable Diffusion模型概述

Stable Diffusion 1. Stable Diffusion能做什么?2. 扩散模型2.1 正向扩散2.2 反向扩散 3. 训练如何进行3.1 反向扩散3.2 Stable Diffusion模型3.3 潜在扩散模型3.4 变分自动编码器3.5 图像分辨率3.6 图像放大 4. 为什么潜在空间是可能的?4.1 在潜在空间中…

HTTP限流控制:Go语言中的精细把关

开场白:在Web应用中,流量控制是一个关键的防护措施,用于防止资源过度消耗和潜在的安全威胁。特别是在面对DDoS攻击或异常请求时,限流显得尤为重要。今天,我们将探讨如何在Go语言中实现HTTP的限流控制。 知识点一&…

【网络技术】【Kali Linux】Wireshark嗅探(五)文件传输协议(FTP)

一、实验目的 本次实验使用Wireshark流量分析工具进行网络嗅探,旨在了解文件传输协议(FTP)的工作原理。 二、FTP协议概述 文件传输协议(File Transfer Protocol)是互联网上使用得最广泛的文件传输协议,用…

ArduPilot开源代码之MatekSys Optical Flow 3901-L0X

ArduPilot开源代码之MatekSys Optical Flow 3901-L0X 1. 源由2. 安装3. 参数配置3.1 配置光流定位3.2 配置激光测距3.3 辅助配置 4. 测试4.1 光流数据测试4.2 测距数据测试4.3 室内飞行注意事项4.4 实际飞行测试 5. 参考资料 1. 源由 之前介绍过MatekSys Optical Flow 3901-L0…