Buscando artículos sobre el rastreador de Python

El progreso general es el siguiente:

1. Cron agregado: se usa para indicarle al programa que active una tarea cada 30 minutos y la ejecute en el blog especificado para obtener las últimas actualizaciones.

2. Utilice el almacén de datos de Google para almacenar el contenido rastreado por el rastreador cada vez. . Sólo se almacena contenido nuevo. .

Como dije la última vez, el rendimiento ha mejorado enormemente: el rastreador se activa después de cada solicitud, por lo que tarda unos 17 segundos en salir del fondo al primer plano, ahora menos de 2 segundos.

3. El rastreador está optimizado.

1.Cron.yaml para programar la hora a la que se activa cada programa.

Después de explorar los documentos y hacer preguntas, finalmente descubrí cómo funciona el cron de Google; de ​​hecho, es simplemente Google visitando virtualmente una URL... en cada momento designado por nosotros Especifíquelo usted mismo...

Entonces, bajo Django, no necesitas escribir un programa puro en Python en absoluto. No escribas:

if __name__=="__main__ ":

Simplemente configura una URL y colócala en views.py:

def updatePostsDB(solicitud ): # eliminar todo()SiteInfos =[]SiteInfo = { } SiteInfo[' publicar sitio ']= " l2z story " SiteInfo[' feed URL ']= " feed://l2zstory.wordpress.com/feed/" SiteInfo [' blog_type ']= "WordPress" SiteInfos.append(SiteInfo)SiteInfo = {} SiteInfo['post site']= "YukiLife" SiteInfo['feed URL']= "feed://blog.Sina.com .cn /RSS/65839028 0583902excepto excepción, e: Msg = str(e) return HttpResponse(Msg)

Cron.yaml debe colocarse en el mismo nivel que app.yaml:

cron :

-Descripción: Recuperar las últimas publicaciones

url: /task_updatePosts/

Horario: cada 30 minutos

En url. , simplemente apunte task_updatePostsDB a la URL.

El proceso de depurar este cron fue complicado. Muchas personas en stackoverflow me preguntaron por qué su cron no funcionó. También está sudado y no puedo encontrar el final. Al final, se hace por suerte, pero los pasos son muy simples:

Primero, asegúrate de que no haya errores de sintaxis en tu programa... Luego puedes hacerlo. manualmente Si cron es normal, la tarea debería haberse ejecutado en este momento. Si realmente no funciona, verifique el registro...

2. Almacenamiento de datos

Mis necesidades aquí son muy simples: no puedo unirme... así que solo uso el ayudante de Django más simple.

..

Este models.py es el punto clave:

Copia el código de la siguiente manera:

Importa el modelo básico desde appengine_django.models

Desde google.appengine.ext importa la base de datos

classPostsDB (modelo básico):

link=db. LinkProperty()

título=db. StringProperty()

Autor=db. StringProperty()

Fecha=db. datetimeAttribute()

Descripción = db. TextProperty()

postSite=db. StringProperty()

Las dos primeras líneas son el foco. . . . Fui ingenuo al no escribir la segunda línea en primer lugar. . . Me tomó más de dos horas darme cuenta de lo que estaba pasando. . La ganancia supera la pérdida. . .

Al leer y escribir, no lo olvides. . . PostDB.put()

Para evitar problemas al principio, simplemente eliminé todos los datos cada vez que se activaba cron y luego reescribí los datos recién escalados. . .

Resultados. . . Un día después. . . Hay 40.000 registros de lectura y escritura. . . . Y sólo hay 50.000 artículos gratuitos al día. . . .

Así que cámbielo para buscar actualizaciones antes de insertar. Si lo tienes, escríbelo; si no lo tienes, no lo escribas. . Finalmente, esta parte de la base de datos está terminada. . .

3. Mejoras en los reptiles:

Al principio, los reptiles eran solo elementos que se daban en el feed de rastreo. . Entonces, si un blog tiene 24*30 publicaciones. . . Sólo puedes conseguir hasta 10 artículos. . . .

Esta vez, la versión mejorada puede rastrear todos los artículos. . Realicé experimentos utilizando los blogs de Lonely Lingchuan, Han Han, Yuki y Z respectivamente. . Fue un gran éxito. . . Lonely Lingchuan tiene más de 720 artículos. . . Lo que se perdió por completo fue el descenso. .

importar URL lib # de sopa hermosa importar sopa hermosa de PyQuery importar PyQuery como pqdef obtener lista de artículos (URL): primeros artículos = [] URL _ prefijo = URL [: -6] Cnt = 1 respuesta = urllib urlopen(URL)html = respuesta. read()d = pq(html)try: página Cnt = d("ul.SG_pages"). buscar(' span ')página CNT = int(d(página CNT).text()[1:-1]) excepto: página CNT = 1 para I en rango(1, página CNT 1): URL = URL_prefix str( I) ".html" # imprimir respuesta URL = urllib . urlopen(URL)html = respuesta()d = pq(html)title_spans = d(".atc_title"). buscar('a') intervalos_fechas=d('.

atc_tm') para j en rango(0, len(título _ abarca)): título obj = título _ abarca[j]fecha obj = fecha _ abarca[j]artículo = { } artículo[' enlace ']= d(título objeto). attr(' href ')artículo[' título ']= d(título obj). texto()artículo['fecha']= d(fecha obj). text()artículo['desc']= getpage Contenido(artículo['link'])lst artículos. append(artículo)return lst artículos def getpage Contenido(URL): # obtener respuesta del contenido de la página = urllib URL abierta (URL). html = respuesta . read()d = pq(html)Contenido de la página = d(" div . artic Content "). text()# imprimir contenido de la página devolver pageContentdef main():URL = '/s/article list_119123_0_1.html' = "/s/article list _ 65438txt", W')f write(article['desc']. codificar. ('utf-8') #Preste especial atención al chino f. close()# imprimir artículo[' desc '] if _ _ name _ = ' _ _ main _ _ ': Manejo de Main()

<. p>PyQuery recomendado.

Lamento decir que estoy decepcionado cuando escribí el artículo, no pude encontrar el motivo. Descubrí por qué BueautifulSoup no pudo captar lo que quería. Después de mirar el código fuente de su parte selectora, creo que aún así.

Renuncié a esta biblioteca y probé lxml. Es muy fácil. uso basado en xpath Pero siempre necesito verificarlo. La documentación para xpath es muy útil

Preocupaciones ocultas

Porque pyquery se basa en lxml... y. La capa inferior de lxml es c..., es poco probable que se use en gae. Mi rastreador solo se puede usar en computadoras.