考虑这种情况,我想经常抓取网站,但我的 IP 地址在某天/限制后被阻止。
那么,如何动态更改我的IP地址或任何其他想法?
考虑这种情况,我想经常抓取网站,但我的 IP 地址在某天/限制后被阻止。
那么,如何动态更改我的IP地址或任何其他想法?
使用Scrapy的方法将使用两个组件,RandomProxy
和RotateUserAgentMiddleware
.
修改DOWNLOADER_MIDDLEWARES
如下。您必须将新组件插入settings.py
:
DOWNLOADER_MIDDLEWARES = {
'scrapy.contrib.downloadermiddleware.retry.RetryMiddleware': 90,
'tutorial.randomproxy.RandomProxy': 100,
'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 110,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware' : None,
'tutorial.spiders.rotate_useragent.RotateUserAgentMiddleware' :400,
}
您可以使用scrapy-proxies
. 该组件将使用列表中的随机代理处理 Scrapy 请求,以避免 IP 封禁并提高爬取速度。
您可以通过快速的 Internet 搜索建立您的代理列表。list.txt
根据请求的 url 格式复制文件中的链接。
对于每个scrapy请求,将从您预先定义的列表中使用随机用户代理:
class RotateUserAgentMiddleware(UserAgentMiddleware):
def __init__(self, user_agent=''):
self.user_agent = user_agent
def process_request(self, request, spider):
ua = random.choice(self.user_agent_list)
if ua:
request.headers.setdefault('User-Agent', ua)
# Add desired logging message here.
spider.log(
u'User-Agent: {} {}'.format(request.headers.get('User-Agent'), request),
level=log.DEBUG
)
# the default user_agent_list composes chrome,I E,firefox,Mozilla,opera,netscape
# for more user agent strings,you can find it in http://www.useragentstring.com/pages/useragentstring.php
user_agent_list = [
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
]
更多细节在这里。
您可以尝试使用代理服务器来防止被阻止。有提供工作代理的服务。我试过的最好的是https://gimmeproxy.com - 他们经常检查代理的各种参数。
为了从他们那里获得代理,您只需提出以下请求:
https://gimmeproxy.com/api/getProxy
他们将提供带有所有代理数据的 JSON 响应,您以后可以根据需要使用这些数据:
{
"supportsHttps": true,
"protocol": "socks5",
"ip": "179.162.22.82",
"port": "36915",
"get": true,
"post": true,
"cookies": true,
"referer": true,
"user-agent": true,
"anonymityLevel": 1,
"websites": {
"example": true,
"google": false,
"amazon": true
},
"country": "BR",
"tsChecked": 1517952910,
"curl": "socks5://179.162.22.82:36915",
"ipPort": "179.162.22.82:36915",
"type": "socks5",
"speed": 37.78,
"otherProtocols": {}
}
您可以将它与 Curl 一起使用:
curl -x socks5://179.162.22.82:36915 http://example.com
如果你使用 R,你可以通过 TOR 进行网络爬取。我认为 TOR 每 10 分钟(?)自动重置其 IP 地址。我认为有一种方法可以强制 TOR 以更短的时间间隔更改 IP,但这对我不起作用。相反,您可以设置 TOR 的多个实例,然后在独立实例之间切换(在这里您可以找到有关如何设置 TOR 的多个实例的很好的解释:https ://tor.stackexchange.com/questions/2006/how-使用不同 ips 运行多个浏览器)
之后,您可以在 R 中执行以下操作(使用独立 TOR 浏览器的端口和用户代理列表。每次调用“getURL”函数时,都会循环访问端口/用户代理列表)
library(RCurl)
port <- c(a list of your ports)
proxy <- paste("socks5h://127.0.0.1:",port,sep="")
ua <- c(a list of your useragents)
opt <- list(proxy=sample(proxy,1),
useragent=sample(ua,1),
followlocation=TRUE,
referer="",
timeout=timeout,
verbose=verbose,
ssl.verifypeer=ssl)
webpage <- getURL(url=url,.opts=opt)
某些 VPN 应用程序允许您以设定的时间间隔(例如:每 2 分钟)自动将您的 IP 地址更改为新的随机 IP 地址。两者都是HMA!Pro VPN和 VPN4ALL 软件支持此功能。
关于 VPN 的警告词,请仔细检查他们的条款和条件,因为使用它们进行抓取违反了他们的用户政策(Astrill 就是一个这样的例子)。我尝试了一个抓取工具并锁定了我的帐户
如果您有公共 IP。将它们添加到您的界面上,如果您使用的是 Linux,请使用 Iptables 来切换这些公共 IP。
两个 IP 的 iptables 示例规则
iptables -t nat -A POSTROUTING -m statistic --mode random --probability 0.5 -j SNAT --to-source 192.168.0.2
iptables -t nat -A POSTROUTING -m statistic --mode random --probability 0.5 -j SNAT --to-source 192.168.0.3
如果您有 4 个 IP,那么概率将变为 0.25。
您还可以通过简单的步骤创建自己的代理。
这些规则将允许代理服务器切换其传出 IPS。