【问题标题】:Failure to change identify using Tor when scraping google抓取谷歌时无法使用 Tor 更改身份
【发布时间】:2017-06-30 06:42:20
【问题描述】:

我正在尝试自动化谷歌搜索,但不幸的是我的 IP 被阻止了。经过一番搜索,似乎使用Tor 可以动态地为我获取一个新IP。但是,将以下代码块添加到我现有的代码中后,即使在新 IP 下,谷歌仍会阻止我的尝试。所以我想知道我的代码有什么问题吗?

代码(基于this

from TorCtl import TorCtl
import socks
import socket
import urllib2

socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)


__originalSocket = socket.socket

def newId():
    ''' Clean circuit switcher

    Restores socket to original system value.
    Calls TOR control socket and closes it
    Replaces system socket with socksified socket
    '''
    socket.socket = __originalSocket
    conn = TorCtl.connect(controlAddr="127.0.0.1", controlPort=9051, passphrase="mypassword")
    TorCtl.Connection.send_signal(conn, "NEWNYM")
    conn.close()
    socket.socket = socks.socksocket

## generate a new ip
newId()

### verify the new ip
print(urllib2.urlopen("http://icanhazip.com/").read())

## run my scrape code
google_scrape()
新的错误信息
<br>Sometimes you may be asked to solve the CAPTCHA if you are using advanced terms that robots are known to use, or sending requests very quickly.
</div>

IP address: 89.234.XX.25X<br>Time: 2017-02-12T05:02:53Z<br>

【问题讨论】:

    标签: python sockets tor data-extraction


    【解决方案1】:

    Google(以及许多其他网站,例如受 Cloudflare “保护”的网站)通过 Tor 出口节点的 IP 地址过滤来自 TOR 的请求。他们可以这样做是因为 Tor 出口节点的 IP 地址列表是public

    因此更改您的身份 - 这反过来会改变您的 Tor 电路,并可能导致使用不同的出口节点,从而使用不同的 IP(尽管不能保证后两者) - 不会对该块起作用。

    对于您的用例,您可能会考虑使用 VPN 而不是 Tor,因为它们的 IP 地址不太可能被阻止。特别是如果您使用非免费 VPN。

    【讨论】:

    • 感谢您的建议。但这是否意味着我需要拥有多个 VPN?看起来如果我不在 quieres 之间暂停我的代码,它很快就会被阻止......
    • 在这种情况下,可能是的。您也可以考虑在查询之间暂停您的代码,或者根据 Google ToS 执行其他操作。
    • 感谢先生的建议!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    相关资源
    最近更新 更多