如何通过代理使用Python进行wget调用?
我尝试使用这个脚本 pdfmeat 来从谷歌学术获取论文的数据。
这个脚本在我的电脑上运行得很好,但当我把它放到我的服务器上时却没有结果。我发现很可能是我的服务器被谷歌学术列入了黑名单,因为我遇到了一个错误(需要解决验证码的重定向):
$ wget scholar.google.com
--2011-08-08 04:52:19-- http://scholar.google.com/
Resolving scholar.google.com... 72.14.204.147, 72.14.204.99, 72.14.204.103, ...
Connecting to scholar.google.com|72.14.204.147|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://www.google.com/sorry/?continue=http://scholar.google.com/ [following]
--2011-08-08 04:52:24-- http://www.google.com/sorry/?continue=http://scholar.google.com/
Resolving www.google.com... 74.125.93.147, 74.125.93.99, 74.125.93.103, ...
Connecting to www.google.com|74.125.93.147|:80... connected.
HTTP request sent, awaiting response... 503 Service Unavailable
2011-08-08 04:52:24 ERROR 503: Service Unavailable.
然后我发现wget有一个选项可以用来设置代理,命令是 --execute "http_proxy=urltoproxy"。我照做了
wget -e "http_proxy=oneHttpProxy" scholar.google.com
结果我成功保存了谷歌学术的index.html文件。
接着我尝试用pdfmeat.py做同样的事情,但还是没有结果。
这是代码:
def getWebdata(self, link, referer='http://scholar.google.com'):
useragent = 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.8) Gecko/20100214 Ubuntu/9.10 (karmic) Firefox/3.5.8'
c_web = 'wget --execute "http_proxy=oneHttpProxy" -qO- --user-agent="%s" --load-cookies="%s" "%s" --referer="%s"' % (useragent, WGET_COOKIEFILE, link, referer)
c_out = os.popen(c_web)
c_txt = c_out.read()
c_out.close()
if re.search("We're sorry", c_txt) or re.search("please type the characters", c_txt):
self.logger.critical("scholar captcha")
if not self.options.quiet:
print "PDFMEAT: scholar captcha!"
sys.exit()
self.logger.debug("getwebdata excerpt: %s" % (re.sub("\n", " ", c_txt[0:255])))
self.queryLog.append("getwebdata excerpt: %s" % (re.sub("\n", " ", c_txt[0:255])))
return c_txt
这个脚本使用了os模块。原来的功能是没有为wget加上 --execute 这个选项的。
谢谢大家的帮助!
1 个回答
0
你有没有试过直接设置一下 http_proxy 这个环境变量呢?
也就是说:
$ export http_proxy="oneHttpProxy"
$ python pdfmeat.py ....