python爬虫之抓取代理服务器IP 并筛选可用稳定的ip

***前言:***作为一名爬手,爬取各大网站资源,经常会遇到的额问题就是ip访问过于频繁,被网站封ip,影响爬取工作。
解决方法一为:用sleep函数,设置爬取频率,但是缺点就是慢,尤其对于大量的数据获取不合适。
解决的另一方法就是代理ip,用匿名ip爬取资源。
但是目前网络上免费的可用代理ip特别不稳定,难以直接使用。
本篇文章便是解决ip不稳定,不可用,的一种简单小方法。

配置:python2.7
import requests
import os
import sys
import urllib
import random
from bs4 import BeautifulSoup

get_html()函数:得到ip网站网页信息
def get_html():
global index
src_url = ‘http://www.xicidaili.com/nt/
url = src_url + str(index)
if index == 0:
url = src_url

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'
}
re = requests.get(url, headers=headers)
re = re.content
return re

find_ip()函数用beautifulsoup筛选出ip
def find_ip():
html = get_html()
list = []
# print type(html)
soup = BeautifulSoup(html, ‘html.parser’)
# print type(soup)
ips = soup.findAll(‘tr’)
for x in range(1, len(ips)):
tds = ips[x].findAll(‘td’)
ip_temp = ‘http://’ + tds[1].contents[0] + ‘:’ + tds[2].contents[0]
print ‘发现_ip:’, ip_temp
# print type(ip_temp)
list.append(ip_temp)
print “一共发现%d 个ip” % len(list)
return list

validateIp(proxy)函数检验单个IP的可用性
def validateIp(proxy):
proxy_temp = {“http”: proxy}
# print type(proxy_temp)
url = ‘http://basic.10jqka.com.cn/300001/equity.html
try:
response = requests.get(url, proxies=proxy_temp, timeout=3)
return True
except Exception as e:
return False
filterValidProxyIp(list)函数将可用ip存入列表保存
def filterValidProxyIp(list):
num=0 #a表示可用ip数目
a=0
print(‘开始过滤可用ip 。。。’)
validList = []
for ip in list:
# print ‘判断前的格式为:’,type(ip)
if validateIp(ip):
a=a+1
num = num + 1
print a,num
print ‘第 %d个 %s 可用’ % (num, str(ip))
# print ‘判断后的格式为:’,type(ip)
validList.append(ip)
# fp = open(‘useful_ip.txt’, ‘a+’)
# fp.write(ip)
# fp.write(’\n’)
# fp.flush()
# fp.close()
else:
num = num + 1
print’第%d 个 %s 无效’ % (num, str(ip))
# print type(ip)
print “ip可用率为:”, format(float(a) / float(num), ‘.2f’)
return validList

main():函数进行多次调用filterValidProxyIp(list)函数,多次筛选可用ip,观察ip可用率。
def main():
global index
a=0
num = 0
index = 0
list = find_ip()
# print list #全部提取ip未guolv
print “开始第一次判断:”
validlist = filterValidProxyIp(list)
# proxies_list=[]
# print validlist
print “开始第二次判断:”
validlist = filterValidProxyIp(validlist)
print “开始第三次判断:”
validlist = filterValidProxyIp(validlist)
print “开始第四次判断:”
validlist = filterValidProxyIp(validlist)
print “开始第五次判断:”
validlist = filterValidProxyIp(validlist)
for proxy in validlist:
proxies_list = []
proxy = {“http”: proxy}
proxies_list.append(prox[可以看到ip可用率为1]y)
return proxies_list

新手,有问题可以互相学习。获取源码可加我qq:1041678920.
注明获取源码!![可以看到ip可用率为1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值