ip代理池-基于mongodb数据库

代码用的python2.7,抓取xici免费代理,检测放入数据库中,为以后爬虫做准备。下面直接上代码

 1 #-*-encoding=utf-8-*-
 2
 3 import requests
 4 from lxml import etree
 5 import time
 6 import pymongo
 7 from multiprocessing import Pool
 8
 9
10 class Getproxy(object):
11     def __init__(self):
12         self.headers = {‘User-Agent‘:‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36‘}
13         self.url = ‘http://www.xicidaili.com/wt/‘
14         self.client = pymongo.MongoClient(‘localhost‘,27017)
15         self.xici = self.client[‘xici‘]
16         self.xiciipinfo =self.xici[‘xiciipinfo‘]
17         #self.removeip = ‘127.0.0.1‘ #第一次运行会检测该变量,因为下面只有检测失败了才会赋值
18
19     def getip(self,num):
20         #爬西祠所有代理,更新放入数据库
21         url = self.url + str(num)
22         wb_data = requests.get(url, headers= self.headers)
23         html = etree.HTML(wb_data.text)
24         # htmls = etree.tostring(html)
25         ips = html.xpath(‘//tr[@class="odd"]/td[2]/text()‘)
26         ports = html.xpath(‘//tr[@class="odd"]/td[3]/text()‘)
27         protocols = html.xpath(‘//tr[@class="odd"]/td[6]/text()‘)
28         areas = html.xpath(‘//tr[@class="odd"]/td[4]/a/text()‘)
29         for ip, port, protocol, area in zip(ips, ports, protocols, areas):
30             data = {
31                 ‘ip‘: ip,
32                 ‘port‘: port,
33                 ‘protocol‘: protocol,
34                 ‘area‘: area,
35             }
36             print data
37             #self.xiciipinfo.insert_one(data)
38             #if self.removeip != ip: #此处加一个判断,如果是下面检测过的不可用的ip,就不更新进入数据库,可以节省下面的检测时间
39             self.xiciipinfo.update({‘ip‘:ip}, {‘$set‘:data}, True)
40
41
42     def count(self,num):
43         for i in range(1,num):
44             self.getip(i)
45             time.sleep(2)
46
47
48     def dbclose(self):
49         self.client.close()
50
51
52     def getiplist(self):
53         # 将数据库内数据整理放入列表
54         ips = self.xiciipinfo.find()
55         proxylist = []
56         for i in ips:
57             b = "http" + "://" + i[‘ip‘] + ":" + i[‘port‘]
58             proxies = {"http": b}
59             # print proxies
60             proxylist.append(proxies)
61         # print proxylist
62         return proxylist
63
64     def iptest(self, proxy):
65         # 检测ip,并更新进入数据库,删掉不可用的ip
66         ip = proxy[‘http‘][7:].split(‘:‘)[0]
67         try:
68             requests.get(‘http://wenshu.court.gov.cn/‘, proxies=proxy, timeout = 6)
69         except:
70             print ‘field...............>>>>>>>>>>>>>>>>>>>>>>>>‘
71             #self.removeip = ip #赋值给类属性
72             self.xiciipinfo.remove({‘ip‘: ip})  # 用remove方法,将符合条件的删掉
73             print ‘remove it now.....{}‘.format(ip)
74         else:
75             print ‘<<<<<<<<<<<<<<<<<.............success‘
76             print proxy
77
78
79 if __name__ == ‘__main__‘:
80     pool = Pool()
81     proxy = Getproxy()
82     proxy.count(2)
83     iplist = proxy.getiplist()
84     map(proxy.iptest, iplist)
85     proxy.dbclose()


ip代理池-基于mongodb数据库

时间: 2024-10-12 02:25:54

ip代理池-基于mongodb数据库的相关文章

python开源IP代理池--IPProxys

今天博客开始继续更新,谢谢大家对我的关注和支持.这几天一直是在写一个ip代理池的开源项目.通过前几篇的博客,我们可以了解到突破反爬虫机制的一个重要举措就是代理ip.拥有庞大稳定的ip代理,在爬虫工作中将起到重要的作用,但是从成本的角度来说,一般稳定的ip池都很贵,因此我这个开源项目的意义就诞生了,爬取一些代理网站提供的免费ip(虽然70%都是不好使的,但是扛不住量大,网站多),检测有效性后存储到数据库中,同时搭建一个http服务器,提供一个api接口,供大家的爬虫程序调用. 好了,废话不多说,咱

scrapy_随机ip代理池

什么是ip代理? 我们电脑访问网站,其实是访问远程的服务器,通过ip地址识别是那个机器访问了服务器,服务器就知道数据该返回给哪台机器,我们生活中所用的网络是局域网,ip是运营商随机分配的,是一种直接访问服务器的方式 代理服务器是一种间接方式,本地机器访问ip代理服务器,ip代理服务器帮我们发起服务请求,然后代理服务器接收数据返回给本机,由于中间有了层ip代理服务器,访问的速度和稳定性取决于代理服务器的性能 常规访问: 用户 >> ip  >> 服务器 代理访问: 用户用户 >

Python爬虫之ip代理池

可能在学习爬虫的时候,遇到很多的反爬的手段,封ip 就是其中之一. 对于封IP的网站.需要很多的代理IP,去买代理IP,对于初学者觉得没有必要,每个卖代理IP的网站有的提供了免费IP,可是又很少,写了个IP代理池 .学习应该就够了 ip代理池: 1,在各大网站爬去免费代理ip2,检查ip可用 可用存入数据库1和23,在数据库1中拿出少量代理ip存入数据库2(方便维护)4,定时检查数据库1和数据库2的代理数量,以及是否可用5,调用端口 1,在各大网站爬去免费代理ip 1 def IPList_61

Flask开发系列之Flask+redis实现IP代理池

Flask开发系列之Flask+redis实现IP代理池 6.11-6.15号完善... 简易实现版 import requests import re import time import redis from bloom_filter import BloomFilter import ast pool = redis.ConnectionPool(host='localhost',password='xxx', port=6379, decode_responses=True) r = r

[爬虫]一个易用的IP代理池

一个易用的IP代理池 - stand 写爬虫时常常会遇到各种反爬虫手段, 封 IP 就是比较常见的反爬策略 遇到这种情况就需要用到代理 IP, 好用的代理通常需要花钱买, 而免费的代理经常容易失效, 所以就需要自己搭建 IP 代理池, 来获取免费高效的代理 IP. 下面介绍一个自己写的 IP 代理池, 欢迎 star lin-zone/stand 安装 pip install stand 启动 stand 启动后, 爬虫会从代理网站抓取 IP, 并将数据保存在名为 stand.db 的 SQLi

小白也能做的IP代理池,好久没更新了,不知道你们想看什么呢!

IP代理池制作 GitHub主页: https://github.com/hfldqwe/ 使用工具: ip代理抓取: requests 后台搭建: Django+Redis 代理检测: ip地址查询:http://ip.chinaz.com/ 这个网站提供的接口:http://ip.chinaz.com/getip.aspx 代理抓取地址: 西刺代理:http://www.xicidaili.com/nn/ + num 设计思路 爬取代理ip,获取如下信息: IP地址 端口 服务器地址 类型

【Python3爬虫】Scrapy使用IP代理池和随机User-Agent

在使用爬虫的时候,有时候会看到由于目标计算机积极拒绝,无法连接...,这就是因为我们的爬虫被识别出来了,而这种反爬虫主要是通过IP识别的,针对这种反爬虫,我们可以搭建一个自己的IP代理池,然后用这些IP去访问网站. 新建一个proxies.py,实现我们自己的代理池,主要模块有获取模块.验证模块和存储模块. (1)获取模块:爬取网上的免费代理,这一部分我就写了个爬取西刺代理的代码,除了获取网上的代理,还要对代理池中代理进行清洗,因为有些代理会失效: (2)验证模块:验证我们的代理是否可用,如果不

python爬虫+多线程+多进程+构建IP代理池

目标网站:静听网 网站url:http://www.audio699.com/ 目标文件:所有在线听的音频文件 附:我有个喜好就是晚上睡觉听有声书,然而很多软件都是付费才能听,免费在线网站虽然能听,但是禁ip很严重,就拿静听网来说,你听一个在线音频,不能一个没听完就点击下一集,甚至不能快进太快,否则直接禁你5分钟才能再听,真的是太太讨厌了... 于是我就想用爬虫给它爬下来存储本地就nice了. 我把我的大概分析步骤分享出来. 步骤1: 我查看静听网网页url有一个规律,基网址是http://ww

使用IP代理池和用户代理池爬取糗事百科文章

简单使用IP代理池和用户代理池的爬虫 import re import random import urllib.request as urlreq import urllib.error as urlerr #用户代理池 uapools = [ "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0", "Mozilla/5.0 (Windows NT 10.0; Win64; x