Estoy escribiendo un analizador Google Scholar, y basado en this answer, estoy configurando cookies antes de tomar el HTML. Este es el contenido de mi cookies.txt
archivo:¿Por qué Python dice que este archivo de cookies de Netscape no es válido?
# Netscape HTTP Cookie File
# http://curlm.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.
.scholar.google.com TRUE / FALSE 2147483647 GSP ID=353e8f974d766dcd:CF=2
.google.com TRUE / FALSE 1317124758 PREF ID=353e8f974d766dcd:TM=1254052758:LM=1254052758:S=_biVh02e4scrJT1H
.scholar.google.co.uk TRUE / FALSE 2147483647 GSP ID=f3f18b3b5a7c2647:CF=2
.google.co.uk TRUE / FALSE 1317125123 PREF ID=f3f18b3b5a7c2647:TM=1254053123:LM=1254053123:S=UqjRcTObh7_sARkN
y este es el código que estoy usando para agarrar el código HTML:
import http.cookiejar
import urllib.request, urllib.parse, urllib.error
def get_page(url, headers="", params=""):
filename = "cookies.txt"
request = urllib.request.Request(url, None, headers, params)
cookies = http.cookiejar.MozillaCookieJar(filename, None, None)
cookies.load()
cookie_handler = urllib.request.HTTPCookieProcessor(cookies)
redirect_handler = urllib.request.HTTPRedirectHandler()
opener = urllib.request.build_opener(redirect_handler,cookie_handler)
response = opener.open(request)
return response
start = 0
search = "Ricardo Altamirano"
results_per_fetch = 20
host = "http://scholar.google.com"
base_url = "/scholar"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; U; ru; rv:5.0.1.6) Gecko/20110501 Firefox/5.0.1 Firefox/5.0.1'}
params = urllib.parse.urlencode({'start' : start,
'q': '"' + search + '"',
'btnG' : "",
'hl' : 'en',
'num': results_per_fetch,
'as_sdt' : '1,14'})
url = base_url + "?" + params
resp = get_page(host + url, headers, params)
El rastreo completo es:
Traceback (most recent call last):
File "C:/Users/ricardo/Desktop/Google-Scholar/BibTex/test.py", line 29, in <module>
resp = get_page(host + url, headers, params)
File "C:/Users/ricardo/Desktop/Google-Scholar/BibTex/test.py", line 8, in get_page
cookies.load()
File "C:\Python32\lib\http\cookiejar.py", line 1767, in load
self._really_load(f, filename, ignore_discard, ignore_expires)
File "C:\Python32\lib\http\cookiejar.py", line 1997, in _really_load
filename)
http.cookiejar.LoadError: 'cookies.txt' does not look like a Netscape format cookies file
I He buscado documentación en el formato de archivo de cookies de Netscape, pero no encuentro nada que me muestre el problema. ¿Hay nuevas líneas que deben incluirse? Cambié los finales de línea al estilo Unix, por las dudas, pero eso no resolvió el problema. La especificación más cercana que puedo encontrar es this, que no me indica nada que me falta. Los campos en cada una de las últimas cuatro líneas están separados por pestañas, no espacios, y todo lo demás me parece correcto.
[especificación de cookies de Netscape] (http://curl.haxx.se/rfc/cookie_spec.html) que solía alojarse en netscape.com antes de que alguien (AOL?) Arruinara la historia. – n611x007
una especificación actualizada como [rfc2965] (http://tools.ietf.org/html/rfc2965.html) con * Set-Cookie2 * – n611x007
Para cualquier persona interesada, en realidad puede hacer 'cookies.save (cookie_file, ignore_discard = True , ignore_expires = True) 'para crear un archivo de cookie válido como instancia para comparar con cookies.txt no válido. Línea por línea o bye por byte para comparar, y eliminar la línea uno por uno, finalmente encontraría la razón. –