¿Cómo rastrea Python el contenido de una página dinámica?
Ingrese la URL y obtenga el html. Ya he escrito la función.
Busque usted mismo:
getUrlRespHtml
Puede encontrar. la función de Python correspondiente:
#------------------------------------ --- ---------------------------------------
def ?getUrlResponse( url, ?postDict={}, ?headerDict={}, ?timeout=0, ?useGzip=False, ?postDataDelimiter="amp;")?:
"""Obtener?respuesta ?desde?url,?soporte?opcional?postDict, headerDict, tiempo de espera, useGzip
Nota:
1.?if?postDict?not?null,?url?request?auto ?convertirse en?POST?en lugar?de?el?predeterminado?GET
2?si?quiere?manejar?automáticamente?las?cookies,?debe?llamar?initAutoHandleCookies()?antes?de?usar? esta?función.
luego?siguiente?urllib2.Request?will?auto?handle?cookies
"""
#?makesure?url?is ?cadena, ?no?unicode,?de lo contrario?urllib2.urlopen?will?error
url?=?str(url);
si?(postDict)?: p>
if(postDataDelimiter=="amp;"):
postData?=?urllib.urlencode(postDict);
else:
postData?= ?"";
para?eachKey?in?postDict.keys()?:
postData? =?str(eachKey)? (postDict[ eachKey])? ?postDataDelimiter;
postData?=?postData.strip();
logging.info("postData=s",?postData); p>
req?=?urllib2.Request(url,?postData);
logging.info("req=s",?req);
req.add_header ('Contenido -Tipo',?"application/x-www-form-urlencoded");
¿else?:
req?=?urllib2.Request(url);
defHeaderDict?=?{
'User-Agent':?gConst['UserAgent'],
'Cache-Control'?:?'no
-cache',
'Aceptar': ?'*/*',
'Conexión': ?'Keep-Alive',
};
#?add?default?headers?firstly
para?eachDefHd?in?defHeaderDict.keys()?:
#print?"add?default? header:?s=s"(eachDefHd, defHeaderDict[eachDefHd]);
req.add_header(eachDefHd,?defHeaderDict[eachDefHd]);
if(useGzip)?:
#print?"use?gzip?for",url;
req.add_header('Aceptar-codificación',?'gzip,?deflate');
#?agregar?encabezado?personalizado?más tarde?-gt;?permitir?sobrescribir?¿encabezado predeterminado?
if(headerDict)?:
#imprimir?"agregado? encabezado: ", headerDict;
para?key?in?headerDict.keys()?:
req.add_header(key,?headerDict[key]);
if(timeout?gt;?0)?:
#?set?timeout?value?if?necessary
resp?=?urllib2.urlopen(req,? timeout=timeout);
¿otra cosa?:
resp?=?urllib2.urlopen(req);
#update?cookies?into?local?file
if(gVal['cookieUseFile']):
gVal['cj'].save();
logging.info("gVal[' cj']=s",?gVal['cj']);
return?resp;
#--------------- -------------------------------------------------- -------------
#?get?response?html==cuerpo?de?url
#def?getUrlRespHtml(url,?postDict ={},?headerDict={},?timeout=0,?useGzip=False)?:
def?getUrlRespHtml(url,?postDict={},?headerDict={},?timeout= 0,?useGzip=True,?postDataDelimiter="&")?:
resp?=?getUrlResponse(url,?postDict,?headerDict,?timeout,?useGzip,?postDataDelimiter);
p>respHtml?=?resp.read();
#aquí,?tal vez,?incluso?si?no?enviar?Aceptar codificación:?gzip,?desinflar
#pero?aún?respuesta?gzip?o?desinflar,?entonces? directamente?hacer?descomprimir
#if(useGzip)?:
#print?"---antes? descomprimir,?len(respHtml)=",len(respHtml);
respInfo?=?resp.info();
#?Servidor:?nginx/1.0.8
#?Fecha:?Dom,?08 ?Abr?2012?12:30:35?GMT
#?Content-Type:?text/html
#?Transfer-Encoding:?chunked
#?Connection:?close
#?Vary:?Accept-Encoding
#?...
#?Content-Encoding:?gzip
#?en algún momento,?la?solicitud?usa?gzip, desinflar,?pero?en realidad?devuelta?es?un-gzip?html
#?-gt;?respuesta? info?not?include?above?"Content-Encoding:?gzip"
#?eg:?/s/comment_730793bf010144j7_3.html
#?-gt;?so?here ?solo?decodificar?cuando?es?de hecho?es?datos comprimidos?
#Content-Encoding:?deflate
if("Content-Encoding"?in?respInfo ):
if("gzip"?==?respInfo['Content-Encoding']):
respHtml?=?zlib.decompress(respHtml,?16 zlib.MAX_WBITS );
elif("deflate"?==?respInfo['Content-Encoding']):
respHtml?=?zlib.decompress(respHtml,?-zlib.MAX_WBITS );
return?respHtml;
Y código de muestra: url?=?"";
respHtml?=?getUrlRespHtml(url);
Funciones completas de la biblioteca, búsquelas usted mismo:
crifanLib.py
Para obtener detalles sobre cómo rastrear páginas dinámicas, consulte:
Tutorial especial de Python: rastreo Sitio web, simular inicio de sesión, capturar páginas web dinámicas
(Puede encontrarlo buscando el título usted mismo)