Commit eaa37668 authored by Renán Sosa Guillen's avatar Renán Sosa Guillen

crawlers

parent fa10af53
......@@ -99,6 +99,11 @@ class QuotesSpider(scrapy.Spider):
item = NoticiasItem()
text = ''
news_date = datetime(int(self.year), int(self.month), int(self.day), tzinfo=self.tz).isoformat("T")
title = response.css('div.post-title').css('h1').extract_first()
if title is not None : remove_tags(title)
topic = response.css('div.big-title').xpath('./h2/a/span').extract_first()
if topic is not None : topic = remove_tags(topic)
......@@ -107,8 +112,8 @@ class QuotesSpider(scrapy.Spider):
text += p + "\n"
## News item info ##
item['date'] = datetime(int(self.year), int(self.month), int(self.day), tzinfo=self.tz).isoformat("T")
item['title'] = remove_tags(response.css('div.post-title').css('h1').extract_first())
item['date'] = news_date
item['title'] = title
item['topic'] = topic
item['text'] = text.strip()
item['url'] = response.url
......
[{"date": "2018-09-05T00:00:00-06:00", "topic": null, "title": "Reciben Potros Salvajes anillos de Campeones 2017", "text": "Grupo Puntual / Jos\u00e9 Contreras Contreras\nTOLUCA, M\u00e9xico, 5 de Septiembre de 2018.- El Rector de la Universidad Aut\u00f3noma del Estado de M\u00e9xico, Alfredo Barrera Baca, entreg\u00f3 los anillos de campeones a los jugadores y couches de la Liga Mayor de Potros Salvajes 2017, y reconoci\u00f3 a quienes lograron los campeonatos de categor\u00eda Juvenil Oro, Juvenil Verde Primavera y Juvenil Verde Oto\u00f1o que tambi\u00e9n lograron campeonatos el a\u00f1o anterior en la Organizaci\u00f3n Nacional Estudiantil de Futbol Americano.\nBarrera Baca refrend\u00f3 ante los Potros Salvajes su compromiso con el deporte y ofreci\u00f3 todo su respaldo al equipo de futbol americano que cumple 60 a\u00f1os de existencia este septiembre de 2018.\nExpres\u00f3 que Potros Salvajes son un orgullo universitario, un valor, un centro de formaci\u00f3n de mujeres y hombres no solo notables en la actividad deportiva sino tambi\u00e9n en el desarrollo acad\u00e9mico.\nEl Rector hizo un p\u00fablico reconocimiento a Sergio Rodr\u00edguez S\u00e1nchez, quien hace unos meses dej\u00f3 de ser el head coach de Potros Salvajes, y apunt\u00f3 que su nombre ya est\u00e1 escrito con letras de oro en la historia universitaria.\n\nRecord\u00f3 el \u00e9pico momento del 11 de noviembre de 2017, cuando Alejandro M\u00e1rquez Fragoso, quarterback de Potros Salvajes, tom\u00f3 el ovoide faltando solo 10 segundos en el estadio de las \u00c1guilas de la Universidad Aut\u00f3noma de Coahuila, en Saltillo, para romper la l\u00ednea de golpeo y lograr una anotaci\u00f3n que marc\u00f3 la historia universitaria, pues signific\u00f3 el Campeonato 2017 en la Conferencia Blanca del m\u00e1ximo circuito estudiantil de futbol americano de este pa\u00eds: la ONEFA.\nApunt\u00f3 que esa jugada influy\u00f3 de manera definitiva para que la Organizaci\u00f3n Nacional Estudiantil de Futbol Americano eligiera precisamente a Alejandro M\u00e1rquez Fragoso como el Jugador M\u00e1s Valioso de la Temporada 2017 en la Conferencia Blanco, hecho por el que esta noche el Rector de la UAEM entreg\u00f3 un testimonio de reconocimiento universitario al quarterback de los Potros Salvajes.\nIndic\u00f3 el Rector que la comunidad universitaria se siente orgullosa de esta escuadra que otorga triunfos y m\u00e1s triunfos a la m\u00e1xima casa de estudios del Estado de M\u00e9xico.\n\n\u201cEso demuestra lo que somos los universitarios y lo que somos capaces de lograr\u201d, enfatiz\u00f3 Barrera Baca.\nEstableci\u00f3 que los \u00e9xitos de los Potros Salvajes reflejan el trabajo conjunto de jugadores y entrenadores, pero tambi\u00e9n de las autoridades de la UAEM, familiares, fan\u00e1ticos, quienes se unen en el campo y las tribunas del estadio universitario Juan Josafat Pichardo conscientes del que el \u00e9xito es resultado siempre del trabajo en equipo.\nAntes, la secretaria de Actividad F\u00edsica y Deporte de la UAEM, M\u00f3nica Marina Mondrag\u00f3n Ixtl\u00e1huac, reconoci\u00f3 en los Potros Salvajes un ejemplo vivo de unidad, responsabilidad y lucha continua por la superaci\u00f3n, y dijo que la vocaci\u00f3n deportiva de los universitarios es parte de una formaci\u00f3n integral que impulsa la administraci\u00f3n del Rector Alfredo Barrera Baca.\n\u00a0\n\nNombre y Correo obligatorios (Tu correo electr\u00f3nico no ser\u00e1 visible).", "url": "http://diario-puntual.com.mx/reciben-potros-salvajes-anillos-de-campeones-2017/"},
{"date": "2018-09-05T00:00:00-06:00", "topic": null, "title": "Visi\u00f3n Puntual", "text": "Por: Jos\u00e9 Contreras Contreras \nPara que la cu\u00f1a apriete\u2026\n\u00a0\nLa abuela, que era sabia, advert\u00eda que \u201cpara que la cu\u00f1a apriete, debe ser del mismo palo\u201d. Quiz\u00e1 por ello el pr\u00f3ximo secretario de Hacienda del pa\u00eds, Carlos Urz\u00faa, defini\u00f3 que su mejor alfil para el combate a la corrupci\u00f3n, el lavado de dinero y el tr\u00e1fico de dinero, las actividades financieras m\u00e1s redituables de la delincuencia organizada y de cuello blanco, sea nada m\u00e1s que don Santiago Nieto Castillo.\nSantiago Nieto Castillo es un hombre tremendamente ligado al Estado de M\u00e9xico. Figur\u00f3 en el \u00e1mbito pol\u00edtico de la entidad mexiquense justamente cuando Enrique Pe\u00f1a Nieto era gobernador y \u00e9l fue designado magistrado en la Sala Toluca del Tribunal Electoral del Poder Judicial de la Federaci\u00f3n, instituci\u00f3n que presidi\u00f3 en alg\u00fan momento.\nSantiago Nieto Castigo \u00bfva por la revancha?\nSu carrera e influencia lo llev\u00f3 a la Fiscal\u00eda Especializada para la Atenci\u00f3n de Delitos Electorales (FEPADE), donde quiso combatir toda pr\u00e1ctica oscura que empa\u00f1ara las elecciones en este pa\u00eds; sin embargo, hay quien dice que \u201cse pas\u00f3\u201d de bueno y termin\u00f3 enfrentando al propio sistema que lo hab\u00eda colocado en una de las m\u00e1s altas responsabilidades electorales de este pa\u00eds, por lo que fue \u201ccorrido\u201d de la noche a la ma\u00f1ana.\nUnos dicen que no obedeci\u00f3 instrucciones presidenciales, aunque oficialmente la Procuradur\u00eda General de la Rep\u00fablica (PGR), instancia de la que depende la FEPADE, comunic\u00f3 oficialmente que Santiago Nieto Castillo \u201cviol\u00f3 el C\u00f3digo de Conducta de la instituci\u00f3n\u201d.\nLa destituci\u00f3n del titular de Fepade se dio un d\u00eda despu\u00e9s de que \u00e9ste se\u00f1al\u00f3 al diario Reforma que el exdirector de Pemex, Emilio Lozoya, le envi\u00f3 una carta en la que le ped\u00eda que no lo inculpara en el caso de desv\u00edo de recursos a favor del PRI durante la campa\u00f1a presidencial de 2012.\nDe acuerdo con el diario, la Fepade abri\u00f3 una carpeta de investigaci\u00f3n para indagar si parte de los supuestos sobornos por 10 millones de d\u00f3lares que habr\u00eda dado la empresa Odebrecht a Lozoya habr\u00edan financiado la campa\u00f1a del ahora presidente Enrique Pe\u00f1a Nieto.\n\u201cMe envi\u00f3 una carta diciendo que quiere que yo haga un pronunciamiento p\u00fablico sobre su inocencia y me env\u00eda un curr\u00edculum dici\u00e9ndome qui\u00e9n es su pap\u00e1, qui\u00e9n es su mam\u00e1, en d\u00f3nde estudi\u00f3. Nunca entend\u00ed esta parte\u201d, dijo el ex titular de FEPADE.\nA Nieto Castillo nunca se le trat\u00f3 de acuerdo al protocolo y a sus derechos, pues no se le dio oportunidad de presentar las pruebas que avalaran sus declaraciones o aclarar su dicho sobre el presunto fraude en Petr\u00f3leos Mexicanos para financiar la campa\u00f1a del Partido Revolucionario Institucional.\nLuego, Santiago Nieto Castillo apareci\u00f3 en el equipo de campa\u00f1a de Andr\u00e9s Manuel L\u00f3pez Obrador, cuando el proceso electoral ya estaba en marcha, y, despu\u00e9s de la elecci\u00f3n del 1 de julio, surgi\u00f3 en el equipo de transici\u00f3n del Presidente Electo.\nAhora el \u201cvelo\u201d se retir\u00f3 y se sabe que Santiago Nieto Castillo ser\u00e1 el responsable de Inteligencia Financiera de la pr\u00f3xima administraci\u00f3n federal, uno de los cargos de mayor sensibilidad, sobre todo si se comprende que desde esa instancia se pretende no solamente averiguar qu\u00e9 hay de cierto sobre presuntos malos manejos que habr\u00eda hecho la administraci\u00f3n de Enrique Pe\u00f1a Nieto, as\u00ed como la estrategia de combate al crimen organizado que tendr\u00e1 como eje las rutas del dinero.\nPor ello, resulta relevante este nombramiento, pues Santiago Nieto, cuando titular de la FEPADE, se entiende que acopi\u00f3 informaci\u00f3n sumamente interesante sobre los movimientos del dinero p\u00fablico y su presunta vinculaci\u00f3n con las actividades electorales impulsadas desde el gobierno priista.\nSi Santiago Nieto utiliza adecuadamente esa informaci\u00f3n y ahonda en ella mediante la tecnolog\u00eda y recursos disponibles en la Unidad de Inteligencia Financiera de la secretar\u00eda de Hacienda, es claro que podr\u00eda reunir evidencias suficientes para poner en grave riesgo a varios de los servidores p\u00fablicos federales que van de salida, sobre todo aquellos que m\u00e1s vinculaci\u00f3n tuvieron con el dinero federal, entre ellos el actual titular de Comunicaciones y Transportes, Gerardo Ruiz Esparza; Rosario Robles Berlanga, quien a su paso por la Secretar\u00eda de Desarrollo Social tuvo en sus manos recursos muy importantes, y por supuesto el actual Canciller, Luis Videgaray Caso, quien ocup\u00f3 precisamente la Secretar\u00eda de Hacienda desde donde, se supone, se \u201capoyaron\u201d causas que nada ten\u00edan que ver con el desarrollo del pa\u00eds, pero s\u00ed de su partido pol\u00edtico.\nVeremos pues hasta d\u00f3nde llega la actividad de inteligencia financiera que ahora encabezar\u00e1 Santiago Nieto Castillo, la cual, por cierto, algunos miran con ojitos de \u201cvenganza\u201d, tanto por lo que la administraci\u00f3n de Enrique Pe\u00f1a le hizo a \u00e9l cuando lo \u201ccorri\u00f3\u201d de la FEPADE, como de todo lo que podr\u00eda actuar el gobierno de Andr\u00e9s Manuel L\u00f3pez Obrador para limpiar todo lo que presuntamente se cometi\u00f3 durante la gesti\u00f3n de Enrique Pe\u00f1a Nieto.\n\u00a0\nReuni\u00f3n \u201cde amigos\u201d\n\u00a0\nEl lunes se llev\u00f3 a cabo una reuni\u00f3n sin precedentes, un encuentro, dijeron que de amigos, en el que participaron representantes de diferentes expresiones pol\u00edticas, la mayor\u00eda representantes o ex representantes de sus distintos partidos ante el Consejo General del Instituto Electoral del Estado de M\u00e9xico.\nSe trata de una reuni\u00f3n interesante, m\u00e1s all\u00e1 de los cortes de carne que estuvieron en medio, porque cada uno de los asistentes ocupa un lugar estrat\u00e9gico en la estructura de su respectivo partido.\nEl \u00e1nimo fue bastante cordial, sobraron las an\u00e9cdotas y, como era de esperarse, la proyecci\u00f3n de escenarios pol\u00edticos sobre lo que se prev\u00e9 ocurra con los reacomodos pol\u00edticos.\nMuestran voluntad de di\u00e1logo representantes y ex representantes de partidos pol\u00edticos ante el IEEM.\nSe trata de aut\u00e9nticos mamuts de la pol\u00edtica mexiquense, no por viejos ni por pertenecer a \u00e9pocas prehist\u00f3ricas, sino por lo largo y retorcido de sus colmillos; les sobra sabidur\u00eda pol\u00edtica, son personajes que se han labrado en la chamba de tierra, m\u00e1s all\u00e1 de los cargos partidarios, son personajes que le saben, y mucho, a eso del asunto electoral, aut\u00e9nticos especialistas en esa materia que hoy est\u00e1 tan de moda y que tiene a un amplio sector de la sociedad en el filo de la butaca en espera c\u00f3mo se van a acomodar las cosas en asuntos como la pr\u00f3xima Legislatura, los cambios que probablemente se vengan en la conformaci\u00f3n del Gobierno del Estado de M\u00e9xico, y, por supuesto, los reflejos de ida y de vuelta que se dar\u00e1n entre el \u00e1mbito federal y el estatal.\nEl ejercicio fue muy bueno, no solamente por el clima de cordialidad que demostraron entre seres que piensan muy diferente pero que tienen intenci\u00f3n de alcanzar acuerdos, ojal\u00e1 que este encuentro sea un reflejo fiel de lo mucho que se puede hacer de cara a los tiempos pol\u00edticos que t\u00e1citamente ocurrir\u00e1n a partir de este mi\u00e9rcoles, una vez que comience a operar la nueva Legislatura local que ayer se instal\u00f3 en la sede del Poder Legislativo.\nSon momentos muy interesantes y definitorios para todos los actores pol\u00edticos del Estado de M\u00e9xico y del pa\u00eds en general, en los cuales el deseo de hacer bien las cosas debe imponerse a la tentaci\u00f3n del enfrentamiento est\u00e9ril que no ser\u00eda positivo para ninguna de las partes. Hoy los partidos pol\u00edticos deben entender y comprender que se trata de construir, no de lo contrario.\n\u00a0\nM\u00e1s vale tarde\u2026\n\u00a0\nDespu\u00e9s de un a\u00f1o de prometerlo, el Rector de la Universidad Aut\u00f3noma del Estado de M\u00e9xico cumplir\u00e1 este mi\u00e9rcoles con la palabra empe\u00f1ada con los jugadores, entrenadores, directivos y hasta aficionados del equipo de futbol americano de la instituci\u00f3n, los Potros Salvajes, que est\u00e1n de manteles largos porque cumplen 60 a\u00f1os de existencia.\nEs mucho echar para atr\u00e1s y como no quisiera recordar lo malo, solo me limitar\u00e9 a se\u00f1alar que los Potros Salvajes sumaron \u00e9xitos en su participaci\u00f3n en distintos torneos que van desde las categor\u00edas infantiles, juveniles y mayor, e incluso la femenil que compite en el llamado \u201ctocho bandera\u201d o flag futbol.\nEsa situaci\u00f3n coincidi\u00f3 con una escaramuza en la que se vieron inmersos los jugadores de Liga Mayor cuando a alguien se le ocurri\u00f3 llevar a entrenar al equipo de futbol soccer de la Liga de Ascenso MX justo al gimnasio de los Potros Salvajes, donde los de casto y hombreras se sintieron desplazados y exigieron la intervenci\u00f3n de sus autoridades para impedir esa condici\u00f3n.\nAh\u00ed se tuvo que presentar la autoridad universitaria, v\u00eda el Secretario de Rector\u00eda, quien medi\u00f3 la situaci\u00f3n para resolver el diferendo, en el cual surgieron muchas otras necesidades que enfrentan las distintas categor\u00edas del equipo de futbol americano, debido a que \u00e9ste es mucho lo que le da a la Universidad Aut\u00f3noma del Estado de M\u00e9xico, por lo menos en materia de prestigio nacional en esa especialidad, y pr\u00e1cticamente nulo lo que reciben de la instituci\u00f3n a la que representan en todo el pa\u00eds.\nAlfredo Barrera, Rector de la UAEM, cumple hoy la palabra empe\u00f1ada con los Potros Salvajes.\nPor ello, entre otras muchas promesas que entones se hicieron, destac\u00f3 el acercamiento que presuntamente intentaba el propio Rector Alfredo Barrera Baca, quien estaba pr\u00e1cticamente en el inicio de su gesti\u00f3n, y \u00e9l mismo declar\u00f3 que se solventar\u00eda una serie de necesidades para que los Potros Salvajes pudieran operar no solo bien, sino mejor de lo que se hac\u00eda en ese momento.\nTras ese escenario vino posteriormente la destituci\u00f3n de Sergio rodr\u00edguez, alias La Bruja, quien entonces fung\u00eda como entrenador en jefe de los Potros Salvajes, a quien algunos refieren que se responsabiliz\u00f3 de la insurrecci\u00f3n que se vivi\u00f3 entre los jugadores y ex jugadores en contra de la autoridad universitaria, lo que le cost\u00f3 el cargo.\nHay quienes pretenden hacer creer que el cambio de head coach nada tuvo que ver con ese episodio, pero es dif\u00edcil pensar que solamente se oper\u00f3 por cuestiones deportivas, y mucho menos aceptan que haya sido porque en realidad Sergio Rodr\u00edguez hubiera abusado de los recursos que la instituci\u00f3n puso en sus manos para que entrenadores asistieran a un curso de capacitaci\u00f3n, como se acus\u00f3 en su momento.\nEn fin, derivado de todo eso, en alg\u00fan momento del a\u00f1o anterior el Rector declar\u00f3, no recuerdo bien si fue durante la entrega del trofeo de campeones a la categor\u00eda Juvenil de Primavera del 2017, que la UAEM har\u00eda un reconocimiento a sus jugadores mediante la entrega de las tradicionales chamarras que para los jugadores de futbol americano representan sus \u201cblasones\u201d de triunfos cosechados.\nLas cosas se fueron juntando, porque a ese campeonato vino otro m\u00e1s en la temporada de Oto\u00f1o para la misma categor\u00eda Juvenil, mientras que la Liga Mayor se coron\u00f3 de visitante en juego heroico de visitantes en Coahuila, y las damas del \u201ctocho bandera\u201d tambi\u00e9n triunfaron en categor\u00edas Intermedia y Mayor, adem\u00e1s de que la categor\u00eda Infantil Especial y luego convertida en Infantil A se convirti\u00f3 en Bicampeona Nacional de la Conferencia 1 de la ONEFA.\nEn fin, pues aunque sea un a\u00f1o despu\u00e9s pero el Rector Alfredo Barrera Baca cumplir\u00e1 la palabra empe\u00f1ada y entregar\u00e1 este mi\u00e9rcoles las chamarras de campeones a quienes lograron todos esos triunfos, desde jugadores hasta entrenadores y directivos, quienes en realidad merecen eso y mucho m\u00e1s, pues llevan a\u00f1os poniendo muy en alto el nombre de la Universidad Aut\u00f3noma del Estado de M\u00e9xico en esa disciplina deportiva que requiere de entrega, pasi\u00f3n y gran preparaci\u00f3n para enfrentarse a los m\u00e1ximos exponentes del pa\u00eds, como el Instituto Polit\u00e9cnico Nacional y la Universidad Nacional Aut\u00f3noma de M\u00e9xico.\nLos Potros Salvajes tendr\u00e1n pues un d\u00eda de fiesta, de celebraci\u00f3n, de reconocimiento, como lo merecen, porque 60 a\u00f1os de entrega representan un gran esfuerzo para la consolidaci\u00f3n de ese proyecto por el que en principio nadie daba un peso, y el cual ha dado a la UAEM muchos \u00e9xitos en materia deportiva, los cuales hoy deben ser respaldados de manera contundente, incluso m\u00e1s que otras disciplinas a las que se les invierte mucho y se les saca muy poco, ya ni siquiera alegr\u00edas porque llevan por lo menos dos a\u00f1os de \u201carrastrar la cobija\u201d y aun as\u00ed se les inyectan millones de pesos cada a\u00f1o.\nEn este marco, adem\u00e1s de las chamarras pendientes, se entregar\u00e1n los anillos de campeones que quedaron pendientes a los jugadores del equipo de Liga Mayor que conquist\u00f3 el Campeonato Nacional en la Conferencia Blanca en el 2017, joyas que, se supone, no entreg\u00f3 en su oportunidad la Organizaci\u00f3n Nacional Estudiantil de Futbol Americano (ONEFA) por adeudos que presentaba el equipo de Potros Salvajes de la UAEM.\nAfortunadamente parece que esas deudas est\u00e1n siendo solventadas gracias a una inteligencia financiera diferente, lo que regulariz\u00f3 la participaci\u00f3n de los de verde y oro en el Torneo 2018 que arranca precisamente este viernes 7 de septiembre, con la visita al estadio Juan Josafat Pichardo del representativo de Frailes de la Universidad del Tepeyac, frente a quienes los Potros Salvajes desean mostrarse a todo vapor ante quienes cada vez m\u00e1s seguido llenan las tribunas de una afici\u00f3n en ascenso.\nBien por los Potros Salvajes, y muy bien por el Rector Alfredo Barrera Baca, qu\u00e9 bueno que cumpla la palabra empe\u00f1ada, pero qu\u00e9 mejor que voltee hacia una disciplina que \u201cbien vendida\u201d y mejor administrada, podr\u00eda dar much\u00edsimo m\u00e1s a la instituci\u00f3n que est\u00e1 \u00e1vida de triunfos y de reconocimiento en el panorama nacional e internacional.\nLa puerta del profesionalismo en el futbol americano est\u00e1 ya abierta en la capital del Estado de M\u00e9xico, y en ese camino la Universidad Aut\u00f3noma del Estado de M\u00e9xico podr\u00eda y deber\u00eda convertirse en la cabeza, en el l\u00edder, en la instancia que m\u00e1s jugadores aporte a la integraci\u00f3n del nuevo equipo profesional de Toluca.\n60 a\u00f1os no son un juego, ha sido un proceso muy largo, muy caro, muy complicado, del cual es hora que salga algo m\u00e1s que hombres \u00edntegros, de bien, sino, adem\u00e1s, se pueden aportar talentos de alt\u00edsima calidad como los que hoy existen en la Liga Mayor de los Potros Salvajes, que, con el apoyo de su Rector, deben reclamar esos lugares que por derecho de antig\u00fcedad les corresponden.\n\u00a0\nLa \u00faltima y nos vamos\u2026\n\u00a0\nEn la sesi\u00f3n solemne de instalaci\u00f3n de la LX Legislatura del Estado de M\u00e9xico no pas\u00f3 nada fuera de lo que ayer adelant\u00e1bamos en este mismo espacio. Morena lleg\u00f3 con 38 diputados, lo que le da mayor\u00eda simple en la C\u00e1mara de Diputados, y, junto con sus aliados del Partido del Trabajo y el Partido Encuentro Social, suma 52 diputados, lo que significa mayor\u00eda absoluta o \u201ccalificada\u201d, con lo que podr\u00e1 hacer y deshacer a la hora de votar cualquier modificaci\u00f3n legal.\nLa mesa directiva de la Legislatura local, en su primer periodo ordinario de sesiones, qued\u00f3 presidida por la diputada Azucena Cisneros Coss, de Morena, por supuesto, una de las personas m\u00e1s cercanas al grupo de poder de ese nuevo instituto pol\u00edtico mayoritario.\nAzucena Cisneros Coss fue vocera de la maestra Delfina G\u00f3mez \u00c1lvarez en su campa\u00f1a proselitista por la gubernatura del Estado de M\u00e9xico, y es muy cercana a Higinio Mart\u00ednez Miranda, ahora Senador de la Rep\u00fablica, por lo que se cierra la pinza en el Congreso mexiquense bajo la coordinaci\u00f3n de Maurilio Hern\u00e1ndez Gonz\u00e1lez.\nAzucena Cisneros Coss, recibe la confianza del pleno legislativo y encabeza la Mesa Directiva.\nEl pronunciamiento de Cisneros Coss al instalar la Legislatura fue para advertir que ese poder dej\u00f3 de ser \u201coficial\u00eda de partes\u201d del Poder Ejecutivo mexiquense, lo que se interpreta de entrada como un filtro muy importante para todo aquello que provenga del gobernador mexiquense, comenzando quiz\u00e1 por la propuesta de Presupuesto de Ingresos y Egresos del Estado de M\u00e9xico, el cual, se sabe, pasar\u00e1 por una tijera muy importante de por lo menos 30 por ciento en el gasto.\nA pesar de la posici\u00f3n s\u00f3lida de la presidenta de la nueva mesa directiva de la Legislatura local, fue el coordinador de los diputados de Morena, Maurilio Hern\u00e1ndez Gonz\u00e1lez, quien sali\u00f3 al paso para bajar un par de rayas a la postura y aclarar que no van por el enfrentamiento, que ser\u00e1n interlocutores permanentes del Ejecutivo mexiquense y que aspiran al cogobierno para llegar a acuerdos de beneficio para todos.\nEs interesante el planteamiento de Maurilio Hern\u00e1ndez en el sentido de buscar la reconstrucci\u00f3n del tejido social del Estado de M\u00e9xico como una prioridad para su grupo parlamentario, y aunque dijo que el 80 por ciento o m\u00e1s de las iniciativas que llegan a la C\u00e1mara de Diputados provienen precisamente del gobernador, indic\u00f3 que se buscar\u00e1 que \u00e9stas se alineen en el mismo sentido, es decir, mayor atenci\u00f3n a lo sociedad y dejar en segundo t\u00e9rmino lo pol\u00edtico.\nHoy se lleva a cabo la sesi\u00f3n solemne con la que arranca formalmente el primer periodo ordinario de sesiones, donde se prev\u00e9 la asistencia del gobernador Alfredo del Mazo Maza, quien no se sabe si har\u00e1 o no uso de la tribuna parlamentaria, lo cual solo podr\u00eda hacer si, por cortes\u00eda republicana, los diputados le ceden el derecho.\nDicen que la forma es fondo, as\u00ed es que veremos si m\u00e1s all\u00e1 de los discursos y declaraciones ante los representantes de los medios de comunicaci\u00f3n, este mi\u00e9rcoles comienza con una buena relaci\u00f3n entre el Ejecutivo y el Legislativo, o los de la mayor\u00eda de Morena sacan las armas y comienzan a \u201cdespellejar\u201d a quien muchos de ellos consideran como \u201cel enemigo a vencer\u201d. \u00bfO no?\nNombre y Correo obligatorios (Tu correo electr\u00f3nico no ser\u00e1 visible).", "url": "http://diario-puntual.com.mx/vision-puntual-41/"},
{"date": "2018-09-05T00:00:00-06:00", "topic": null, "title": "Llama Del Mazo a sumar trabajo y talento para hacer del Edomex una tierra justa", "text": "Grupo Puntual / Jos\u00e9 Contreras Contreras\nTOLUCA, M\u00e9xico, 5 de Septiembre de 2018.- \u201cEs tiempo de construir un proyecto com\u00fan en el que los liderazgos electos democr\u00e1ticamente demostremos que nuestro \u00fanico inter\u00e9s es el desarrollo de las familias mexiquenses\u201d, se\u00f1al\u00f3 el gobernador Alfredo del Mazo Maza, al participar en la sesi\u00f3n solemne de inicio del primer periodo ordinario de sesiones de la LX Legislatura del Estado de M\u00e9xico.\n\u201cEn la diversidad est\u00e1 el camino para construir decisiones colectivas que reflejan las expectativas y los sue\u00f1os de nuestra gente. Hoy es tiempo de igualdad para las mujeres, de la inclusi\u00f3n para nuestros j\u00f3venes, de dar su justo valor a las aportaciones de los adultos mayores y las comunidades originarias, al reconocernos todos como mexiquenses\u201d, enfatiz\u00f3.\nAsegur\u00f3 que los distintos puntos de vista son la base para impulsar la unidad de cada hogar y cada comunidad del Estado de M\u00e9xico, \u201cpara hacer de nuestra entidad una tierra m\u00e1s justa, m\u00e1s pareja y m\u00e1s fuerte\u201d.\nExpres\u00f3 que la mexiquense es una sociedad abierta, activa y acostumbrada a m\u00faltiples opiniones y visiones; \u201cm\u00e1s all\u00e1 de las diferencias ideol\u00f3gicas, somos parte de un mismo proyecto hist\u00f3rico, en el que el legado de nuestros antepasados y la entidad moderna que somos en el siglo 21 permanecen unidos por los valores que nos identifican y que vemos con orgullo en el escudo de nuestro estado: cultura, libertad y trabajo\u201d.\nDel Mazo Maza refrend\u00f3 el respeto a la Legislatura y ofreci\u00f3 una relaci\u00f3n arm\u00f3nica a favor de las causas de los mexiquenses. \u201cEl gobierno respetar\u00e1 la soberan\u00eda del Poder Legislativo y le ofrece una colaboraci\u00f3n permanente, buscando en todo momento que las determinaciones que tome el Congreso sean para beneficio de todos los mexiquenses\u201d, aclar\u00f3.\n\n\u201cEste Congreso y el gobierno que tengo la responsabilidad de encabezar coinciden en lo esencial y en lo que verdaderamente importa a las familias; los mexiquenses anhelamos terminar con las desigualdades y las injusticias, tenemos la oportunidad de alcanza nuestras metas de vida y cumplir con el firme prop\u00f3sito de heredar a nuestros hijos un mejor Estado de M\u00e9xico\u201d, puntualiz\u00f3.\n\u201cLas diputadas y los diputados har\u00e1n un ejercicio responsable, una actuaci\u00f3n comprometida con las instituciones, tendr\u00e1n la mayor determinaci\u00f3n para mantener la estabilidad pol\u00edtica sobre la que por tantos a\u00f1os ha descansado la gobernabilidad en el Estado de M\u00e9xico\u201d, a\u00f1adi\u00f3.\nEl mandatario mexiquense habl\u00f3 sobre la importancia de construir juntos, Ejecutivo y Legislativo, un presupuesto adecuado a las necesidades de esta entidad.\n\u201cMi gobierno propondr\u00e1 un presupuesto responsable, con vocaci\u00f3n social, que siga \u00a0respondiendo al compromiso de disminuir la pobreza, la marginaci\u00f3n y las desigualdades en nuestra entidad, y al reto de imprimir mayor dinamismo y vocaci\u00f3n social a nuestra econom\u00eda para que siga atrayendo inversi\u00f3n y generando empleos\u201d, adelant\u00f3.\n\n\u201cLa discusi\u00f3n y eventual aprobaci\u00f3n del Presupuesto es un inmejorable punto de partida para dise\u00f1ar una agenda legislativa que sirva a los prop\u00f3sitos en los que todos coincidimos. Recordemos que nuestro deber es para con la ciudadan\u00eda y nuestra \u00fanica prioridad debe ser su bienestar, acot\u00f3.\nDel Mazo Maza consider\u00f3 que la conformaci\u00f3n de la LX Legislatura es un reflejo de la evoluci\u00f3n democr\u00e1tica y una consecuencia de la vida institucional fuerte, pac\u00edfica y estable que distingue y enorgullece al Estado de M\u00e9xico, y obliga al Ejecutivo y al Legislativo a establecer un di\u00e1logo permanente y constructivo para encontrar soluciones a los retos de la entidad sin menoscabo de las respectivas atribuciones y con respeto a las normas de convivencia que rigen la vida parlamentaria y la relaci\u00f3n del Congreso con el gobierno estatal.\n\u201cEstos nuevos equilibrios de ninguna manera deben frenar el avance del Estado de M\u00e9xico, al contrario, son un incentivo para encontrar puntos en com\u00fan que nos permitan enfrentar desaf\u00edos y resolver con talento, responsabilidad y visi\u00f3n incluyente\u201d, opin\u00f3.\n\u201cSumando talento y trabajo, el Poder Legislativo, el Poder Judicial y el Poder Ejecutivo, haremos del Estado de M\u00e9xico una tierra justa, un modelo de desarrollo y un ejemplo de bienestar para las familias\u201d, finaliz\u00f3 el mandatario mexiquense.\n\nNombre y Correo obligatorios (Tu correo electr\u00f3nico no ser\u00e1 visible).", "url": "http://diario-puntual.com.mx/llama-del-mazo-a-sumar-trabajo-y-talento-para-hacer-del-edomex-una-tierra-justa/"},
{"date": "2018-09-05T00:00:00-06:00", "topic": null, "title": "Miguel S\u00e1mano ser\u00e1 6 a\u00f1os continuos diputado local", "text": "Grupo Puntal / Jos\u00e9 Contreras Contreras \nTOLUCA, M\u00e9xico, 5 de Septiembre de 2018.- Rodolfo Jard\u00f3n rompi\u00f3 un r\u00e9cord de la pol\u00edtica mexiquense, cuando ayer, menos de 24 horas despu\u00e9s de rendir protesta como diputado local del Partido Revolucionario Institucional (PRI), solicit\u00f3 y obtuvo licencia definitiva para separarse al cargo, por as\u00ed convenir a sus intereses.\nMiguel S\u00e1mano Peralta, quien aparec\u00eda como suplente en esa f\u00f3rmula priista, protest\u00f3 como diputado de la LX Legislatura del Estado de M\u00e9xico, con lo que de paso se convirti\u00f3 tambi\u00e9n en el primer legislador mexiquense que cumplir\u00e1 6 a\u00f1os continuos en esa responsabilidad.\nS\u00e1mano Peralta fue tambi\u00e9n designado por unanimidad de los diputados locales priistas como su coordinador, responsabilidad que tambi\u00e9n desarroll\u00f3 en la pasada (LIX) Legislatura local, donde adem\u00e1s fue presidente de la Junta de Coordinaci\u00f3n Pol\u00edtica.\nMiguel S\u00e1mano Peralta, oriundo de Acambay, Estado de M\u00e9xico, ha sido adem\u00e1s diputado federal, posici\u00f3n a la que lleg\u00f3 por el Partido Verde Ecologista de M\u00e9xico.\nLa experiencia pol\u00edtica de S\u00e1mano Peralta es innegable, pues ha desempe\u00f1ado diversos cargos dentro de la administraci\u00f3n p\u00fablica estatal, entre ellas la de Secretario Particular del ex gobernador Arturo Montiel Rojas.\nEn el \u00e1mbito legislativo, Miguel S\u00e1mano Peralta se caracteriz\u00f3 por su capacidad de conciliaci\u00f3n como presidente de la Junta de Coordinaci\u00f3n Pol\u00edtica, desde donde condujo las juntas de coordinaci\u00f3n entre los l\u00edderes de las diferentes fracciones pol\u00edticas de las que salieron los consensos necesarios para la aprobaci\u00f3n de cientos de reformas y adiciones a leyes y reglamentos para la modernizaci\u00f3n del marco jur\u00eddico del Estado de M\u00e9xico.\n\nNombre y Correo obligatorios (Tu correo electr\u00f3nico no ser\u00e1 visible).", "url": "http://diario-puntual.com.mx/miguel-samano-sera-6-anos-continuos-diputado-local/"}]
\ No newline at end of file
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html
import scrapy
class NoticiasItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field()
text = scrapy.Field()
date = scrapy.Field()
location = scrapy.Field()
author = scrapy.Field()
topic = scrapy.Field()
url = scrapy.Field()
# -*- coding: utf-8 -*-
# Define here the models for your spider middleware
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/spider-middleware.html
from scrapy import signals
class DiariopuntualSpiderMiddleware(object):
# Not all methods need to be defined. If a method is not defined,
# scrapy acts as if the spider middleware does not modify the
# passed objects.
@classmethod
def from_crawler(cls, crawler):
# This method is used by Scrapy to create your spiders.
s = cls()
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
return s
def process_spider_input(self, response, spider):
# Called for each response that goes through the spider
# middleware and into the spider.
# Should return None or raise an exception.
return None
def process_spider_output(self, response, result, spider):
# Called with the results returned from the Spider, after
# it has processed the response.
# Must return an iterable of Request, dict or Item objects.
for i in result:
yield i
def process_spider_exception(self, response, exception, spider):
# Called when a spider or process_spider_input() method
# (from other spider middleware) raises an exception.
# Should return either None or an iterable of Response, dict
# or Item objects.
pass
def process_start_requests(self, start_requests, spider):
# Called with the start requests of the spider, and works
# similarly to the process_spider_output() method, except
# that it doesn’t have a response associated.
# Must return only requests (not items).
for r in start_requests:
yield r
def spider_opened(self, spider):
spider.logger.info('Spider opened: %s' % spider.name)
class DiariopuntualDownloaderMiddleware(object):
# Not all methods need to be defined. If a method is not defined,
# scrapy acts as if the downloader middleware does not modify the
# passed objects.
@classmethod
def from_crawler(cls, crawler):
# This method is used by Scrapy to create your spiders.
s = cls()
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
return s
def process_request(self, request, spider):
# Called for each request that goes through the downloader
# middleware.
# Must either:
# - return None: continue processing this request
# - or return a Response object
# - or return a Request object
# - or raise IgnoreRequest: process_exception() methods of
# installed downloader middleware will be called
return None
def process_response(self, request, response, spider):
# Called with the response returned from the downloader.
# Must either;
# - return a Response object
# - return a Request object
# - or raise IgnoreRequest
return response
def process_exception(self, request, exception, spider):
# Called when a download handler or a process_request()
# (from other downloader middleware) raises an exception.
# Must either:
# - return None: continue processing this exception
# - return a Response object: stops process_exception() chain
# - return a Request object: stops process_exception() chain
pass
def spider_opened(self, spider):
spider.logger.info('Spider opened: %s' % spider.name)
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import json
from collections import OrderedDict
class JsonWriterPipeline(object):
def __init__(self, filename):
self.filename = filename
@classmethod
def from_crawler(cls, crawler):
# Here you get whatever value was passed through the "filename" command line parameter
settings = crawler.settings
filename = settings.get('filename')
# Instantiate the pipeline with the file name
return cls(filename)
def open_spider(self, spider):
self.counter = 0
self.file = open(self.filename, 'w')
self.file.write("[")
def close_spider(self, spider):
self.file.write("]")
self.file.close()
def process_item(self, item, spider):
# print("this is my item", item)
row = []
try:
row.append(("date", item['date']))
except:
pass
try:
row.append(("topic", item['topic']))
except:
pass
try:
row.append(("title", item['title']))
except:
pass
try:
row.append(("author", item['author']))
except:
pass
try:
row.append(("location", item['location']))
except:
pass
try:
row.append(("text", item['text']))
except:
pass
try:
row.append(("url", item['url']))
except:
pass
line = OrderedDict(row)
self.counter += 1
if self.counter == 1:
self.file.write(json.dumps(line))
elif self.counter > 1:
self.file.write(",\n" + json.dumps(line))
return item
# -*- coding: utf-8 -*-
# Scrapy settings for diarioPuntual project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
# https://doc.scrapy.org/en/latest/topics/settings.html
# https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
# https://doc.scrapy.org/en/latest/topics/spider-middleware.html
BOT_NAME = 'diarioPuntual'
SPIDER_MODULES = ['diarioPuntual.spiders']
NEWSPIDER_MODULE = 'diarioPuntual.spiders'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'diarioPuntual (+http://www.yourdomain.com)'
# Obey robots.txt rules
# ROBOTSTXT_OBEY = True
# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32
# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
DOWNLOAD_DELAY = 0.5
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16
# Disable cookies (enabled by default)
COOKIES_ENABLED = False
# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False
# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
# 'Accept-Language': 'en',
#}
# Enable or disable spider middlewares
# See https://doc.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
# 'diarioPuntual.middlewares.DiariopuntualSpiderMiddleware': 543,
#}
# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {
# 'diarioPuntual.middlewares.DiariopuntualDownloaderMiddleware': 543,
#}
# Enable or disable extensions
# See https://doc.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
# 'scrapy.extensions.telnet.TelnetConsole': None,
#}
# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
'diarioPuntual.pipelines.JsonWriterPipeline': 300,
}
# Enable and configure the AutoThrottle extension (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False
# Enable and configure HTTP caching (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
# This package will contain the spiders of your Scrapy project
#
# Please refer to the documentation for information on how to create and manage
# your spiders.
# -*- coding: utf-8 -*-
"""
MEDIA:
Puntual, EDOMEX
USAGE:
## Get all the news from a specific date. ##
---------------------------------------------------------------------------------------------
$ cd diarioPuntual/
$ scrapy crawl noticias --nolog -s filename=2018-09-05.json -a year=2018 -a month=9 -a day=5
"""
import scrapy, re
from diarioPuntual.items import NoticiasItem
from datetime import datetime, timedelta, tzinfo
TAG_RE = re.compile(r'<[^>]+>')
def remove_tags(text):
return TAG_RE.sub('', text)
class UTC(tzinfo):
"""
Class for Time Zone
"""
def utcoffset(self, dt):
## Time zone for EDOMEX: UTC-6 ##
return timedelta(hours=-6)
def tzname(self, dt):
## Time zone name ##
return 'UTC-6'
class QuotesSpider(scrapy.Spider):
"""
Basic Scrapy Spider class
"""
name = "noticias"
def start_requests(self):
self.tz = UTC()
self.year = getattr(self, "year", None)
self.month = getattr(self, "month", None)
self.day = getattr(self, "day", None)
baseURL = "http://diario-puntual.com.mx/{0}/{1}/{2}/".format(self.year, self.month.zfill(2), self.day.zfill(2))
yield scrapy.Request(url=baseURL, callback=self.parse)
def parse(self, response):
for link in response.css('div.post-column').css('h2.posttitle > a::attr(href)').extract():
yield scrapy.Request(url=link, callback=self.parse_item)
next_page = response.css('div.archive-pagination').xpath('./a[@class="next page-numbers"]/@href').extract_first()
if next_page is not None:
yield scrapy.Request(url=next_page, callback=self.parse)
def parse_item(self, response):
item = NoticiasItem()
text = ''
news_date = datetime(int(self.year), int(self.month), int(self.day), tzinfo=self.tz).isoformat("T")
title = response.css('div.post-container').css('h1.post-title').extract_first()
if title is not None : title = remove_tags(title)
topic = None
for p in response.css('div.post-column > article').css('p').extract():
p = remove_tags(p)
text += p + "\n"
## News item info ##
item['date'] = news_date
item['title'] = title
item['topic'] = topic
item['text'] = text.strip()
item['url'] = response.url
yield item
# Automatically created by: scrapy startproject
#
# For more information about the [deploy] section see:
# https://scrapyd.readthedocs.io/en/latest/deploy.html
[settings]
default = diarioPuntual.settings
[deploy]
#url = http://localhost:6800/
project = diarioPuntual
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html
import scrapy
class NoticiasItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field()
text = scrapy.Field()
date = scrapy.Field()
location = scrapy.Field()
author = scrapy.Field()
topic = scrapy.Field()
url = scrapy.Field()
# -*- coding: utf-8 -*-
# Define here the models for your spider middleware
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/spider-middleware.html
from scrapy import signals
class ElcomentarioSpiderMiddleware(object):
# Not all methods need to be defined. If a method is not defined,
# scrapy acts as if the spider middleware does not modify the
# passed objects.
@classmethod
def from_crawler(cls, crawler):
# This method is used by Scrapy to create your spiders.
s = cls()
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
return s
def process_spider_input(self, response, spider):
# Called for each response that goes through the spider
# middleware and into the spider.
# Should return None or raise an exception.
return None
def process_spider_output(self, response, result, spider):
# Called with the results returned from the Spider, after
# it has processed the response.
# Must return an iterable of Request, dict or Item objects.
for i in result:
yield i
def process_spider_exception(self, response, exception, spider):
# Called when a spider or process_spider_input() method
# (from other spider middleware) raises an exception.
# Should return either None or an iterable of Response, dict
# or Item objects.
pass
def process_start_requests(self, start_requests, spider):
# Called with the start requests of the spider, and works
# similarly to the process_spider_output() method, except
# that it doesn’t have a response associated.
# Must return only requests (not items).
for r in start_requests:
yield r
def spider_opened(self, spider):
spider.logger.info('Spider opened: %s' % spider.name)
class ElcomentarioDownloaderMiddleware(object):
# Not all methods need to be defined. If a method is not defined,
# scrapy acts as if the downloader middleware does not modify the
# passed objects.
@classmethod
def from_crawler(cls, crawler):
# This method is used by Scrapy to create your spiders.
s = cls()
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
return s
def process_request(self, request, spider):
# Called for each request that goes through the downloader
# middleware.
# Must either:
# - return None: continue processing this request
# - or return a Response object
# - or return a Request object
# - or raise IgnoreRequest: process_exception() methods of
# installed downloader middleware will be called
return None
def process_response(self, request, response, spider):
# Called with the response returned from the downloader.
# Must either;
# - return a Response object
# - return a Request object
# - or raise IgnoreRequest
return response
def process_exception(self, request, exception, spider):
# Called when a download handler or a process_request()
# (from other downloader middleware) raises an exception.
# Must either:
# - return None: continue processing this exception
# - return a Response object: stops process_exception() chain
# - return a Request object: stops process_exception() chain
pass
def spider_opened(self, spider):
spider.logger.info('Spider opened: %s' % spider.name)
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import json
from collections import OrderedDict
class JsonWriterPipeline(object):
def __init__(self, filename):
self.filename = filename
@classmethod
def from_crawler(cls, crawler):
# Here you get whatever value was passed through the "filename" command line parameter
settings = crawler.settings
filename = settings.get('filename')
# Instantiate the pipeline with the file name
return cls(filename)
def open_spider(self, spider):
self.counter = 0
self.file = open(self.filename, 'w')
self.file.write("[")
def close_spider(self, spider):
self.file.write("]")
self.file.close()
def process_item(self, item, spider):
# print("this is my item", item)
row = []
try:
row.append(("date", item['date']))
except:
pass
try:
row.append(("topic", item['topic']))
except:
pass
try:
row.append(("title", item['title']))
except:
pass
try:
row.append(("author", item['author']))
except:
pass
try:
row.append(("location", item['location']))
except:
pass
try:
row.append(("text", item['text']))
except:
pass
try:
row.append(("url", item['url']))
except:
pass
line = OrderedDict(row)
self.counter += 1
if self.counter == 1:
self.file.write(json.dumps(line))
elif self.counter > 1:
self.file.write(",\n" + json.dumps(line))
return item
# -*- coding: utf-8 -*-
# Scrapy settings for elComentario project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
# https://doc.scrapy.org/en/latest/topics/settings.html
# https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
# https://doc.scrapy.org/en/latest/topics/spider-middleware.html
BOT_NAME = 'elComentario'
SPIDER_MODULES = ['elComentario.spiders']
NEWSPIDER_MODULE = 'elComentario.spiders'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'elComentario (+http://www.yourdomain.com)'
# Obey robots.txt rules
# ROBOTSTXT_OBEY = True
# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32
# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
DOWNLOAD_DELAY = 0.5
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16
# Disable cookies (enabled by default)
COOKIES_ENABLED = False
# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False
# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
# 'Accept-Language': 'en',
#}
# Enable or disable spider middlewares
# See https://doc.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
# 'elComentario.middlewares.ElcomentarioSpiderMiddleware': 543,
#}
# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {
# 'elComentario.middlewares.ElcomentarioDownloaderMiddleware': 543,
#}
# Enable or disable extensions
# See https://doc.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
# 'scrapy.extensions.telnet.TelnetConsole': None,
#}
# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
'elComentario.pipelines.JsonWriterPipeline': 300,
}
# Enable and configure the AutoThrottle extension (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False
# Enable and configure HTTP caching (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
# This package will contain the spiders of your Scrapy project
#
# Please refer to the documentation for information on how to create and manage
# your spiders.
# -*- coding: utf-8 -*-
"""
MEDIA:
El Comentario, Colima
USAGE:
## Get all the news from a specific date. ##
---------------------------------------------------------------------------------------------
$ cd elComentario/
$ scrapy crawl noticias --nolog -s filename=2018-09-05.json -a year=2018 -a month=9 -a day=5
"""
import scrapy, re
from elComentario.items import NoticiasItem
TAG_RE = re.compile(r'<[^>]+>')
def remove_tags(text):
return TAG_RE.sub('', text)
class QuotesSpider(scrapy.Spider):
"""
Basic Scrapy Spider class
"""
name = "noticias"
def start_requests(self):
year = getattr(self, "year", None)
month = getattr(self, "month", None)
day = getattr(self, "day", None)
baseURL = "https://elcomentario.ucol.mx/{0}/{1}/{2}/".format(year, month.zfill(2), day.zfill(2))
yield scrapy.Request(url=baseURL, callback=self.parse)
def parse(self, response):
for link in response.css('div.articles').xpath('./article/div[@class="cnt"]/h3/a/@href').extract():
yield scrapy.Request(url=link, callback=self.parse_item)
next_page = response.css('div.post-pagination').xpath('./a[@title="Next page"]/@href').extract_first()
if next_page is not None:
yield scrapy.Request(url=next_page, callback=self.parse)
def parse_item(self, response):
item = NoticiasItem()
text = ''
news_date = response.xpath('//meta[@property="article:published_time"]/@content').extract_first()
title = response.xpath('//header/h1').extract_first()
if title is not None : title = remove_tags(title)
topic = response.css('a.theme').extract_first()
if topic is not None : topic = remove_tags(topic)
for p in response.css('div.pf-content').css('p').extract():
p = remove_tags(p)
text += p + "\n"
text = text.strip()
## News item info ##
item['date'] = news_date
item['title'] = title
item['topic'] = topic
item['text'] = text
item['url'] = response.url
yield item
# Automatically created by: scrapy startproject
#
# For more information about the [deploy] section see:
# https://scrapyd.readthedocs.io/en/latest/deploy.html
[settings]
default = elComentario.settings
[deploy]
#url = http://localhost:6800/
project = elComentario
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html
import scrapy
class NoticiasItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field()
text = scrapy.Field()
date = scrapy.Field()
location = scrapy.Field()
author = scrapy.Field()
topic = scrapy.Field()
url = scrapy.Field()
# -*- coding: utf-8 -*-
# Define here the models for your spider middleware
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/spider-middleware.html
from scrapy import signals
class ElsurSpiderMiddleware(object):
# Not all methods need to be defined. If a method is not defined,
# scrapy acts as if the spider middleware does not modify the
# passed objects.
@classmethod
def from_crawler(cls, crawler):
# This method is used by Scrapy to create your spiders.
s = cls()
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
return s
def process_spider_input(self, response, spider):
# Called for each response that goes through the spider
# middleware and into the spider.
# Should return None or raise an exception.
return None
def process_spider_output(self, response, result, spider):
# Called with the results returned from the Spider, after
# it has processed the response.
# Must return an iterable of Request, dict or Item objects.
for i in result:
yield i
def process_spider_exception(self, response, exception, spider):
# Called when a spider or process_spider_input() method
# (from other spider middleware) raises an exception.
# Should return either None or an iterable of Response, dict
# or Item objects.
pass
def process_start_requests(self, start_requests, spider):
# Called with the start requests of the spider, and works
# similarly to the process_spider_output() method, except
# that it doesn’t have a response associated.
# Must return only requests (not items).
for r in start_requests:
yield r
def spider_opened(self, spider):
spider.logger.info('Spider opened: %s' % spider.name)
class ElsurDownloaderMiddleware(object):
# Not all methods need to be defined. If a method is not defined,
# scrapy acts as if the downloader middleware does not modify the
# passed objects.
@classmethod
def from_crawler(cls, crawler):
# This method is used by Scrapy to create your spiders.
s = cls()
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
return s
def process_request(self, request, spider):
# Called for each request that goes through the downloader
# middleware.
# Must either:
# - return None: continue processing this request
# - or return a Response object
# - or return a Request object
# - or raise IgnoreRequest: process_exception() methods of
# installed downloader middleware will be called
return None
def process_response(self, request, response, spider):
# Called with the response returned from the downloader.
# Must either;
# - return a Response object
# - return a Request object
# - or raise IgnoreRequest
return response
def process_exception(self, request, exception, spider):
# Called when a download handler or a process_request()
# (from other downloader middleware) raises an exception.
# Must either:
# - return None: continue processing this exception
# - return a Response object: stops process_exception() chain
# - return a Request object: stops process_exception() chain
pass
def spider_opened(self, spider):
spider.logger.info('Spider opened: %s' % spider.name)
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import json
from collections import OrderedDict
class JsonWriterPipeline(object):
def __init__(self, filename):
self.filename = filename
@classmethod
def from_crawler(cls, crawler):
# Here you get whatever value was passed through the "filename" command line parameter
settings = crawler.settings
filename = settings.get('filename')
# Instantiate the pipeline with the file name
return cls(filename)
def open_spider(self, spider):
self.counter = 0
self.file = open(self.filename, 'w')
self.file.write("[")
def close_spider(self, spider):
self.file.write("]")
self.file.close()
def process_item(self, item, spider):
# print("this is my item", item)
row = []
try:
row.append(("date", item['date']))
except:
pass
try:
row.append(("topic", item['topic']))
except:
pass
try:
row.append(("title", item['title']))
except:
pass
try:
row.append(("author", item['author']))
except:
pass
try:
row.append(("location", item['location']))
except:
pass
try:
row.append(("text", item['text']))
except:
pass
try:
row.append(("url", item['url']))
except:
pass
line = OrderedDict(row)
self.counter += 1
if self.counter == 1:
self.file.write(json.dumps(line))
elif self.counter > 1:
self.file.write(",\n" + json.dumps(line))
return item
# -*- coding: utf-8 -*-
# Scrapy settings for elSur project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
# https://doc.scrapy.org/en/latest/topics/settings.html
# https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
# https://doc.scrapy.org/en/latest/topics/spider-middleware.html
BOT_NAME = 'elSur'
SPIDER_MODULES = ['elSur.spiders']
NEWSPIDER_MODULE = 'elSur.spiders'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'elSur (+http://www.yourdomain.com)'
# Obey robots.txt rules
# ROBOTSTXT_OBEY = True
# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32
# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
DOWNLOAD_DELAY = 0.5
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16
# Disable cookies (enabled by default)
COOKIES_ENABLED = False
# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False
# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
# 'Accept-Language': 'en',
#}
# Enable or disable spider middlewares
# See https://doc.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
# 'elSur.middlewares.ElsurSpiderMiddleware': 543,
#}
# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {
# 'elSur.middlewares.ElsurDownloaderMiddleware': 543,
#}
# Enable or disable extensions
# See https://doc.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
# 'scrapy.extensions.telnet.TelnetConsole': None,
#}
# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
'elSur.pipelines.JsonWriterPipeline': 300,
}
# Enable and configure the AutoThrottle extension (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False
# Enable and configure HTTP caching (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
# This package will contain the spiders of your Scrapy project
#
# Please refer to the documentation for information on how to create and manage
# your spiders.
# -*- coding: utf-8 -*-
"""
MEDIA:
El Sur, Guerrero
USAGE:
## Get all the news from a specific date. ##
---------------------------------------------------------------------------------------------
$ cd elComentario/
$ scrapy crawl noticias --nolog -s filename=2018-09-05.json -a year=2018 -a month=9 -a day=5
"""
import scrapy, re
from elSur.items import NoticiasItem
TAG_RE = re.compile(r'<[^>]+>')
def remove_tags(text):
return TAG_RE.sub('', text)
HEAD_RE_1 = re.compile(r'Texto:.*?[/y] Foto:.*?\n(.*?[0-9]{1,2} de [a-zA-Z]*? de [0-9]{4}\.)?')
HEAD_RE_2 = re.compile(r'Texto y foto:.*?\n(.*?[0-9]{1,2} de [a-zA-Z]*? de [0-9]{4}\.)?')
class QuotesSpider(scrapy.Spider):
"""
Basic Scrapy Spider class
"""
name = "noticias"
def start_requests(self):
year = getattr(self, "year", None)
month = getattr(self, "month", None)
day = getattr(self, "day", None)
baseURL = "https://suracapulco.mx/{0}/{1}/{2}/".format(year, month.zfill(2), day.zfill(2))
yield scrapy.Request(url=baseURL, callback=self.parse)
def parse(self, response):
for link in response.css('div.dslc-blog-posts').css('div.dslc-blog-post-title > h2 > a::attr(href)').extract():
yield scrapy.Request(url=link, callback=self.parse_item)
pag_lst = response.css('div.dslc-pagination > ul > li')
if len(pag_lst) > 0:
del pag_lst[0]
del pag_lst[0]
next_page = None
for li_obj in pag_lst:
li = remove_tags(li_obj.extract())
if not li.isdigit():
next_page = li_obj.xpath('./a/@href').extract_first()
break
if next_page is not None : yield scrapy.Request(url=next_page, callback=self.parse)
def parse_item(self, response):
item = NoticiasItem()
text = ''
news_date = response.xpath('//meta[@property="article:published_time"]/@content').extract_first()
title = response.css('div.dslc-tp-title > h1').extract_first()
if title is not None : title = remove_tags(title)
topic = response.css('div.dslc-tp-meta').xpath('./ul/li[3]/a[1]').extract_first()
if topic is not None : topic = remove_tags(topic)
for p in response.xpath('//div[@id="dslc-theme-content-inner"]').css('p').extract():
p = remove_tags(p)
text += p + "\n"
dateline = response.css('span.dateline').extract_first()
if dateline is not None:
dateline = remove_tags(dateline)
text = text.replace(dateline, '')
text = text.replace(u'\u00a0', ' ')
text = HEAD_RE_1.sub('', text)
text = HEAD_RE_2.sub('', text)
## News item info ##
item['date'] = news_date
item['title'] = title
item['topic'] = topic
item['text'] = text.strip()
item['url'] = response.url
yield item
# Automatically created by: scrapy startproject
#
# For more information about the [deploy] section see:
# https://scrapyd.readthedocs.io/en/latest/deploy.html
[settings]
default = elSur.settings
[deploy]
#url = http://localhost:6800/
project = elSur
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment