diff --git a/scrapy/tests/test_utils_response.py b/scrapy/tests/test_utils_response.py index 6cde6332c..9e75a7c7f 100644 --- a/scrapy/tests/test_utils_response.py +++ b/scrapy/tests/test_utils_response.py @@ -3,7 +3,8 @@ import unittest import urlparse from scrapy.http import Response, TextResponse, HtmlResponse -from scrapy.utils.response import body_or_str, response_httprepr, open_in_browser +from scrapy.utils.response import body_or_str, response_httprepr, open_in_browser, \ + get_meta_refresh __doctests__ = ['scrapy.utils.response'] @@ -55,5 +56,21 @@ class ResponseUtilsTest(unittest.TestCase): self.assertRaises(TypeError, open_in_browser, Response(url, body=body), \ debug=True) + def test_get_meta_refresh(self): + r1 = HtmlResponse("http://www.example.com", body=""" + + Dummy + blahablsdfsal& + """) + r2 = HtmlResponse("http://www.example.com", body=""" + + Dummy + blahablsdfsal& + """) + self.assertEqual(get_meta_refresh(r1), (5.0, 'http://example.org/newpage')) + self.assertEqual(get_meta_refresh(r2), (None, None)) + if __name__ == "__main__": unittest.main() diff --git a/scrapy/utils/response.py b/scrapy/utils/response.py index 668e344f0..daa3a62bc 100644 --- a/scrapy/utils/response.py +++ b/scrapy/utils/response.py @@ -4,6 +4,7 @@ scrapy.http.Response objects """ import os +import re import weakref import webbrowser import tempfile @@ -12,7 +13,6 @@ from twisted.web import http from twisted.web.http import RESPONSES from w3lib import html -from scrapy.xlib.BeautifulSoup import BeautifulSoup from scrapy.http import Response, HtmlResponse def body_or_str(obj, unicode=True): @@ -34,11 +34,13 @@ def get_base_url(response): response.encoding) return _baseurl_cache[response] +_noscript_re = re.compile(u'', re.IGNORECASE | re.DOTALL) _metaref_cache = weakref.WeakKeyDictionary() def get_meta_refresh(response): """Parse the http-equiv refrsh parameter from the given response""" if response not in _metaref_cache: text = response.body_as_unicode()[0:4096] + text = _noscript_re.sub(u'', text) _metaref_cache[response] = html.get_meta_refresh(text, response.url, \ response.encoding) return _metaref_cache[response]