News-Please es un código de noticias de código abierto y fácil de usar que extrae información estructurada de casi cualquier sitio web de noticias. Puede seguir de manera recursiva hipervínculos internos y leer Feeds RSS para obtener artículos más recientes y también archivados. Solo necesita proporcionar la URL raíz del sitio web de noticias para rastrearlo por completo. News-Please combina el poder de múltiples bibliotecas y herramientas de vanguardia, como Scrapy, Newspaper y Legability.
News-Please también presenta un modo de biblioteca, que permite a los desarrolladores de Python utilizar la funcionalidad de rastreo y extracción dentro de su propio programa. Además, News-Please permite rastrear y extraer artículos del archivo de noticias (muy) en CommonCrawl.org.
Si desea contribuir a News-Please, primero lea aquí.
23/03/2021: Si está interesado en la clasificación de sentimientos en artículos de noticias, consulte nuestro conjunto de datos a gran escala para la clasificación de sentimientos dependiente del objetivo. También publicamos un modelo neuronal fácil de usar que logra un rendimiento de última generación. Visite el proyecto aquí.
06/01/2018: Si está interesado en la extracción de eventos de las noticias, es posible que también desee consultar nuestro nuevo proyecto, Giveme5w1h, una herramienta que extrae frases que responden a las cinco preguntas periodísticas W y One H para describir el evento principal de un artículo, es decir, quién hizo qué, cuándo, por qué y cómo y cómo.
News-Please extrae los siguientes atributos de artículos de noticias. Aquí se puede encontrar un archivo JSON ejemplar, según lo extraído por News-Please.
News-Please admite tres casos de uso principales, que se explican con más detalle a continuación.
python3 -m newsplease.examples.commoncrawl ¡Es súper fácil, lo prometemos!
News-Please se ejecuta en Python 3.8+.
$ pip install news-pleasePuede acceder a la funcionalidad central de News-Please, es decir, la extracción de información semiestructurada de uno o más artículos de noticias, en su propio código mediante el uso de noticias en modo biblioteca. Si desea utilizar la extracción completa del sitio web de News-Please (dada solo la URL raíz) o el modo de rastreo continuo (usando RSS), deberá usar el modo CLI, que se describe más adelante.
from newsplease import NewsPlease
article = NewsPlease . from_url ( 'https://www.nytimes.com/2017/02/23/us/politics/cpac-stephen-bannon-reince-priebus.html?hp' )
print ( article . title )Aquí se puede encontrar una muestra de un artículo extraído (como un archivo JSON).
Si desea rastrear múltiples artículos a la vez, opcionalmente con cualquier parámetro opcional tomado por solicitud.Request ()
NewsPlease . from_urls ([ url1 , url2 , ...], request_args = { "timeout" : 6 })o si tiene un archivo que contiene todas las URL (cada línea que contiene una sola URL)
NewsPlease . from_file ( path )o si tiene datos HTML sin procesar (también puede proporcionar la URL original para aumentar la precisión de extraer la fecha de publicación)
NewsPlease . from_html ( html , url = None )O si tiene un archivo WARC (también consulte nuestro flujo de trabajo CommonCrawl, que proporciona métodos convenientes para filtrar el archivo de CommonCrawl para medios de comunicación específicos y fechas)
NewsPlease . from_warc ( warc_record )En modo de biblioteca, News-Please intentará descargar y extraer información de cada URL. Las funciones descritas anteriormente están bloqueando, es decir, regresarán una vez que News-Please haya intentado todas las URL. La lista resultante contiene todos los artículos extraídos con éxito.
Finalmente, puede procesar la información extraída contenida en los objetos del artículo. Por ejemplo, para exportar a un formato JSON, puede usar:
import json
with open ( "article.json" , "w" ) as file :
json . dump ( article . get_serializable_dict (), file )$ news-please News-Please comenzará a rastrear algunas páginas de ejemplos. Para terminar el proceso, presione CTRL+C . News-Please se cerrará en 5-60 segundos. También puede presionar CTRL+C dos veces, lo que matará inmediatamente el proceso (sin embargo, no recomendado).
Los resultados se almacenan de forma predeterminada en archivos JSON en la carpeta data . En la configuración predeterminada, News-Please también almacena los archivos HTML originales.
Lo más probable es que no querrá gatear desde los sitios web proporcionados en nuestra configuración de ejemplo. Simplemente diríjase al archivo sitelist.hjson y agregue las URL raíz de las páginas web de los medios de comunicación de su elección. News-Please también puede extraer los eventos más recientes del proyecto GDELT, ver aquí.
News-Please también admite la exportación a Elasticsearch. El uso de Elasticsearch también habilitará la función de versiones. Primero, habilitelo en el directorio config.cfg en el directorio de configuración, que es de forma predeterminada ~/news-please/config pero también se puede cambiar con el parámetro -c a una ubicación personalizada. En caso de que el directorio no exista, se creará un directorio predeterminado en la ubicación especificada.
[Scrapy]
ITEM_PIPELINES = {
'newsplease.pipeline.pipelines.ArticleMasterExtractor' :100 ,
'newsplease.pipeline.pipelines.ElasticsearchStorage' :350
} ¡Eso es todo! Excepto, si su base de datos ElasticSearch no se encuentra en http://localhost:9200 , utiliza un nombre de usuario/contraseña diferente o autenticación de certificado CA. En estos casos, también deberá cambiar lo siguiente.
[Elasticsearch]
host = localhost
port = 9200
...
# Credentials used for authentication (supports CA-certificates):
use_ca_certificates = False # True if authentification needs to be performed
ca_cert_path = '/path/to/cacert.pem'
client_cert_path = '/path/to/client_cert.pem'
client_key_path = '/path/to/client_key.pem'
username = 'root'
secret = 'password' News-Please permite almacenar artículos en una base de datos PostgreSQL, incluida la función de versiones. Para exportar a PostgreSQL, abra el archivo de configuración correspondiente ( config_lib.cfg para el modo de biblioteca y config.cfg para el modo CLI) y agregue el módulo PostgresqlStorage a la tubería y ajuste las credenciales de la base de datos:
[Scrapy]
ITEM_PIPELINES = {
'newsplease.pipeline.pipelines.ArticleMasterExtractor' :100 ,
'newsplease.pipeline.pipelines.PostgresqlStorage' :350
}
[Postgresql]
# Postgresql-Connection required for saving meta-informations
host = localhost
port = 5432
database = 'news-please'
# schema = 'news-please'
user = 'user'
password = 'password' Si planea usar News-Please y su exportación a PostgreSQL en un entorno de producción, recomendamos desinstalar el paquete psycopg2-binary e instalar psycopg2 . Usamos el primero, ya que no requiere un compilador C para instalarse. Consulte aquí, para obtener más información sobre las diferencias entre psycopg2 y psycopg2-binary y cómo configurar un entorno de producción.
News-Please permite almacenar artículos en una base de datos Redis, incluida la función de versiones. Para exportar a Redis, abra el archivo de configuración correspondiente ( config_lib.cfg para el modo de biblioteca y config.cfg para el modo CLI) y agregue el módulo RedIsStorage a la tubería y ajuste las credenciales de conexión:
[Scrapy]
ITEM_PIPELINES = {
'newsplease.pipeline.pipelines.ArticleMasterExtractor' :100 ,
'newsplease.pipeline.pipelines.RedisStorage' :350
}
[Redis]
host = localhost
port = 6379
db = 0
# You can add any redis connection parameter here
ssl_check_hostname = True
username = "news-please"
max_connections = 24Esta tubería también debe ser compatible con AWS Elasticache y GCP Memorystore
Hemos recopilado un montón de información útil tanto para usuarios como para desarrolladores. Como usuario, lo más probable es que solo se ocupe de dos archivos: sitelist.hjson (para definir los sitios para que se rastreen) y config.cfg (probablemente raramente, en caso de que desee ajustar la configuración).
¡Puede encontrar más información sobre el uso y el desarrollo en nuestra wiki! Antes de contactarnos, consulte el wiki. Si aún tiene preguntas sobre cómo usar News-Please, cree una nueva pregunta en discusiones aquí en GitHub. Comprenda que no podemos proporcionar soporte individual por correo electrónico. Creemos que la ayuda es más valiosa si se comparte públicamente para que más personas puedan beneficiarse de ella. Sin embargo, si aún requiere apoyo individual, por ejemplo, debido a la confidencialidad de su proyecto, podemos brindarle una consulta privada. Contáctenos para obtener información sobre precios y más detalles.
Para los informes de errores, le pedimos que use la plantilla de informe de errores. Asegúrese de usar la última versión de News-Please, ya que no podemos brindar apoyo para versiones anteriores. Como se describió anteriormente, no podemos brindar apoyo para problemas o preguntas enviadas por correo electrónico.
¡Tus donaciones son muy apreciadas! Nos liberarán más para trabajar más en este proyecto, para asumir tareas como agregar nuevas características, soporte para fijación de errores y abordar más preocupaciones con la biblioteca.
Este proyecto no hubiera sido posible sin las contribuciones de los siguientes estudiantes (ordenados alfabéticamente):
¡También agradecemos a todos los demás contribuyentes, que puede encontrar en la página de contribuyentes!
Si está utilizando News-Please, cite nuestro artículo (Researchgate, Mendeley):
@InProceedings{Hamborg2017,
author = {Hamborg, Felix and Meuschke, Norman and Breitinger, Corinna and Gipp, Bela},
title = {news-please: A Generic News Crawler and Extractor},
year = {2017},
booktitle = {Proceedings of the 15th International Symposium of Information Science},
location = {Berlin},
doi = {10.5281/zenodo.4120316},
pages = {218--223},
month = {March}
}
Puede encontrar más información sobre este y otros proyectos de noticias en nuestro sitio web.
¿Quieres contribuir? Genial, ¡siempre estamos felices por cualquier apoyo en este proyecto! En particular, estamos buscando solicitudes de extracción que corrigan errores. También damos la bienvenida a las solicitudes de extracción que contribuyen con sus propias ideas.
Al contribuir a este proyecto, usted acepta que sus contribuciones se licenciarán bajo la licencia del proyecto.
¡Nos encantan las contribuciones de nuestros usuarios! Si planea enviar una solicitud de extracción, abra primero un problema y elimine el problema que desea solucionar o lo que desea mejorar y cómo. De esta manera, podemos discutir si su idea podría agregarse a News-Pless en primer lugar y, de ser así, cómo podría implementarse mejor para encajar en la arquitectura y el estilo de codificación. En el tema, indique que está planeando implementar las características descritas.
Desafortunadamente, no tenemos recursos para implementar funciones solicitadas por los usuarios. En cambio, le recomendamos que implementa las funciones que necesita y si desea abrir una solicitud de extracción aquí para que la comunidad también pueda beneficiarse de sus mejoras.
Licenciado bajo la licencia Apache, versión 2.0 (la "licencia"); No puede usar News-Please, excepto en cumplimiento de la licencia. Se incluye una copia de la licencia en el proyecto, consulte el archivo License.txt.
A menos que la ley aplicable sea requerida o acordado por escrito, el software distribuido bajo la licencia se distribuye de manera "como es", sin garantías o condiciones de ningún tipo, ya sea expresas o implícitas. Consulte la licencia para los permisos y limitaciones de rigor de idioma específico bajo la licencia. El logotipo de News-Please es cortesía de Mario Hamborg.
Copyright 2016-2024 El equipo de noticias