Python和Google App Engine专家,
我想检索位于此链接的道明银行按揭利率网站:
“http://tdbank.mortgagewebcenter.com/Default.asp”
我今天晚上通过教程学习了Python和Google App Engine,我坚持认为可能是GZIP问题。
理想情况下,我希望有人能够修复我在下面粘贴的代码。或者提供正确的代码(如果这更容易),以成功接收此网页并能够在python / google应用引擎中解析它。
尝试1 - URLFETCH
import webapp2
import gzip
import StringIO
from google.appengine.api import users
from google.appengine.api import urlfetch
from BeautifulSoup import BeautifulSoup
class MainPage(webapp2.RequestHandler):
def get(self):
url = "http://tdbank.mortgagewebcenter.com/Default.asp"
result = urlfetch.fetch(url=url,headers={'User-Agent': 'Mozilla/5.0',
'Accept': 'text/html',
'Accept-Language': 'en-us,en',
'Accept-Encoding': 'gzip',
'Connection': 'keep-alive'})
f = StringIO.StringIO(result.content)
c = gzip.GzipFile(fileobj=f)
content = c.read()
self.response.out.write(content)
app = webapp2.WSGIApplication([('/', MainPage)],
debug=True)
尝试2 - URLLIB2
import cgi
import webapp2
import gzip
import StringIO
import urllib2
import httplib
from BeautifulSoup import BeautifulSoup
class MainPage(webapp2.RequestHandler):
def get(self):
httplib.HTTPConnection.debuglevel = 1
url = urllib2.Request('http://tdbank.mortgagewebcenter.com/Default.asp')
url.add_header('Accept-encoding', 'gzip')
url.add_header('User-Agent', 'Mozilla/5.0')
opener = urllib2.build_opener()
f = opener.open(url)
compresseddata = f.read()
compressedstream = StringIO.StringIO(compresseddata)
c = gzip.GzipFile(fileobj=compressedstream)
content = c.read()
self.response.out.write(content)
app = webapp2.WSGIApplication([('/', MainPage)],
debug=True)
YAML文件:
application: fimrates
version: 2
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /.*
script: fimrates.app
在这两种情况下,我的浏览器都会被重定向到
http://localhost:8080/Default.asp?bhjs=1&bhqs=1
如果我将我想要阅读的网址更改为其他网页(例如www.google.com),则输出会正确打印。
提前感谢您的帮助,我真的很感激。
-Todd
答案 0 :(得分:0)
您发布的网址在javascript中进行了重定向。获得最终页面的唯一方法是,如果您要模拟浏览器,那么GAE就无法实现IMO。
我通过curl -L http://tdbank.mortgagewebcenter.com/Default.asp
下载了html,它给了我“不支持的浏览器”。这意味着此页面会在javascript中检查浏览器的类型。
答案 1 :(得分:0)
在你的fetch命令中,尝试添加参数“follow_redirects = True”。