一:IP代理池
从技术上说,IP 地址是可以通过发送数据包进行伪装的,就是分布式拒绝服务攻击技术(Distributed Denial of Service,DDoS),攻击者不需要关心接收的数据包(这样发送请求的时候就可以使用假 IP 地址)。但是网络数据采集是一种需要关心服务器响应的行为,所以我们认为 IP 地址是不能造假的。
如果一个固定的ip在短暂的时间内,快速大量的访问一个网站,那自然会引起注意,管理员可以通过一些手段把这个ip给封了,爬虫程序自然也就做不了什么了。
解决方法:
比较成熟的方式是:IP代理池
简单的说,就是通过ip代理,从不同的ip进行访问,这样就不会被封掉ip了。
可是ip代理的获取本身就是一个很麻烦的事情,网上有免费和付费的,但是质量都层次不齐。如果是企业里需要的话,可以通过自己购买集群云服务来自建代理池。
这里实现了一个简单的代理转换,代码如下:
# -*- coding: utf-8 -*-
#生成可用代理ip#python版本2.7
from bs4 import BeautifulSoup
import httplib
import threading
import sys
import time
import random
reload(sys)
sys.setdefaultencoding('utf-8')
inFile = open('proxy.txt')
outFile = open('verified.txt', 'w')
lock = threading.Lock()
# 利用一个正则就可以直接采集代理IP的站点
PROXY_SITES_BY_REGX = {
'urls': [
'http://ab57.ru/downloads/proxyold.txt',
'http://www.proxylists.net/http_highanon.txt',
'http://www.atomintersoft.com/high_anonymity_elite_proxy_list',
'http://www.atomintersoft.com/transparent_proxy_list',
'http://www.atomintersoft.com/anonymous_proxy_list',
'http://www.proxy4free.info/',
'http://tools.rosinstrument.com/proxy/plab100.xml',
'https://www.rmccurdy.com/scripts/proxy/good.txt',
'http://proxy.ipcn.org/proxylist2.html',
'http://best-proxy.ru/feed',
'http://www.proxylists.net/?HTTP',
'http://uks.pl.ua/script/getproxy.php?last'
],
'proxy_regx': r"