本文实例讲述了python实现ip代理池功能。分享给大家供大家参考,具体如下:

爬取的代理源为西刺代理。

用xpath解析页面

用telnet来验证ip是否可用

把有效的ip写入到本地txt中。当然也可以写入到redis、mongodb中,也可以设置检测程序当代理池中的ip数不够(如:小于20个)时,启动该脚本来重新获取ip,本脚本的代码也要做相应的改变。

# !/usr/bin/env python

# -*- coding: utf-8 -*-

# @Version : 1.0

# @Time : 2018/10/23 上午10:40

# @Author : Yeoman

# @Description :

import urllib.request

import lxml.etree

import telnetlib

import os

headers = {

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36'

}

def get_proxy(page_num):

# 获取页面

req = urllib.request.Request('http://www.xicidaili.com/nn/{}'.format(page_num), headers=headers) # 构造request请求

response = urllib.request.urlopen(req) # 发送请求

html = response.read()

html = html.decode('utf-8')

# print(html)

# 解析页面

proxy_list = []

selector = lxml.etree.HTML(html)

rows = selector.xpath('//*[@id="ip_list"]//tr')

rows_total = len(rows)

row_xpath_head = '//*[@id="ip_list"]//tr['

row_ip_xpath_tail = ']/td[2]/text()'

row_port_xpath_tail = ']/td[3]/text()'

for i in range(1, rows_total):

ip_xpath = row_xpath_head + str(i+1) + row_ip_xpath_tail

port_xpath = row_xpath_head + str(i+1) + row_port_xpath_tail

ip = selector.xpath(ip_xpath)[0]

port = selector.xpath(port_xpath)[0]

ip_port = ip + ':' + port

proxy_list.append(ip_port)

return proxy_list

# 检测代理ip是否可用

def test_proxy_ip_port(proxy_ip_port):

print('当前代理ip:{}'.format(proxy_ip_port))

ip_port = proxy_ip_port.split(':')

ip = ip_port[0]

port = ip_port[1]

# 用telnet来验证ip是否可用

try:

telnetlib.Telnet(ip, port, timeout=10)

except:

return False

else:

return True

# 把有效的ip写入本地

def write_ip(proxy_ip):

with open('./ip.txt', 'a') as f:

f.write(proxy_ip + '\n')

# 删除文件

def del_file():

file_path = './ip.txt'

if os.path.exists(file_path):

os.remove(file_path)

def run():

del_file()

proxy_ip_port_list = []

for i in range(1, 6): # 前5页

proxy_ip_port_list += get_proxy(i)

for i in range(100): # 一页有100条

proxy_ip_port = proxy_ip_port_list[i]

is_valid = test_proxy_ip_port(proxy_ip_port)

print(is_valid)

if is_valid:

# 写入ip到本地

write_ip(proxy_ip_port)

if __name__ == '__main__':

run()

希望本文所述对大家Python程序设计有所帮助。

