爬取代理IP,并判断是否可用。
# -*- coding:utf-8 -*-
from gevent import monkey
monkey.patch_all() import urllib2
from gevent.pool import Pool import requests
import re class SpiderProxy:
def __init__(self):
self.headers = {
"Host": "www.xicidaili.com",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:47.0) Gecko/20100101 Firefox/47.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.5",
"Accept-Encoding": "gzip, deflate",
"Referer": "http://www.xicidaili.com/nn/",
}
self.url = 'http://www.xicidaili.com/nn/'
self.proxy_list = []
self.re_ip = re.compile(r'(?<![\.\d])(?:\d{1,3}\.){3}\d{1,3}(?![\.\d])')
self.re_port = re.compile(r'<td>(\d+)</td>') def get_pagesource(self):
''' 取得所有1-n页上的代理IP'''
try:
num = int(raw_input('please input 1-'))
for i in range(1, num + 1):
pageurl = self.url + str(i)
req = requests.session()
html = req.get(pageurl, headers=self.headers)
ip_list = self.re_ip.findall(html.text)
port_list = self.re_port.findall(html.text)
proxy_zip = zip(ip_list, port_list)
for i in proxy_zip:
self.proxy_list.append({'http':i[0] + ':' + i[1]})
except ValueError:
print 'please input a num!'
return self.proxy_list class IsActiveProxyIP:
def __init__(self):
self.is_active_proxy_ip = [] def probe_proxy_ip(self, proxy_ip):
proxy = urllib2.ProxyHandler(proxy_ip)
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
try:
html = urllib2.urlopen('http://1212.ip138.com/ic.asp')
if html:
self.is_active_proxy_ip.append(proxy_ip)
return True
else:
return False
except Exception as e:
return False if __name__ == '__main__':
Proxy = SpiderProxy()
proxy_list = Proxy.get_pagesource()
proxy_isactive = IsActiveProxyIP()
pool = Pool(20)
pool.map(proxy_isactive.probe_proxy_ip, proxy_list)
with open(r'E:\python_demo\proxy_ip.txt', 'wb') as f:
for ip in proxy_isactive.is_active_proxy_ip:
ip = str(ip)
f.write(ip[11:-2] + '\n')
print 'file successed written'
爬取代理IP,并判断是否可用。的更多相关文章
- python爬虫爬取代理IP
# #author:wuhao # #--*------------*-- #-****#爬取代理IP并保存到Excel----#爬取当日的代理IP并保存到Excel,目标网站xicidaili.co ...
- 使用Python爬取代理ip
本文主要代码用于有代理网站http://www.kuaidaili.com/free/intr中的代理ip爬取,爬虫使用过程中需要输入含有代理ip的网页链接. 测试ip是否可以用 import tel ...
- 自动爬取代理IP例子
import time import json import datetime import threading import requests from lxml import etree from ...
- python代理池的构建3——爬取代理ip
上篇博客地址:python代理池的构建2--代理ip是否可用的处理和检查 一.基础爬虫模块(Base_spider.py) #-*-coding:utf-8-*- ''' 目标: 实现可以指定不同UR ...
- python 批量爬取代理ip
import urllib.request import re import time import random def getResponse(url): req = urllib.request ...
- 爬取代理IP
现在爬虫好难做啊,有些网站直接封IP,本人小白一个,还没钱,只能找免费的代理IP,于是去爬了西刺免费代理,结果技术值太低,程序还没调试好, IP又被封了... IP又被封了... IP又被封了... ...
- 爬虫爬取代理IP池及代理IP的验证
最近项目内容需要引入代理IP去爬取内容. 为了项目持续运行,需要不断构造.维护.验证代理IP. 为了绕过服务端对IP 和 频率的限制,为了阻止服务端获取真正的主机IP. 一.服务器如何获取客户端IP ...
- 原创:Python爬虫实战之爬取代理ip
编程的快乐只有在运行成功的那一刻才知道QAQ 目标网站:https://www.kuaidaili.com/free/inha/ #若有侵权请联系我 因为上面的代理都是http的所以没写这个判断 代 ...
- Python爬取代理ip
# -*- coding:utf-8 -*- #author : willowj import urllib import urllib2 from bs4 import BeautifulSoup ...
随机推荐
- DozerBeanMapper 配置
applicationContext.xml <bean id="mapper" class="org.dozer.spring.DozerBeanMapperFa ...
- Batch the files in the directory
#!/bin/bash #sourceFolder = /home/bigdatagfts/pl62716/refdata #targetFolder = /home/bigdatagfts/pl62 ...
- Python3.5 调用Ansible 执行命令
ansible.py #!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import tempfile from collections ...
- mysql5.5.28.tar.gz编译安装操作笔记
1.yum安装依赖包 yum install wget gcc gcc-c++ make cmake ncurses-devel libtool zilib-devel -y 2.创建mysql用 ...
- zk小结
一 ZooKeeper功能 1.文件系统 2.通知机制 二 Zookeeper文件系统 每个子目录项都被称作为znode,和文件系统一样,我们能够自由的增加.删除znode,在一个znode下增加.删 ...
- 17.NET Core WebApi跨域问题
官方说明 CORS means Cross-Origin Resource Sharing. Refer What is "Same Origin" Part Detailed P ...
- qrcode.js的识别解析二维码图片和生成二维码图片
qrcode只通过前端就能生成二维码和解析二维码图片, 首先要引入文件qrcode.js,下载地址为:http://static.runoob.com/download/qrcodejs-04f46c ...
- 根据要求完成表单以及使用servlet处理表单 任务要求 掌握Servlet输出表单和接收表单数据(多值组件的读取)。
Servlet代码: package com.test; import java.io.IOException; import java.io.PrintWriter; import java.uti ...
- 获取hudson持续构建编译结果的一种方法
作者:朱金灿 来源:http://blog.csdn.net/clever101 很多时候使用hudson结合VisualStudio进行持续构建后需要获取持续构建的编译结果,通过编译结果来知道哪些项 ...
- C#中描述mssql中DateTime的最小值、最大值
首先引用System.Data.SqlTypes 最小值:SqlDateTime.MinValue.Value 最大值:SqlDateTime.MaxValue.Value