No entiendo muy bien como pruebas LWPCookieJar, comprendo que el scrapertools esté todo como un poco remezclao y con code se repite que invita a simplificarlo. Básicamente creo que este hilo es más de función dowloadpage que del scrapertools. Personalmente sacaría todo lo relacionado con esta función y crearía un py requests para estas cosas y dejaba sólo en scrapertools las funciones que nos ahorren trabajo en el scraper.
Te voy a pegar una pequeña muestra que funciona bien en HDFull y W7 de lo que digo y de paso si te apetece y tienes tiempo intenta corregir el archivo de como se encajaría LWPCookieJar.
En HDFull tengo reemplazado todos los 'scrapertools.cache_page(' por 'requests.request_page(' y colocado 'from core import requests'. Evidentemente el code que te pego está guardado en core/requests.py
Código: Seleccionar todo
# -*- coding: utf-8 -*-
import os
import config
import urllib2
import cookielib
import StringIO
import gzip
import socket
DEBUG_LEVEL = True
def request_page( url, post=None, headers=[['User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0']], follow_redirects=True, timeout=socket.getdefaulttimeout(), get_headers=False, header_to_get=None ):
urlopen = urllib2.urlopen
Request = urllib2.Request
ficherocookies = os.path.join( config.get_data_path(), 'cookies.dat' )
cj = cookielib.MozillaCookieJar()
cj.set_policy( MyCookiePolicy() )
if os.path.isfile( ficherocookies ):
try: cj.load( ficherocookies, ignore_discard=True )
except: os.remove( ficherocookies )
if not follow_redirects:
opener = urllib2.build_opener( urllib2.HTTPHandler( debuglevel=DEBUG_LEVEL ), urllib2.HTTPCookieProcessor( cj ), NoRedirectHandler() )
else:
opener = urllib2.build_opener( urllib2.HTTPHandler( debuglevel=DEBUG_LEVEL ), urllib2.HTTPCookieProcessor( cj ) )
urllib2.install_opener( opener )
txheaders = dict( headers )
req = Request( url, post, txheaders )
try:
if timeout is None: handle=urlopen( req )
else:
deftimeout = socket.getdefaulttimeout()
socket.setdefaulttimeout( timeout )
handle = urlopen( req )
socket.setdefaulttimeout( deftimeout )
cj.save( ficherocookies, ignore_discard=True )
if handle.info().get('Content-Encoding') == 'gzip':
data = handle.read()
compressedstream = StringIO.StringIO( data )
gzipper = gzip.GzipFile( fileobj=compressedstream )
data = gzipper.read()
gzipper.close()
else: data = handle.read()
except urllib2.HTTPError, e:
data = e.read()
return data
info = handle.info()
data1=""
data2=""
if get_headers:
data1 = info
if header_to_get is not None:
data2 = None
for header in info:
if header == header_to_get.lower(): data2 = info[header]
if data1 != "" and data2 != "":
data = data, data1, data2
elif data1 != "":
data = data, data1
elif data2 != "":
data = data, data2
handle.close()
return data
class MyCookiePolicy(cookielib.DefaultCookiePolicy):
def set_ok(self, cookie, request):
return cookielib.DefaultCookiePolicy.set_ok(self, cookie, request)
def return_ok(self, cookie, request):
return cookielib.DefaultCookiePolicy.return_ok(self, cookie, request)
def domain_return_ok(self, domain, request):
return cookielib.DefaultCookiePolicy.domain_return_ok(self, domain, request)
def path_return_ok(self,path, request):
return cookielib.DefaultCookiePolicy.path_return_ok(self, path, request)