Sto scrivendo un parser Google Scholar e in base a this answer, sto impostando i cookie prima di afferrare l'HTML. Questo è il contenuto del mio file di cookies.txt
:Perché Python dice che questo file cookie di Netscape non è valido?
# 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
e questo è il codice che sto usando per afferrare il codice 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)
Il traceback completo è:
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 Ho cercato la documentazione sul formato di file cookie di Netscape, ma non riesco a trovare nulla che mi mostri il problema. Ci sono newline che devono essere incluse? Ho cambiato le terminazioni di linea in stile Unix, per ogni evenienza, ma questo non ha risolto il problema. La specifica più vicina che riesco a trovare è this, che non mi indica nulla che mi manchi. I campi su ognuna delle ultime quattro righe sono separati da tabulazioni, non da spazi e tutto il resto mi sembra corretto.
[specifica del cookie netscape] (http://curl.haxx.se/rfc/cookie_spec.html) che era ospitato su netscape.com prima che qualcuno (AOL?) Rovinasse la storia. – n611x007
una specifica aggiornata come [rfc2965] (http://tools.ietf.org/html/rfc2965.html) con * Set-Cookie2 * – n611x007
Per chiunque sia interessato, in realtà si può fare 'cookies.save (cookie_file, ignore_discard = True , ignore_expires = True) 'per creare un file cookie valido come istanza da confrontare con cookie.txt non validi. Line by line o bye by byte per confrontare e rimuovere la riga una per una, alla fine avresti trovato il motivo. –