python ip代理池_python实现ip代理池功能示例相关推荐

  1. python读取json配置文件_Python简单读取json文件功能示例

    本文实例讲述了Python简单读取json文件功能.分享给大家供大家参考,具体如下: read_json.json: { "rule":{ "namespace" ...

  2. python清理微信好友_Python实现清理微信僵尸粉功能示例【基于itchat模块】

    本文实例讲述了Python实现清理微信僵尸粉功能.分享给大家供大家参考,具体如下: 原理 通过Pyhton调用itchat模块登录网页版微信,给你所有好友发送特殊符号,对方收不到这个特殊符号,只要有人 ...

  3. python 邮件服务器地址_python实现的接收邮件功能示例【基于网易POP3服务器】

    本文实例讲述了python实现的接收邮件功能.分享给大家供大家参考,具体如下: 一 简介 本代码实现从网易POP3服务器接收邮件 二 代码 import poplib import re import ...

  4. python扫描端口脚本_Python实现的端口扫描功能示例

    本文实例讲述了Python实现的端口扫描功能.分享给大家供大家参考,具体如下: 一 代码 import sys import socket import multiprocessing def por ...

  5. python编写科学计算器_Python实现的科学计算器功能示例

    本文实例讲述了Python实现的科学计算器功能.分享给大家供大家参考,具体如下: import wx import re import math # begin wxGlade: extracode ...

  6. python标签整理 微信_Python实现清理微信僵尸粉功能示例【基于itchat模块】

    本文实例讲述了Python实现清理微信僵尸粉功能.分享给大家供大家参考,具体如下: 原理 通过Pyhton调用itchat模块登录网页版微信,给你所有好友发送特殊符号,对方收不到这个特殊符号,只要有人 ...

  7. python ip代理池_Python 爬虫IP代理池的实现

    很多时候,如果要多线程的爬取网页,或者是单纯的反爬,我们需要通过代理IP来进行访问.下面看看一个基本的实现方法. 代理IP的提取,网上有很多网站都提供这个服务.基本上可靠性和银子是成正比的.国内提供的 ...

  8. python爬去新浪微博_Python爬虫爬取新浪微博内容示例【基于代理IP】

    Python爬虫爬取新浪微博内容示例[基于代理IP] 发布时间:2020-09-07 10:08:14 来源:脚本之家 阅读:120 本文实例讲述了Python爬虫爬取新浪微博内容.分享给大家供大家参 ...

  9. python 通过ip获取城市_python 根据ip获取地理位置

    !/usr/bin/python coding=utf-8 import dpkt import socket import pygeoip import optparse gi = pygeoip. ...

最新文章

  1. 股市复盘:本周交易数据分析
  2. 项目进度,你汇报清楚了么?
  3. ldap配置系列二:jenkins集成ldap
  4. Java 8:正在运行的CompletableFuture
  5. linux 系统文件目录颜色及特殊权限对应的颜色
  6. telnet 无法连接_Telnet 为什么不能以 root 身份登录系统?
  7. HDU2098 分拆素数和【筛选法】
  8. arcgis加载天地图_【arcgis地图实战】之天地图在线服务加载
  9. 架构师必备!英特尔携手Science联袂推出“架构师成长计划”,来自阿里云、AWS、百度、顺丰、平安等头部大厂专家分享实战经验...
  10. MMC-HVDC仿真模型,pscad柔性直流输电仿真mmc仿真模型,双端mmc模型,MMC为21电平NLM和均压控制
  11. uni-app 获取手机类型
  12. 吉林大学计算机研究生成绩计算方法,关于同济大学研究生成绩计算方法的说明...
  13. 【转】大地测量系统和参考框架
  14. vscode 插入多个光标,实现同时多行编辑的快捷键
  15. 浅谈手机系统——iOS
  16. 【软件项目管理 PMP】-- 100+真题考试题
  17. Web前端——移动端页面开发
  18. js jquery新窗口打开的几种方式
  19. 362 敲击计数器
  20. 【Google Play】APK 扩展包 ( 2021年09月02日最新处理方案 | 内部测试链接 | 安装 Google Play 中带 扩展文件 的 APK 安装包 | 验证下载的扩展文件 )

热门文章

  1. 考研数学一2015年真题整理
  2. 51Nod1916 购物
  3. linux 内核参数 杨,Linux 内核参数
  4. 隧道野蛮模式_基于虚拟隧道的IPsec -华三 MSR26 路由器对接Juniper SSG
  5. mysql索引查询 with_查找mysql中的低效索引
  6. bim推荐计算机配置,BIM建模推荐电脑配置清单 适合Revit软件的BIM建模电脑主机配置(2)...
  7. php mac 常用代码,在Mac上使用PHP exec shell(代码签名)重新分配IPA
  8. java写入文件编码格式为ansi_Java读取、写入文件如何解决乱码问题
  9. 用RAM存储器构造能够依次读取各存储单元内容的电路
  10. docker web程序本地化_Docker教程