服务器可以发现我用python脚本访问它吗?如果是这样,如何隐藏它?

时间:2012-04-23 17:41:03

标签: python urllib2

我正在尝试使用urllib2库阅读网站。 这是我的剧本:

import urllib2

# Get a file-like object for the Python Web site's home page.

def wikitranslate(word):
    translation = ''
    pageURL = ''
    opener = urllib2.build_opener()
    f = opener.open("http://fr.wikipedia.org/w/api.php?action=opensearch&search=" + re.sub(' ', '%20', word.rstrip()))
    # Read from the object, storing the page's contents in 's'.
    s = f.read()

我想知道服务器如何接收这些请求,以及它是否能识别出它是由python脚本而不是浏览器访问的事实。

如果是这样,有没有办法隐藏它?

2 个答案:

答案 0 :(得分:2)

url请求标头中的User-Agent字段向Web服务器描述了您用来访问该站点的浏览器和系统,因此将自己隐藏或标识为python脚本请求的最佳方法是更改字段。

request = urllib2.Request(url,None)
request.add_header('User-Agent','Python Script') # Or 'Not a python script'

默认情况下,使用urllib2

时,此字段会留空

所以,如果你想隐瞒你的代理人,就不要声明它,或者你可以强行宣称它是欺骗性的东西

request.add_header('User-Agent','None of your business.')

答案 1 :(得分:1)

当然它是可检测的,但通常不是直接的。例如,它可以查看用户代理的行为(例如,每小时访问同一个文件)或尝试加载iframe + img + javascript来检查您是否真的是一个webbrowser。它可以提供一个必须在继续之前完成的验证码,并且有许多不同的技术可以阻止外部脚本访问。

但是如果你看一个单一的请求,就会发现它是一个发出请求的脚本要困难得多。事实上,它可以完美地模仿浏览器。只是不是背后的用户。

然而,更大的问题是,你要做的是否正确。有些网站不希望脚本访问它们。