2025-12-17 05:33:00 [scrapy.utils.log] INFO: Scrapy 2.11.1 started (bot: news_scraper) 2025-12-17 05:33:00 [scrapy.utils.log] INFO: Versions: lxml 6.0.2.0, libxml2 2.14.6, cssselect 1.3.0, parsel 1.10.0, w3lib 2.3.1, Twisted 25.5.0, Python 3.11.13 (main, Aug 12 2025, 22:39:41) [GCC 14.2.0], pyOpenSSL 25.3.0 (OpenSSL 3.5.3 16 Sep 2025), cryptography 46.0.1, Platform Linux-5.15.0-157-generic-x86_64-with 2025-12-17 05:33:00 [scrapy.addons] INFO: Enabled addons: [] 2025-12-17 05:33:00 [asyncio] DEBUG: Using selector: EpollSelector 2025-12-17 05:33:00 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.asyncioreactor.AsyncioSelectorReactor 2025-12-17 05:33:00 [scrapy.utils.log] DEBUG: Using asyncio event loop: asyncio.unix_events._UnixSelectorEventLoop 2025-12-17 05:33:00 [scrapy.extensions.telnet] INFO: Telnet Password: 34c4f9fd6e8660ef 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from creating-client-class.iot-data to creating-client-class.iot-data-plane 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from before-call.apigateway to before-call.api-gateway 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from request-created.machinelearning.Predict to request-created.machine-learning.Predict 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.autoscaling.CreateLaunchConfiguration to before-parameter-build.auto-scaling.CreateLaunchConfiguration 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.route53 to before-parameter-build.route-53 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from request-created.cloudsearchdomain.Search to request-created.cloudsearch-domain.Search 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from docs.*.autoscaling.CreateLaunchConfiguration.complete-section to docs.*.auto-scaling.CreateLaunchConfiguration.complete-section 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.logs.CreateExportTask to before-parameter-build.cloudwatch-logs.CreateExportTask 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from docs.*.logs.CreateExportTask.complete-section to docs.*.cloudwatch-logs.CreateExportTask.complete-section 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.cloudsearchdomain.Search to before-parameter-build.cloudsearch-domain.Search 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from docs.*.cloudsearchdomain.Search.complete-section to docs.*.cloudsearch-domain.Search.complete-section 2025-12-17 05:33:00 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/endpoints.json 2025-12-17 05:33:00 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/sdk-default-configuration.json 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Event choose-service-name: calling handler 2025-12-17 05:33:00 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/s3/2006-03-01/service-2.json.gz 2025-12-17 05:33:00 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/s3/2006-03-01/endpoint-rule-set-1.json.gz 2025-12-17 05:33:00 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/partitions.json 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler ._handler at 0x7fbd29e68860> 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler 2025-12-17 05:33:00 [botocore.endpoint] DEBUG: Setting s3 timeout as (60, 60) 2025-12-17 05:33:00 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/_retry.json 2025-12-17 05:33:00 [botocore.client] DEBUG: Registering retry handlers for service: s3 2025-12-17 05:33:00 [botocore.utils] DEBUG: Registering S3 region redirector handler 2025-12-17 05:33:00 [botocore.utils] DEBUG: Registering S3Express Identity Resolver 2025-12-17 05:33:00 [scrapy.middleware] INFO: Enabled extensions: ['scrapy.extensions.corestats.CoreStats', 'scrapy.extensions.telnet.TelnetConsole', 'scrapy.extensions.memusage.MemoryUsage', 'scrapy.extensions.closespider.CloseSpider', 'scrapy.extensions.feedexport.FeedExporter', 'scrapy.extensions.logstats.LogStats', 'scrapy.extensions.throttle.AutoThrottle'] 2025-12-17 05:33:00 [scrapy.crawler] INFO: Overridden settings: {'AUTOTHROTTLE_ENABLED': True, 'BOT_NAME': 'news_scraper', 'CLOSESPIDER_TIMEOUT': 1800, 'CONCURRENT_REQUESTS': 4, 'DOWNLOAD_DELAY': 2, 'FEED_EXPORT_ENCODING': 'utf-8', 'LOG_FILE': '/opt/scrapyd/logs/news_scraper/vnexpress_timestamp/d276c038db0911f099e2d6783c969646.log', 'NEWSPIDER_MODULE': 'news_scraper.spiders', 'REQUEST_FINGERPRINTER_IMPLEMENTATION': '2.7', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['news_scraper.spiders'], 'TWISTED_REACTOR': 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'} 2025-12-17 05:33:00 [scrapy.middleware] INFO: Enabled downloader middlewares: ['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware', 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware', 'news_scraper.middlewares.NewsScraperDownloaderMiddleware', 'scrapy.downloadermiddlewares.retry.RetryMiddleware', 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware', 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware', 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware', 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware', 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware', 'scrapy.downloadermiddlewares.stats.DownloaderStats'] 2025-12-17 05:33:00 [scrapy.middleware] INFO: Enabled spider middlewares: ['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 'scrapy.spidermiddlewares.referer.RefererMiddleware', 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 'scrapy.spidermiddlewares.depth.DepthMiddleware'] 2025-12-17 05:33:00 [scrapy.middleware] INFO: Enabled item pipelines: [] 2025-12-17 05:33:00 [scrapy.core.engine] INFO: Spider opened 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from creating-client-class.iot-data to creating-client-class.iot-data-plane 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from before-call.apigateway to before-call.api-gateway 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from request-created.machinelearning.Predict to request-created.machine-learning.Predict 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.autoscaling.CreateLaunchConfiguration to before-parameter-build.auto-scaling.CreateLaunchConfiguration 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.route53 to before-parameter-build.route-53 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from request-created.cloudsearchdomain.Search to request-created.cloudsearch-domain.Search 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from docs.*.autoscaling.CreateLaunchConfiguration.complete-section to docs.*.auto-scaling.CreateLaunchConfiguration.complete-section 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.logs.CreateExportTask to before-parameter-build.cloudwatch-logs.CreateExportTask 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from docs.*.logs.CreateExportTask.complete-section to docs.*.cloudwatch-logs.CreateExportTask.complete-section 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.cloudsearchdomain.Search to before-parameter-build.cloudsearch-domain.Search 2025-12-17 05:33:00 [botocore.hooks] DEBUG: Changing event name from docs.*.cloudsearchdomain.Search.complete-section to docs.*.cloudsearch-domain.Search.complete-section 2025-12-17 05:33:00 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/endpoints.json 2025-12-17 05:33:01 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/sdk-default-configuration.json 2025-12-17 05:33:01 [botocore.hooks] DEBUG: Event choose-service-name: calling handler 2025-12-17 05:33:01 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/s3/2006-03-01/service-2.json.gz 2025-12-17 05:33:01 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/s3/2006-03-01/endpoint-rule-set-1.json.gz 2025-12-17 05:33:01 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/partitions.json 2025-12-17 05:33:01 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler 2025-12-17 05:33:01 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler ._handler at 0x7fbd28ed1940> 2025-12-17 05:33:01 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler 2025-12-17 05:33:01 [botocore.endpoint] DEBUG: Setting s3 timeout as (60, 60) 2025-12-17 05:33:01 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/_retry.json 2025-12-17 05:33:01 [botocore.client] DEBUG: Registering retry handlers for service: s3 2025-12-17 05:33:01 [botocore.utils] DEBUG: Registering S3 region redirector handler 2025-12-17 05:33:01 [botocore.utils] DEBUG: Registering S3Express Identity Resolver 2025-12-17 05:33:01 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2025-12-17 05:33:01 [vnexpress_timestamp] INFO: Spider opened: vnexpress_timestamp 2025-12-17 05:33:01 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6025 2025-12-17 05:33:01 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None) 2025-12-17 05:33:06 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None) 2025-12-17 05:33:09 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/) 2025-12-17 05:33:11 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:33:11 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Lúc 11h ngày 17/12, số liệu từ hai trạm quan trắc của Cục Môi trường cho thấy chất lượng không khí Hà Nội ở mức xấu. Trạm tại cổng Đại học Bách khoa Hà Nội trên đường Giải Phóng ghi nhận AQI 178, trạm tại 556 Nguyễn Văn Cừ là 160. Tình trạng ô nhiễm bắt đầu tăng từ chiều 16/12, sau khi không khí lạnh suy yếu. Trước đó, Hà Nội có khoảng 3 ngày liên tiếp chất lượng không khí ở mức tốt, với AQI dưới 50. Ngoài Hà Nội, một số địa phương miền Bắc cũng ghi nhận chất lượng không khí xấu. Trạm quan trắc tại 437 Nguyễn Văn Linh, tỉnh Hưng Yên ghi nhận AQI 167; trạm tại 106 Trần Hưng Đạo, thành phố Hải Dương cũ (nay là TP Hải Phòng) ghi nhận AQI 160. Thái Nguyên và Bắc Giang có chất lượng không khí ở mức kém. AQI là chỉ số chất lượng không khí, phản ánh mức độ ô nhiễm và ảnh hưởng đến sức khỏe con người; chỉ số càng cao, nguy cơ tác động càng lớn. Theo cơ quan chức năng, ô nhiễm không khí hiện nay chủ yếu do bụi mịn PM2.5. Dữ liệu từ hệ thống IQAir cho thấy trưa 17/12, Hà Nội đứng thứ 12 trong danh sách các thành phố ô nhiễm không khí trên thế giới với chỉ số 179; thành phố đứng đầu là Sarajevo (Bosnia và Herzegovina) với AQI 401. Tại Hà Nội, trạm công viên Trung Yên ghi nhận AQI cao nhất 256, các điểm Hồ Tây, Hoàng Quốc Việt, Trấn Vũ dao động trong khoảng 170-180. Cục Môi trường dự báo chất lượng không khí những ngày tới tiếp tục xấu đi. Ngày 18/12, AQI tại Hà Nội, Hưng Yên, Hải Phòng, Ninh Bình, Bắc Ninh có thể vượt 200, lên mức rất xấu; trong đó Ninh Bình và Hưng Yên có khả năng trên 230. Theo hệ thống dự báo chất lượng không khí của Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội, miền Bắc đang trong đợt ô nhiễm kéo dài từ ngày 16 đến 20/12, đỉnh ô nhiễm rơi vào khoảng ngày 19/12 trước khi giảm dần do không khí lạnh tăng cường. Trước đó từ ngày 8 đến 14/12, miền Bắc, đặc biệt là Hà Nội, đã trải qua đợt ô nhiễm không khí nghiêm trọng nhất từ đầu mùa đông. Đêm 12/12, trạm quan trắc của Cục Môi trường ghi nhận AQI lên 282, tiệm cận mức nguy hại; trên hệ thống IQAir, nhiều điểm đo tại Hà Nội hiển thị AQI mức nguy hại - trên 300."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2025-12-17 05:33:11 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2025-12-17 05:33:11 [httpcore.connection] DEBUG: connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=900 socket_options=None 2025-12-17 05:33:11 [httpcore.connection] DEBUG: connect_tcp.complete return_value= 2025-12-17 05:33:11 [httpcore.connection] DEBUG: start_tls.started ssl_context= server_hostname='api.openai.com' timeout=900 2025-12-17 05:33:11 [httpcore.connection] DEBUG: start_tls.complete return_value= 2025-12-17 05:33:11 [httpcore.http11] DEBUG: send_request_headers.started request= 2025-12-17 05:33:11 [httpcore.http11] DEBUG: send_request_headers.complete 2025-12-17 05:33:11 [httpcore.http11] DEBUG: send_request_body.started request= 2025-12-17 05:33:11 [httpcore.http11] DEBUG: send_request_body.complete 2025-12-17 05:33:11 [httpcore.http11] DEBUG: receive_response_headers.started request= 2025-12-17 05:33:15 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Wed, 17 Dec 2025 05:33:15 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'access-control-expose-headers', b'X-Request-ID'), (b'openai-organization', b'user-bmggli0qfnphtzkdehrnfdrn'), (b'openai-processing-ms', b'3114'), (b'openai-project', b'proj_AqBCEfNib7E5LbrMYDz2oklk'), (b'openai-version', b'2020-10-01'), (b'x-envoy-upstream-service-time', b'3317'), (b'x-ratelimit-limit-requests', b'30000'), (b'x-ratelimit-limit-tokens', b'150000000'), (b'x-ratelimit-remaining-requests', b'29999'), (b'x-ratelimit-remaining-tokens', b'149999202'), (b'x-ratelimit-reset-requests', b'2ms'), (b'x-ratelimit-reset-tokens', b'0s'), (b'x-request-id', b'req_88fce254fd474733b44e1372b80a09be'), (b'x-openai-proxy-wasm', b'v0.1'), (b'cf-cache-status', b'DYNAMIC'), (b'Set-Cookie', b'__cf_bm=p.UCmstsT9Aw5yBv5nxl_HZS37B7g61Q_B0KMCHTNP4-1765949595-1.0.1.1-0RUvFEYjm2Wt9RBGYDox9aVR8rGKnu.NOYKCBcDw_B0f7smNl1Qvq0BTHvcIEAWtiMpuQV_PB5StQBCdxabbBnPk0JN5rmlOAQ3m5sU.Csg; path=/; expires=Wed, 17-Dec-25 06:03:15 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'X-Content-Type-Options', b'nosniff'), (b'Set-Cookie', b'_cfuvid=4lzDW1sgZ5Cw1EaP46Dgpeqv3BEwNLEYnOskGh8ro6s-1765949595705-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Server', b'cloudflare'), (b'CF-RAY', b'9af40b544f907aa1-HKG'), (b'Content-Encoding', b'gzip'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2025-12-17 05:33:15 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" 2025-12-17 05:33:15 [httpcore.http11] DEBUG: receive_response_body.started request= 2025-12-17 05:33:15 [httpcore.http11] DEBUG: receive_response_body.complete 2025-12-17 05:33:15 [httpcore.http11] DEBUG: response_closed.started 2025-12-17 05:33:15 [httpcore.http11] DEBUG: response_closed.complete 2025-12-17 05:33:15 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "200 OK" Headers([('date', 'Wed, 17 Dec 2025 05:33:15 GMT'), ('content-type', 'application/json'), ('transfer-encoding', 'chunked'), ('connection', 'keep-alive'), ('access-control-expose-headers', 'X-Request-ID'), ('openai-organization', 'user-bmggli0qfnphtzkdehrnfdrn'), ('openai-processing-ms', '3114'), ('openai-project', 'proj_AqBCEfNib7E5LbrMYDz2oklk'), ('openai-version', '2020-10-01'), ('x-envoy-upstream-service-time', '3317'), ('x-ratelimit-limit-requests', '30000'), ('x-ratelimit-limit-tokens', '150000000'), ('x-ratelimit-remaining-requests', '29999'), ('x-ratelimit-remaining-tokens', '149999202'), ('x-ratelimit-reset-requests', '2ms'), ('x-ratelimit-reset-tokens', '0s'), ('x-request-id', 'req_88fce254fd474733b44e1372b80a09be'), ('x-openai-proxy-wasm', 'v0.1'), ('cf-cache-status', 'DYNAMIC'), ('set-cookie', '__cf_bm=p.UCmstsT9Aw5yBv5nxl_HZS37B7g61Q_B0KMCHTNP4-1765949595-1.0.1.1-0RUvFEYjm2Wt9RBGYDox9aVR8rGKnu.NOYKCBcDw_B0f7smNl1Qvq0BTHvcIEAWtiMpuQV_PB5StQBCdxabbBnPk0JN5rmlOAQ3m5sU.Csg; path=/; expires=Wed, 17-Dec-25 06:03:15 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('x-content-type-options', 'nosniff'), ('set-cookie', '_cfuvid=4lzDW1sgZ5Cw1EaP46Dgpeqv3BEwNLEYnOskGh8ro6s-1765949595705-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('server', 'cloudflare'), ('cf-ray', '9af40b544f907aa1-HKG'), ('content-encoding', 'gzip'), ('alt-svc', 'h3=":443"; ma=86400')]) 2025-12-17 05:33:15 [openai._base_client] DEBUG: request_id: req_88fce254fd474733b44e1372b80a09be 2025-12-17 05:33:15 [vnexpress_timestamp] INFO: Min timestamp: 2025-12-17 12:17:00, Published timestamp: 2025-12-17 12:28:50 2025-12-17 05:33:15 [urllib3.connectionpool] DEBUG: Starting new HTTP connection (1): tts-api:4444 2025-12-17 05:35:47 [urllib3.connectionpool] DEBUG: http://tts-api:4444 "POST /api/v2/text-to-speech HTTP/1.1" 200 411 2025-12-17 05:35:47 [scrapy.core.scraper] DEBUG: Scraped from <200 https://vnexpress.net/chat-luong-khong-khi-ha-noi-tro-lai-muc-xau-4994920.html> {'audio_url': 'https://lake-api.actable.ai/tts-data/smmqnobn-2025-12-17%2005%3A33%3A15.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=pmq7GsXVsXQZXqTM0hWE%2F20251217%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251217T053542Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=a7ce7858bd667bd172a7f03f64be05cc4236e65865117af0bebffbdbdf30364a', 'author': 'Gia Chính', 'category': 'Thời sự', 'content': 'Lúc 11h ngày 17/12, số liệu từ hai trạm quan trắc của Cục Môi ' 'trường cho thấy chất lượng không khí Hà Nội ở mức xấu. Trạm tại ' 'cổng Đại học Bách khoa Hà Nội trên đường Giải Phóng ghi nhận AQI ' '178, trạm tại 556 Nguyễn Văn Cừ là 160. Tình trạng ô nhiễm bắt ' 'đầu tăng từ chiều 16/12, sau khi không khí lạnh suy yếu. Trước ' 'đó, Hà Nội có khoảng 3 ngày liên tiếp chất lượng không khí ở mức ' 'tốt, với AQI dưới 50. Ngoài Hà Nội, một số địa phương miền Bắc ' 'cũng ghi nhận chất lượng không khí xấu. Trạm quan trắc tại 437 ' 'Nguyễn Văn Linh, tỉnh Hưng Yên ghi nhận AQI 167; trạm tại 106 ' 'Trần Hưng Đạo, thành phố Hải Dương cũ (nay là TP Hải Phòng) ghi ' 'nhận AQI 160. Thái Nguyên và Bắc Giang có chất lượng không khí ở ' 'mức kém. AQI là chỉ số chất lượng không khí, phản ánh mức độ ô ' 'nhiễm và ảnh hưởng đến sức khỏe con người; chỉ số càng cao, nguy ' 'cơ tác động càng lớn. Theo cơ quan chức năng, ô nhiễm không khí ' 'hiện nay chủ yếu do bụi mịn PM2.5. Dữ liệu từ hệ thống IQAir cho ' 'thấy trưa 17/12, Hà Nội đứng thứ 12 trong danh sách các thành phố ' 'ô nhiễm không khí trên thế giới với chỉ số 179; thành phố đứng ' 'đầu là Sarajevo (Bosnia và Herzegovina) với AQI 401. Tại Hà Nội, ' 'trạm công viên Trung Yên ghi nhận AQI cao nhất 256, các điểm Hồ ' 'Tây, Hoàng Quốc Việt, Trấn Vũ dao động trong khoảng 170-180. Cục ' 'Môi trường dự báo chất lượng không khí những ngày tới tiếp tục ' 'xấu đi. Ngày 18/12, AQI tại Hà Nội, Hưng Yên, Hải Phòng, Ninh ' 'Bình, Bắc Ninh có thể vượt 200, lên mức rất xấu; trong đó Ninh ' 'Bình và Hưng Yên có khả năng trên 230. Theo hệ thống dự báo chất ' 'lượng không khí của Trường Đại học Công nghệ, Đại học Quốc gia Hà ' 'Nội, miền Bắc đang trong đợt ô nhiễm kéo dài từ ngày 16 đến ' '20/12, đỉnh ô nhiễm rơi vào khoảng ngày 19/12 trước khi giảm dần ' 'do không khí lạnh tăng cường. Trước đó từ ngày 8 đến 14/12, miền ' 'Bắc, đặc biệt là Hà Nội, đã trải qua đợt ô nhiễm không khí nghiêm ' 'trọng nhất từ đầu mùa đông. Đêm 12/12, trạm quan trắc của Cục Môi ' 'trường ghi nhận AQI lên 282, tiệm cận mức nguy hại; trên hệ thống ' 'IQAir, nhiều điểm đo tại Hà Nội hiển thị AQI mức nguy hại - trên ' '300.', 'description': 'Sau khoảng 3 ngày ở mức tốt nhờ không khí lạnh, từ chiều ' '16/12, chỉ số chất lượng không khí AQI tại Hà Nội tăng trở ' 'lại, nhiều điểm quan trắc ghi nhận mức xấu, tiệm cận ngưỡng ' 'rất xấu.', 'html_content': '
\n' '

Lúc 11h ngày 17/12, số liệu từ hai trạm ' 'quan trắc của Cục Môi trường cho thấy chất lượng không khí ' 'Hà Nội ở mức xấu. Trạm tại cổng Đại học Bách khoa Hà Nội ' 'trên đường Giải Phóng ghi nhận AQI 178, trạm tại 556 Nguyễn ' 'Văn Cừ là 160.

Tình trạng ô nhiễm bắt ' 'đầu tăng từ chiều 16/12, sau khi không khí lạnh suy yếu. ' 'Trước đó, Hà Nội có khoảng 3 ngày liên tiếp chất lượng không ' 'khí ở mức tốt, với AQI dưới 50.

Ngoài ' 'Hà Nội, một số địa phương miền Bắc cũng ghi nhận chất lượng ' 'không khí xấu. Trạm quan trắc tại 437 Nguyễn Văn Linh, tỉnh ' 'Hưng Yên ghi nhận AQI 167; trạm tại 106 Trần Hưng Đạo, thành ' 'phố Hải Dương cũ (nay là TP Hải Phòng) ghi nhận AQI 160. ' 'Thái Nguyên và Bắc Giang có chất lượng không khí ở mức ' 'kém.

AQI là chỉ số chất lượng không ' 'khí, phản ánh mức độ ô nhiễm và ảnh hưởng đến sức khỏe con ' 'người; chỉ số càng cao, nguy cơ tác động càng lớn. Theo cơ ' 'quan chức năng, ô nhiễm không khí hiện nay chủ yếu do bụi ' 'mịn PM2.5.

\n' '
\n' '\n' '\n' '\n' '\n' '
\n' '\n' '\n' '\n' 'Ô nhiễm không khí '
                 'ngày 29/11 ở bãi giữa sông Hồng. Ảnh: Hoàng Giang\n' '
\n' '
\n' '

Ô nhiễm không khí ngày 29/11 ở bãi giữa ' 'sông Hồng. Ảnh: Hoàng Giang

\n' '
\n' '

Dữ liệu từ hệ thống IQAir cho ' 'thấy trưa 17/12, Hà Nội đứng thứ 12 trong danh sách các ' 'thành phố ô nhiễm không khí trên thế giới với chỉ số 179; ' 'thành phố đứng đầu là Sarajevo (Bosnia và Herzegovina) với ' 'AQI 401. Tại Hà Nội, trạm công viên Trung Yên ghi nhận AQI ' 'cao nhất 256, các điểm Hồ Tây, Hoàng Quốc Việt, Trấn Vũ dao ' 'động trong khoảng 170-180.

Cục Môi ' 'trường dự báo chất lượng không khí những ngày tới tiếp tục ' 'xấu đi. Ngày 18/12, AQI tại Hà Nội, Hưng Yên, Hải Phòng, ' 'Ninh Bình, Bắc Ninh có thể vượt 200, lên mức rất xấu; trong ' 'đó Ninh Bình và Hưng Yên có khả năng trên 230.

Theo hệ thống dự báo chất lượng không khí của ' 'Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội, miền Bắc ' 'đang trong đợt ô nhiễm kéo dài từ ngày 16 đến 20/12, đỉnh ô ' 'nhiễm rơi vào khoảng ngày 19/12 trước khi giảm dần do không ' 'khí lạnh tăng cường.

Trước đó từ ngày 8 ' 'đến 14/12, miền Bắc, đặc biệt là Hà Nội, đã trải qua đợt ô ' 'nhiễm không khí nghiêm trọng nhất từ đầu mùa đông. Đêm ' '12/12, trạm quan trắc của Cục Môi trường ghi nhận AQI lên ' '282, tiệm cận mức nguy hại; trên hệ thống IQAir, nhiều điểm ' 'đo tại Hà Nội hiển thị AQI mức nguy hại - trên 300.

Gia ' 'Chính

\n' '\n' '\n' '\n' '\n' '
', 'md_content': '\n' 'Lúc 11h ngày 17/12, số liệu từ hai trạm quan trắc của Cục Môi ' 'trường cho thấy chất lượng không khí Hà Nội ở mức xấu. Trạm ' 'tại cổng Đại học Bách khoa Hà Nội trên đường Giải Phóng ghi ' 'nhận AQI 178, trạm tại 556 Nguyễn Văn Cừ là 160.\n' '\n' 'Tình trạng ô nhiễm bắt đầu tăng từ chiều 16/12, sau khi không ' 'khí lạnh suy yếu. Trước đó, Hà Nội có khoảng 3 ngày liên tiếp ' 'chất lượng không khí ở mức tốt, với AQI dưới 50.\n' '\n' 'Ngoài Hà Nội, một số địa phương miền Bắc cũng ghi nhận chất ' 'lượng không khí xấu. Trạm quan trắc tại 437 Nguyễn Văn Linh, ' 'tỉnh Hưng Yên ghi nhận AQI 167; trạm tại 106 Trần Hưng Đạo, ' 'thành phố Hải Dương cũ (nay là TP Hải Phòng) ghi nhận AQI 160. ' 'Thái Nguyên và Bắc Giang có chất lượng không khí ở mức kém.\n' '\n' 'AQI là chỉ số chất lượng không khí, phản ánh mức độ ô nhiễm và ' 'ảnh hưởng đến sức khỏe con người; chỉ số càng cao, nguy cơ tác ' 'động càng lớn. Theo cơ quan chức năng, ô nhiễm không khí hiện ' 'nay chủ yếu do bụi mịn PM2.5.\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '![Ô nhiễm không khí ngày 29/11 ở bãi giữa sông Hồng. Ảnh: ' 'Hoàng ' 'Giang](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)\n' '\n' '\n' 'Ô nhiễm không khí ngày 29/11 ở bãi giữa sông Hồng. Ảnh: *Hoàng ' 'Giang*\n' '\n' '\n' '\n' 'Dữ liệu từ hệ thống IQAir cho thấy trưa 17/12, Hà Nội đứng thứ ' '12 trong danh sách các thành phố ô nhiễm không khí trên thế ' 'giới với chỉ số 179; thành phố đứng đầu là Sarajevo (Bosnia và ' 'Herzegovina) với AQI 401. Tại Hà Nội, trạm công viên Trung Yên ' 'ghi nhận AQI cao nhất 256, các điểm Hồ Tây, Hoàng Quốc Việt, ' 'Trấn Vũ dao động trong khoảng 170-180.\n' '\n' 'Cục Môi trường dự báo chất lượng không khí những ngày tới tiếp ' 'tục xấu đi. Ngày 18/12, AQI tại Hà Nội, Hưng Yên, Hải Phòng, ' 'Ninh Bình, Bắc Ninh có thể vượt 200, lên mức rất xấu; trong đó ' 'Ninh Bình và Hưng Yên có khả năng trên 230.\n' '\n' 'Theo hệ thống dự báo chất lượng không khí của Trường Đại học ' 'Công nghệ, Đại học Quốc gia Hà Nội, miền Bắc đang trong đợt ô ' 'nhiễm kéo dài từ ngày 16 đến 20/12, đỉnh ô nhiễm rơi vào ' 'khoảng ngày 19/12 trước khi giảm dần do không khí lạnh tăng ' 'cường.\n' '\n' 'Trước đó từ ngày 8 đến 14/12, miền Bắc, đặc biệt là Hà Nội, đã ' 'trải qua đợt ô nhiễm không khí nghiêm trọng nhất từ đầu mùa ' 'đông. Đêm 12/12, trạm quan trắc của Cục Môi trường ghi nhận ' 'AQI lên 282, tiệm cận mức nguy hại; trên hệ thống IQAir, nhiều ' 'điểm đo tại Hà Nội hiển thị AQI mức nguy hại - trên 300.\n' '\n' '**Gia Chính**\n' '\n' '\n' '\n' '\n' '\n' '\n', 'published_date': datetime.date(2025, 12, 17), 'published_timestamp': datetime.datetime(2025, 12, 17, 12, 28, 50), 'source': 'VnExpress', 'tags': ['Chất lượng không khí', 'Hà Nội', 'AQI', 'Ô nhiễm không khí', 'PM2.5', 'Cục Môi trường', 'Trạm quan trắc', 'Miền Bắc', 'Dự báo chất lượng không khí', 'Ô nhiễm kéo dài', 'Nguy cơ sức khỏe', 'Đợt ô nhiễm', 'Thời tiết lạnh', 'IQAir', 'Sarajevo', 'Tình trạng ô nhiễm', 'Ngày 17/12', 'Ngày 18/12', 'Mùa đông', 'Điểm đo AQI'], 'title': 'Chất lượng không khí Hà Nội trở lại mức xấu', 'url': 'https://vnexpress.net/chat-luong-khong-khi-ha-noi-tro-lai-muc-xau-4994920.html', 'voice': 'HN-Nu-2-BL'} 2025-12-17 05:35:47 [scrapy.extensions.logstats] INFO: Crawled 4 pages (at 4 pages/min), scraped 1 items (at 1 items/min) 2025-12-17 05:35:48 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:35:48 [vnexpress_timestamp] INFO: 2025-12-17 11:42:17 smaller than 2025-12-17 12:17:00 2025-12-17 05:35:50 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:35:50 [vnexpress_timestamp] INFO: 2025-12-17 11:44:48 smaller than 2025-12-17 12:17:00 2025-12-17 05:35:53 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:35:53 [vnexpress_timestamp] INFO: 2025-12-17 11:47:01 smaller than 2025-12-17 12:17:00 2025-12-17 05:35:54 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:35:55 [vnexpress_timestamp] INFO: 2025-12-17 11:06:31 smaller than 2025-12-17 12:17:00 2025-12-17 05:35:57 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:35:57 [vnexpress_timestamp] INFO: 2025-12-17 11:10:37 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:00 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:00 [vnexpress_timestamp] INFO: 2025-12-17 11:13:57 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:01 [scrapy.extensions.logstats] INFO: Crawled 10 pages (at 6 pages/min), scraped 1 items (at 0 items/min) 2025-12-17 05:36:02 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:02 [vnexpress_timestamp] INFO: 2025-12-17 11:15:26 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:05 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:05 [vnexpress_timestamp] INFO: 2025-12-17 11:21:15 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:06 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:06 [vnexpress_timestamp] INFO: 2025-12-17 11:25:09 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:09 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:09 [vnexpress_timestamp] INFO: 2025-12-17 11:29:29 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:12 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:12 [vnexpress_timestamp] INFO: 2025-12-17 11:34:39 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:15 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:15 [vnexpress_timestamp] INFO: 2025-12-17 11:37:29 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:18 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:18 [vnexpress_timestamp] INFO: 2025-12-17 11:38:14 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:19 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:20 [vnexpress_timestamp] INFO: 2025-12-17 11:48:23 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:22 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:22 [scrapy.core.scraper] ERROR: Spider error processing (referer: https://vnexpress.net/tin-tuc-24h) Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/scrapy/utils/defer.py", line 279, in iter_errback yield next(it) ^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/offsite.py", line 28, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/referer.py", line 352, in return (self._set_referer(r, response) for r in result or ()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/urllength.py", line 27, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/depth.py", line 31, in return (r for r in result or () if self._filter(r, response, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/opt/scrapy_projects/news_scraper/spiders/vnexpress_timestamp_spider.py", line 67, in parse_article article_valid = item.parse_metadata_with_xpath( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/scrapy_projects/news_scraper/items.py", line 184, in parse_metadata_with_xpath published_date = dparser.parse(published_date_raw, dayfirst=day_first, ignoretz=True, fuzzy=True).date() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/dateutil/parser/_parser.py", line 1368, in parse return DEFAULTPARSER.parse(timestr, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/dateutil/parser/_parser.py", line 643, in parse raise ParserError("Unknown string format: %s", timestr) dateutil.parser._parser.ParserError: Unknown string format: 2025-12-17 11:53 + 07:00 2025-12-17 05:36:23 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:23 [vnexpress_timestamp] INFO: 2025-12-17 11:57:47 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:26 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:26 [vnexpress_timestamp] INFO: 2025-12-17 11:58:46 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:29 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:29 [vnexpress_timestamp] INFO: 2025-12-17 12:00:00 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:31 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:32 [vnexpress_timestamp] INFO: 2025-12-17 12:00:00 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:34 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:34 [vnexpress_timestamp] INFO: 2025-12-17 12:00:00 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:37 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:37 [vnexpress_timestamp] INFO: 2025-12-17 12:00:00 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:40 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:40 [vnexpress_timestamp] INFO: 2025-12-17 12:00:00 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:42 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:42 [vnexpress_timestamp] INFO: 2025-12-17 12:02:13 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:44 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:44 [vnexpress_timestamp] INFO: 2025-12-17 12:06:31 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:46 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:46 [vnexpress_timestamp] INFO: 2025-12-17 12:09:10 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:49 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:49 [vnexpress_timestamp] INFO: 2025-12-17 12:11:35 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:51 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:51 [vnexpress_timestamp] INFO: 2025-12-17 12:13:43 smaller than 2025-12-17 12:17:00 2025-12-17 05:36:54 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:36:54 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Khoảng 1h ngày 17/12, tàu cá QNa-91917 TS do ông Huỳnh Văn Hậu, 53 tuổi, trú xã Núi Thành, thành phố Đà Nẵng, làm thuyền trưởng, đang hoạt động tại vùng biển cách đảo Đá Nam (đặc khu Trường Sa, tỉnh Khánh Hòa) khoảng 110 hải lý thì bốc cháy. Đám cháy lan nhanh, không thể khống chế khiến tàu bị chìm ngay sau đó. Lúc này trên tàu có 53 thuyền viên. Các ngư dân phải nhảy xuống biển để thoát thân. 4 tàu cá khác đang khai thác hải sản gần đó đã kịp thời tiếp cận, cứu toàn bộ ngư dân lên tàu an toàn. Ban Chỉ huy Bộ đội Biên phòng thành phố Đà Nẵng cho biết một tàu cá của Đà Nẵng đang tiếp cận nhóm tàu cứu nạn, dự kiến chiều cùng ngày sẽ đưa các ngư dân vào bờ. Tàu cá QNa-91917 TS có công suất hơn 1.200 CV, dài 28 m, hành nghề câu mực. Tàu xuất bến ngày 11/11 tại cảng Kỳ Hà. Ban đầu, tàu đăng ký 55 thuyền viên, sau đó 2 người rời tàu về đất liền để khám nghĩa vụ quân sự. Nguyên nhân vụ cháy đang được cơ quan chức năng xác minh."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2025-12-17 05:36:54 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2025-12-17 05:36:54 [httpcore.connection] DEBUG: connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=900 socket_options=None 2025-12-17 05:36:54 [httpcore.connection] DEBUG: connect_tcp.complete return_value= 2025-12-17 05:36:54 [httpcore.connection] DEBUG: start_tls.started ssl_context= server_hostname='api.openai.com' timeout=900 2025-12-17 05:36:54 [httpcore.connection] DEBUG: start_tls.complete return_value= 2025-12-17 05:36:54 [httpcore.http11] DEBUG: send_request_headers.started request= 2025-12-17 05:36:54 [httpcore.http11] DEBUG: send_request_headers.complete 2025-12-17 05:36:54 [httpcore.http11] DEBUG: send_request_body.started request= 2025-12-17 05:36:54 [httpcore.http11] DEBUG: send_request_body.complete 2025-12-17 05:36:54 [httpcore.http11] DEBUG: receive_response_headers.started request= 2025-12-17 05:36:56 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Wed, 17 Dec 2025 05:36:56 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'access-control-expose-headers', b'X-Request-ID'), (b'openai-organization', b'user-bmggli0qfnphtzkdehrnfdrn'), (b'openai-processing-ms', b'1951'), (b'openai-project', b'proj_AqBCEfNib7E5LbrMYDz2oklk'), (b'openai-version', b'2020-10-01'), (b'x-envoy-upstream-service-time', b'1964'), (b'x-ratelimit-limit-requests', b'30000'), (b'x-ratelimit-limit-tokens', b'150000000'), (b'x-ratelimit-remaining-requests', b'29999'), (b'x-ratelimit-remaining-tokens', b'149999567'), (b'x-ratelimit-reset-requests', b'2ms'), (b'x-ratelimit-reset-tokens', b'0s'), (b'x-request-id', b'req_3699b28b3f71453eade4473602b6e264'), (b'x-openai-proxy-wasm', b'v0.1'), (b'cf-cache-status', b'DYNAMIC'), (b'Set-Cookie', b'__cf_bm=ciPH8rZO4Z3a0aziGu.zN4Y7bCyWE0bHeboh7JXA2KM-1765949816-1.0.1.1-8ZHHypOH9jPYF27vTGBY5f5ouP7sgI73ERv5ZCMaEJncvoqRUd717s4DubyrA44QB6pjTzB.i9D2YKTz4keMTwte9J7__t_2sMiOWdZCPY4; path=/; expires=Wed, 17-Dec-25 06:06:56 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'X-Content-Type-Options', b'nosniff'), (b'Set-Cookie', b'_cfuvid=7fD0KHQc0D3kPKrTlRxEexr9US5kQMXFgZNIDbavtso-1765949816431-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Server', b'cloudflare'), (b'CF-RAY', b'9af410c34d970f24-HKG'), (b'Content-Encoding', b'gzip'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2025-12-17 05:36:56 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" 2025-12-17 05:36:56 [httpcore.http11] DEBUG: receive_response_body.started request= 2025-12-17 05:36:56 [httpcore.http11] DEBUG: receive_response_body.complete 2025-12-17 05:36:56 [httpcore.http11] DEBUG: response_closed.started 2025-12-17 05:36:56 [httpcore.http11] DEBUG: response_closed.complete 2025-12-17 05:36:56 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "200 OK" Headers([('date', 'Wed, 17 Dec 2025 05:36:56 GMT'), ('content-type', 'application/json'), ('transfer-encoding', 'chunked'), ('connection', 'keep-alive'), ('access-control-expose-headers', 'X-Request-ID'), ('openai-organization', 'user-bmggli0qfnphtzkdehrnfdrn'), ('openai-processing-ms', '1951'), ('openai-project', 'proj_AqBCEfNib7E5LbrMYDz2oklk'), ('openai-version', '2020-10-01'), ('x-envoy-upstream-service-time', '1964'), ('x-ratelimit-limit-requests', '30000'), ('x-ratelimit-limit-tokens', '150000000'), ('x-ratelimit-remaining-requests', '29999'), ('x-ratelimit-remaining-tokens', '149999567'), ('x-ratelimit-reset-requests', '2ms'), ('x-ratelimit-reset-tokens', '0s'), ('x-request-id', 'req_3699b28b3f71453eade4473602b6e264'), ('x-openai-proxy-wasm', 'v0.1'), ('cf-cache-status', 'DYNAMIC'), ('set-cookie', '__cf_bm=ciPH8rZO4Z3a0aziGu.zN4Y7bCyWE0bHeboh7JXA2KM-1765949816-1.0.1.1-8ZHHypOH9jPYF27vTGBY5f5ouP7sgI73ERv5ZCMaEJncvoqRUd717s4DubyrA44QB6pjTzB.i9D2YKTz4keMTwte9J7__t_2sMiOWdZCPY4; path=/; expires=Wed, 17-Dec-25 06:06:56 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('x-content-type-options', 'nosniff'), ('set-cookie', '_cfuvid=7fD0KHQc0D3kPKrTlRxEexr9US5kQMXFgZNIDbavtso-1765949816431-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('server', 'cloudflare'), ('cf-ray', '9af410c34d970f24-HKG'), ('content-encoding', 'gzip'), ('alt-svc', 'h3=":443"; ma=86400')]) 2025-12-17 05:36:56 [openai._base_client] DEBUG: request_id: req_3699b28b3f71453eade4473602b6e264 2025-12-17 05:36:56 [vnexpress_timestamp] INFO: Min timestamp: 2025-12-17 12:17:00, Published timestamp: 2025-12-17 12:19:10 2025-12-17 05:36:56 [urllib3.connectionpool] DEBUG: Starting new HTTP connection (1): tts-api:4444 2025-12-17 05:38:56 [urllib3.connectionpool] DEBUG: http://tts-api:4444 "POST /api/v2/text-to-speech HTTP/1.1" 200 411 2025-12-17 05:38:56 [scrapy.core.scraper] DEBUG: Scraped from <200 https://vnexpress.net/53-ngu-dan-nhay-xuong-bien-khi-tau-cau-muc-boc-chay-4994905.html> {'audio_url': 'https://lake-api.actable.ai/tts-data/fazjrdhq-2025-12-17%2005%3A37%3A10.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=pmq7GsXVsXQZXqTM0hWE%2F20251217%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251217T053853Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=fe2590e794aa933081f8c0504758c9c457878e030c07ca24c9f09383cae332bb', 'author': 'Nguyễn Đông', 'category': 'Thời sự', 'content': 'Khoảng 1h ngày 17/12, tàu cá QNa-91917 TS do ông Huỳnh Văn Hậu, ' '53 tuổi, trú xã Núi Thành, thành phố Đà Nẵng, làm thuyền trưởng, ' 'đang hoạt động tại vùng biển cách đảo Đá Nam (đặc khu Trường Sa, ' 'tỉnh Khánh Hòa) khoảng 110 hải lý thì bốc cháy. Đám cháy lan ' 'nhanh, không thể khống chế khiến tàu bị chìm ngay sau đó. Lúc này ' 'trên tàu có 53 thuyền viên. Các ngư dân phải nhảy xuống biển để ' 'thoát thân. 4 tàu cá khác đang khai thác hải sản gần đó đã kịp ' 'thời tiếp cận, cứu toàn bộ ngư dân lên tàu an toàn. Ban Chỉ huy ' 'Bộ đội Biên phòng thành phố Đà Nẵng cho biết một tàu cá của Đà ' 'Nẵng đang tiếp cận nhóm tàu cứu nạn, dự kiến chiều cùng ngày sẽ ' 'đưa các ngư dân vào bờ. Tàu cá QNa-91917 TS có công suất hơn ' '1.200 CV, dài 28 m, hành nghề câu mực. Tàu xuất bến ngày 11/11 ' 'tại cảng Kỳ Hà. Ban đầu, tàu đăng ký 55 thuyền viên, sau đó 2 ' 'người rời tàu về đất liền để khám nghĩa vụ quân sự. Nguyên nhân ' 'vụ cháy đang được cơ quan chức năng xác minh.', 'description': 'Giữa đêm, tàu câu mực của Đà Nẵng đang đánh bắt hải sản trên ' 'vùng biển cách đặc khu Trường Sa khoảng 110 hải lý thì bị ' 'cháy, 53 ngư dân phải nhảy xuống biển.', 'html_content': '
\n' '

Khoảng 1h ngày 17/12, tàu cá QNa-91917 TS ' 'do ông Huỳnh Văn Hậu, 53 tuổi, trú xã Núi Thành, thành phố ' 'Đà Nẵng, làm thuyền trưởng, đang hoạt động tại vùng biển ' 'cách đảo Đá Nam (đặc khu Trường Sa, tỉnh Khánh Hòa) khoảng ' '110 hải lý thì bốc cháy. Đám cháy lan nhanh, không thể khống ' 'chế khiến tàu bị chìm ngay sau đó.

Lúc ' 'này trên tàu có 53 thuyền viên. Các ngư dân phải nhảy xuống ' 'biển để thoát thân. 4 tàu cá khác đang khai thác hải sản gần ' 'đó đã kịp thời tiếp cận, cứu toàn bộ ngư dân lên tàu an ' 'toàn.

Ban Chỉ huy Bộ đội Biên phòng ' 'thành phố Đà Nẵng cho biết một tàu cá của Đà Nẵng đang tiếp ' 'cận nhóm tàu cứu nạn, dự kiến chiều cùng ngày sẽ đưa các ngư ' 'dân vào bờ.

Tàu cá QNa-91917 TS có công ' 'suất hơn 1.200 CV, dài 28 m, hành nghề câu mực. Tàu xuất bến ' 'ngày 11/11 tại cảng Kỳ Hà. Ban đầu, tàu đăng ký 55 thuyền ' 'viên, sau đó 2 người rời tàu về đất liền để khám nghĩa vụ ' 'quân sự.

Nguyên nhân vụ cháy đang được ' 'cơ quan chức năng xác minh.

Nguyễn ' 'Đông

\n' '\n' '\n' '\n' '\n' '
', 'md_content': '\n' 'Khoảng 1h ngày 17/12, tàu cá QNa-91917 TS do ông Huỳnh Văn ' 'Hậu, 53 tuổi, trú xã Núi Thành, thành phố Đà Nẵng, làm thuyền ' 'trưởng, đang hoạt động tại vùng biển cách đảo Đá Nam (đặc khu ' 'Trường Sa, tỉnh Khánh Hòa) khoảng 110 hải lý thì bốc cháy. Đám ' 'cháy lan nhanh, không thể khống chế khiến tàu bị chìm ngay sau ' 'đó.\n' '\n' 'Lúc này trên tàu có 53 thuyền viên. Các ngư dân phải nhảy ' 'xuống biển để thoát thân. 4 tàu cá khác đang khai thác hải sản ' 'gần đó đã kịp thời tiếp cận, cứu toàn bộ ngư dân lên tàu an ' 'toàn.\n' '\n' 'Ban Chỉ huy Bộ đội Biên phòng thành phố Đà Nẵng cho biết một ' 'tàu cá của Đà Nẵng đang tiếp cận nhóm tàu cứu nạn, dự kiến ' 'chiều cùng ngày sẽ đưa các ngư dân vào bờ.\n' '\n' 'Tàu cá QNa-91917 TS có công suất hơn 1.200 CV, dài 28 m, hành ' 'nghề câu mực. Tàu xuất bến ngày 11/11 tại cảng Kỳ Hà. Ban đầu, ' 'tàu đăng ký 55 thuyền viên, sau đó 2 người rời tàu về đất liền ' 'để khám nghĩa vụ quân sự.\n' '\n' 'Nguyên nhân vụ cháy đang được cơ quan chức năng xác minh.\n' '\n' '**Nguyễn Đông**\n' '\n' '\n' '\n' '\n' '\n' '\n', 'published_date': datetime.date(2025, 12, 17), 'published_timestamp': datetime.datetime(2025, 12, 17, 12, 19, 10), 'source': 'VnExpress', 'tags': ['Tàu cá QNa-91917 TS', 'Cháy tàu', 'Đà Nẵng', 'Trường Sa', 'Khánh Hòa', 'Thuyền trưởng Huỳnh Văn Hậu', 'Thuyền viên', 'Cứu nạn', 'Hải sản', 'Công suất 1.200 CV', 'Hành nghề câu mực', 'Cảng Kỳ Hà', 'Nguyên nhân vụ cháy', 'Bộ đội Biên phòng', 'An toàn ngư dân'], 'title': '53 ngư dân nhảy xuống biển khi tàu câu mực bốc cháy', 'url': 'https://vnexpress.net/53-ngu-dan-nhay-xuong-bien-khi-tau-cau-muc-boc-chay-4994905.html', 'voice': 'HN-Nu-2-BL'} 2025-12-17 05:38:56 [scrapy.extensions.logstats] INFO: Crawled 32 pages (at 22 pages/min), scraped 2 items (at 1 items/min) 2025-12-17 05:38:56 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 05:38:56 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': 'Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., \'the\', \'and\', \'is\') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Ở trận bán kết sáng 16/12 tại Bangkok, khi tỷ số là 22-35 nghiêng về võ sĩ Malaysia Muhammad Izzul Irfan Marzuki, Minh Triết trúng một đòn đấm vào vùng cổ, ngã xuống sàn và nằm bất động. Trọng tài cho dừng trận đấu, ra dấu hiệu kiểm tra lại tình huống khi nhận được khiếu nại từ ban huấn luyện Việt Nam. Sau đó, ông gọi nhân viên y tế vào chăm sóc cho Minh Triết. Sau khoảng hai phút, trọng tài trao đổi với các giám khảo, rồi ra chỗ nhân viên y tế chỉ vào cổ tay ông, ám chỉ họ cần chữa trị nhanh hơn. Một lúc sau, trọng tài lại đi ra chỗ Minh Triết đang nằm, đỡ anh dậy. Võ sĩ 19 tuổi không ngồi dậy, lại nằm ra sàn. Vì thế, trọng tài đếm thời gian, rồi xác định Minh Triết không thể đấu tiếp nên bị loại. Ông gọi Marzuki vào, cầm tay VĐV này, trong khi đại diện Việt Nam nằm sàn ngay cạnh. Trọng tài định công bố Marzuki chiến thắng ngay. Nhưng sau đó có tác động từ các giám khảo, khiến ông gọi các nhân viên y tế trở lại để khiêng Minh Triết ra khỏi sàn đấu mà không dùng cáng. Hình ảnh này khiến nhiều khán giả Việt Nam bức xúc, cho rằng võ sĩ Việt Nam không được chăm sóc y tế đúng mức, còn trọng tài xử lý thiếu trách nhiệm. Ngày 17/12, tờ Thairath dẫn phát biểu của ông Nakrob Thongdaeng - Trưởng Ban kỹ thuật Liên đoàn Pencak Silat Thái Lan (PSAT) - nhằm làm rõ sự việc. Theo ông Nakrob, Ban tổ chức SEA Games 33 có đầy đủ đội ngũ y tế, bác sĩ chuyên môn và trang thiết bị cần thiết để theo dõi, đánh giá tình trạng sức khỏe của các võ sĩ trong quá trình thi đấu. Về mặt chuyên môn, ông Nakrob cho biết tình huống dẫn đến việc Minh Triết nằm sân đã được trọng tài và ban giám sát kỹ thuật xem lại kỹ lưỡng bằng hệ thống VAR. Kết luận của tổ trọng tài là cú đòn của võ sĩ Malaysia không phạm luật, không phải tình huống đánh vào cổ và cũng không gây nguy hiểm nghiêm trọng. Theo luật pencak silat, các đòn đánh vào mặt, cổ bị cấm, nhưng pha ra đòn trong trận đấu này được xác định là hợp lệ. "Trong thực tế thi đấu, từng có trường hợp các võ sĩ cố tình ngã xuống sau va chạm, nhằm buộc trọng tài xử đối phương phạm lỗi và bị truất quyền thi đấu", ông Nakrob nói. "Đây là điều không hiếm gặp, đặc biệt khi võ sĩ đang ở thế bất lợi". Theo đại diện PSAT, Marzuki là đương kim vô địch SEA Games và được đánh giá cao hơn hẳn Minh Triết. Trong bối cảnh bị dẫn điểm và gặp khó khăn, phía Thái Lan cho rằng võ sĩ Việt Nam đã "cố kéo dài tình huống bằng cách nằm sân, tạo cảm giác chấn thương nghiêm trọng để gây áp lực lên trọng tài". Ông Nakrob cho biết, sau khi Minh Triết ngã xuống, trọng tài đã yêu cầu anh đứng dậy theo đúng quy trình, đồng thời gọi đội ngũ y tế vào sân để kiểm tra. Các bác sĩ tiến hành đánh giá nhanh tại chỗ, bao gồm kiểm tra phản xạ mắt, vùng cổ và các dấu hiệu thần kinh cơ bản. Kết quả cho thấy chấn thương nằm trong giới hạn cho phép, không có dấu hiệu nguy hiểm đến tính mạng hay cần can thiệp y tế khẩn cấp. Vì vậy, việc không sử dụng cáng, nẹp cổ hay các biện pháp sơ cứu đặc biệt khác được PSAT khẳng định là phù hợp với thông lệ của môn pencak silat, trong trường hợp võ sĩ không có chấn thương nghiêm trọng. Sau đó, khi Minh Triết không thể tiếp tục thi đấu, trọng tài xử thắng cho Marzuki theo luật. Liên đoàn Pencak Silat Thái Lan cho biết lưu giữ đầy đủ hình ảnh, băng ghi hình và báo cáo y tế liên quan đến trận đấu. Theo họ, việc một số khán giả chỉ xem lại các đoạn video ngắn hoặc không theo dõi trực tiếp trận đấu đã dẫn đến những đánh giá sai lệch về mức độ chấn thương cũng như cách xử lý của trọng tài. Đại diện ban giám sát kỹ thuật là một trọng tài người Indonesia, cũng xác nhận tình huống này không phải pha đánh phạm luật và không gây nguy hiểm nghiêm trọng cho võ sĩ Việt Nam. Sau trận đấu, Minh Triết được cho là vẫn có thể sinh hoạt, tập luyện và cổ vũ đồng đội bình thường. Một trường hợp trái ngược cũng xảy ra với Việt Nam ở trận bán kết hạng 60kg nam, khi Vũ Văn Kiên bị xử thua trực tiếp dù đang dẫn đối thủ Thái Lan Janjaroen Tinnapat với cách biệt lớn. Văn Kiên kiểm soát hoàn toàn thế trận và dẫn 52-34 khi chỉ còn 4 giây, nhưng trong pha ra đòn cuối, đối thủ bất ngờ hạ thấp người khiến cú đá trúng vùng cổ. Sau khi xem lại băng hình theo khiếu nại của chủ nhà, trọng tài xác định Văn Kiên đá vào mặt và truất quyền thi đấu, dù ban huấn luyện Việt Nam cho rằng đối thủ đã chủ động lao vào để tạo tình huống phạm luật.'}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2025-12-17 05:38:56 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2025-12-17 05:38:56 [httpcore.connection] DEBUG: connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=900 socket_options=None 2025-12-17 05:38:56 [httpcore.connection] DEBUG: connect_tcp.complete return_value= 2025-12-17 05:38:56 [httpcore.connection] DEBUG: start_tls.started ssl_context= server_hostname='api.openai.com' timeout=900 2025-12-17 05:38:56 [httpcore.connection] DEBUG: start_tls.complete return_value= 2025-12-17 05:38:56 [httpcore.http11] DEBUG: send_request_headers.started request= 2025-12-17 05:38:56 [httpcore.http11] DEBUG: send_request_headers.complete 2025-12-17 05:38:56 [httpcore.http11] DEBUG: send_request_body.started request= 2025-12-17 05:38:56 [httpcore.http11] DEBUG: send_request_body.complete 2025-12-17 05:38:56 [httpcore.http11] DEBUG: receive_response_headers.started request= 2025-12-17 05:38:59 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Wed, 17 Dec 2025 05:38:59 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'access-control-expose-headers', b'X-Request-ID'), (b'openai-organization', b'user-bmggli0qfnphtzkdehrnfdrn'), (b'openai-processing-ms', b'1996'), (b'openai-project', b'proj_AqBCEfNib7E5LbrMYDz2oklk'), (b'openai-version', b'2020-10-01'), (b'x-envoy-upstream-service-time', b'2011'), (b'x-ratelimit-limit-requests', b'30000'), (b'x-ratelimit-limit-tokens', b'150000000'), (b'x-ratelimit-remaining-requests', b'29999'), (b'x-ratelimit-remaining-tokens', b'149998475'), (b'x-ratelimit-reset-requests', b'2ms'), (b'x-ratelimit-reset-tokens', b'0s'), (b'x-request-id', b'req_6bf90ab9ce8c4410be70df7226e6ee62'), (b'x-openai-proxy-wasm', b'v0.1'), (b'cf-cache-status', b'DYNAMIC'), (b'Set-Cookie', b'__cf_bm=1RmyIKxnJzw8mpEkhYL_p_TNQk7xyF7V6r3DWsYvEZw-1765949939-1.0.1.1-DwhuBy.4HzvenAQOF9gAsul00EfRvYg9gzdxnvVbR_pdxuaDlAIahSQAu1haDasmyk1bQL32clhn2wB0vzswZw3wLoaf9K.NeWb6.2KxtDE; path=/; expires=Wed, 17-Dec-25 06:08:59 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'X-Content-Type-Options', b'nosniff'), (b'Set-Cookie', b'_cfuvid=eP.GYj0_wXsEhlV27DxnSBR7zQfVpCC2pM77ZgbnqHk-1765949939209-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Server', b'cloudflare'), (b'CF-RAY', b'9af413c21f0204d7-HKG'), (b'Content-Encoding', b'gzip'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2025-12-17 05:38:59 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" 2025-12-17 05:38:59 [httpcore.http11] DEBUG: receive_response_body.started request= 2025-12-17 05:38:59 [httpcore.http11] DEBUG: receive_response_body.complete 2025-12-17 05:38:59 [httpcore.http11] DEBUG: response_closed.started 2025-12-17 05:38:59 [httpcore.http11] DEBUG: response_closed.complete 2025-12-17 05:38:59 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "200 OK" Headers([('date', 'Wed, 17 Dec 2025 05:38:59 GMT'), ('content-type', 'application/json'), ('transfer-encoding', 'chunked'), ('connection', 'keep-alive'), ('access-control-expose-headers', 'X-Request-ID'), ('openai-organization', 'user-bmggli0qfnphtzkdehrnfdrn'), ('openai-processing-ms', '1996'), ('openai-project', 'proj_AqBCEfNib7E5LbrMYDz2oklk'), ('openai-version', '2020-10-01'), ('x-envoy-upstream-service-time', '2011'), ('x-ratelimit-limit-requests', '30000'), ('x-ratelimit-limit-tokens', '150000000'), ('x-ratelimit-remaining-requests', '29999'), ('x-ratelimit-remaining-tokens', '149998475'), ('x-ratelimit-reset-requests', '2ms'), ('x-ratelimit-reset-tokens', '0s'), ('x-request-id', 'req_6bf90ab9ce8c4410be70df7226e6ee62'), ('x-openai-proxy-wasm', 'v0.1'), ('cf-cache-status', 'DYNAMIC'), ('set-cookie', '__cf_bm=1RmyIKxnJzw8mpEkhYL_p_TNQk7xyF7V6r3DWsYvEZw-1765949939-1.0.1.1-DwhuBy.4HzvenAQOF9gAsul00EfRvYg9gzdxnvVbR_pdxuaDlAIahSQAu1haDasmyk1bQL32clhn2wB0vzswZw3wLoaf9K.NeWb6.2KxtDE; path=/; expires=Wed, 17-Dec-25 06:08:59 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('x-content-type-options', 'nosniff'), ('set-cookie', '_cfuvid=eP.GYj0_wXsEhlV27DxnSBR7zQfVpCC2pM77ZgbnqHk-1765949939209-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('server', 'cloudflare'), ('cf-ray', '9af413c21f0204d7-HKG'), ('content-encoding', 'gzip'), ('alt-svc', 'h3=":443"; ma=86400')]) 2025-12-17 05:38:59 [openai._base_client] DEBUG: request_id: req_6bf90ab9ce8c4410be70df7226e6ee62 2025-12-17 05:38:59 [vnexpress_timestamp] INFO: Min timestamp: 2025-12-17 12:17:00, Published timestamp: 2025-12-17 12:23:51 2025-12-17 05:38:59 [urllib3.connectionpool] DEBUG: Starting new HTTP connection (1): tts-api:4444 2025-12-17 05:43:33 [urllib3.connectionpool] DEBUG: http://tts-api:4444 "POST /api/v2/text-to-speech HTTP/1.1" 200 413 2025-12-17 05:43:33 [scrapy.core.scraper] DEBUG: Scraped from <200 https://vnexpress.net/lien-doan-pencak-silat-thai-lan-vo-si-viet-nam-an-va-khi-yeu-the-4994816.html> {'audio_url': 'https://lake-api.actable.ai/tts-data/mdvjxcbk-2025-12-17%2005%3A39%3A18.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=pmq7GsXVsXQZXqTM0hWE%2F20251217%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251217T054330Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=53cb3f01943c07ca7fa395365fb197d2b35a207ce307c15be3317c19b0365416', 'author': 'Hiếu Lương - Xuân Bình', 'category': 'Thể thao', 'content': 'Ở trận bán kết sáng 16/12 tại Bangkok, khi tỷ số là 22-35 nghiêng ' 'về võ sĩ Malaysia Muhammad Izzul Irfan Marzuki, Minh Triết trúng ' 'một đòn đấm vào vùng cổ, ngã xuống sàn và nằm bất động. Trọng tài ' 'cho dừng trận đấu, ra dấu hiệu kiểm tra lại tình huống khi nhận ' 'được khiếu nại từ ban huấn luyện Việt Nam. Sau đó, ông gọi nhân ' 'viên y tế vào chăm sóc cho Minh Triết. Sau khoảng hai phút, trọng ' 'tài trao đổi với các giám khảo, rồi ra chỗ nhân viên y tế chỉ vào ' 'cổ tay ông, ám chỉ họ cần chữa trị nhanh hơn. Một lúc sau, trọng ' 'tài lại đi ra chỗ Minh Triết đang nằm, đỡ anh dậy. Võ sĩ 19 tuổi ' 'không ngồi dậy, lại nằm ra sàn. Vì thế, trọng tài đếm thời gian, ' 'rồi xác định Minh Triết không thể đấu tiếp nên bị loại. Ông gọi ' 'Marzuki vào, cầm tay VĐV này, trong khi đại diện Việt Nam nằm sàn ' 'ngay cạnh. Trọng tài định công bố Marzuki chiến thắng ngay. Nhưng ' 'sau đó có tác động từ các giám khảo, khiến ông gọi các nhân viên ' 'y tế trở lại để khiêng Minh Triết ra khỏi sàn đấu mà không dùng ' 'cáng. Hình ảnh này khiến nhiều khán giả Việt Nam bức xúc, cho ' 'rằng võ sĩ Việt Nam không được chăm sóc y tế đúng mức, còn trọng ' 'tài xử lý thiếu trách nhiệm. Ngày 17/12, tờ Thairath dẫn phát ' 'biểu của ông Nakrob Thongdaeng - Trưởng Ban kỹ thuật Liên đoàn ' 'Pencak Silat Thái Lan (PSAT) - nhằm làm rõ sự việc. Theo ông ' 'Nakrob, Ban tổ chức SEA Games 33 có đầy đủ đội ngũ y tế, bác sĩ ' 'chuyên môn và trang thiết bị cần thiết để theo dõi, đánh giá tình ' 'trạng sức khỏe của các võ sĩ trong quá trình thi đấu. Về mặt ' 'chuyên môn, ông Nakrob cho biết tình huống dẫn đến việc Minh ' 'Triết nằm sân đã được trọng tài và ban giám sát kỹ thuật xem lại ' 'kỹ lưỡng bằng hệ thống VAR. Kết luận của tổ trọng tài là cú đòn ' 'của võ sĩ Malaysia không phạm luật, không phải tình huống đánh ' 'vào cổ và cũng không gây nguy hiểm nghiêm trọng. Theo luật pencak ' 'silat, các đòn đánh vào mặt, cổ bị cấm, nhưng pha ra đòn trong ' 'trận đấu này được xác định là hợp lệ. "Trong thực tế thi đấu, ' 'từng có trường hợp các võ sĩ cố tình ngã xuống sau va chạm, nhằm ' 'buộc trọng tài xử đối phương phạm lỗi và bị truất quyền thi đấu", ' 'ông Nakrob nói. "Đây là điều không hiếm gặp, đặc biệt khi võ sĩ ' 'đang ở thế bất lợi". Theo đại diện PSAT, Marzuki là đương kim vô ' 'địch SEA Games và được đánh giá cao hơn hẳn Minh Triết. Trong bối ' 'cảnh bị dẫn điểm và gặp khó khăn, phía Thái Lan cho rằng võ sĩ ' 'Việt Nam đã "cố kéo dài tình huống bằng cách nằm sân, tạo cảm ' 'giác chấn thương nghiêm trọng để gây áp lực lên trọng tài". Ông ' 'Nakrob cho biết, sau khi Minh Triết ngã xuống, trọng tài đã yêu ' 'cầu anh đứng dậy theo đúng quy trình, đồng thời gọi đội ngũ y tế ' 'vào sân để kiểm tra. Các bác sĩ tiến hành đánh giá nhanh tại chỗ, ' 'bao gồm kiểm tra phản xạ mắt, vùng cổ và các dấu hiệu thần kinh ' 'cơ bản. Kết quả cho thấy chấn thương nằm trong giới hạn cho phép, ' 'không có dấu hiệu nguy hiểm đến tính mạng hay cần can thiệp y tế ' 'khẩn cấp. Vì vậy, việc không sử dụng cáng, nẹp cổ hay các biện ' 'pháp sơ cứu đặc biệt khác được PSAT khẳng định là phù hợp với ' 'thông lệ của môn pencak silat, trong trường hợp võ sĩ không có ' 'chấn thương nghiêm trọng. Sau đó, khi Minh Triết không thể tiếp ' 'tục thi đấu, trọng tài xử thắng cho Marzuki theo luật. Liên đoàn ' 'Pencak Silat Thái Lan cho biết lưu giữ đầy đủ hình ảnh, băng ghi ' 'hình và báo cáo y tế liên quan đến trận đấu. Theo họ, việc một số ' 'khán giả chỉ xem lại các đoạn video ngắn hoặc không theo dõi trực ' 'tiếp trận đấu đã dẫn đến những đánh giá sai lệch về mức độ chấn ' 'thương cũng như cách xử lý của trọng tài. Đại diện ban giám sát ' 'kỹ thuật là một trọng tài người Indonesia, cũng xác nhận tình ' 'huống này không phải pha đánh phạm luật và không gây nguy hiểm ' 'nghiêm trọng cho võ sĩ Việt Nam. Sau trận đấu, Minh Triết được ' 'cho là vẫn có thể sinh hoạt, tập luyện và cổ vũ đồng đội bình ' 'thường. Một trường hợp trái ngược cũng xảy ra với Việt Nam ở trận ' 'bán kết hạng 60kg nam, khi Vũ Văn Kiên bị xử thua trực tiếp dù ' 'đang dẫn đối thủ Thái Lan Janjaroen Tinnapat với cách biệt lớn. ' 'Văn Kiên kiểm soát hoàn toàn thế trận và dẫn 52-34 khi chỉ còn 4 ' 'giây, nhưng trong pha ra đòn cuối, đối thủ bất ngờ hạ thấp người ' 'khiến cú đá trúng vùng cổ. Sau khi xem lại băng hình theo khiếu ' 'nại của chủ nhà, trọng tài xác định Văn Kiên đá vào mặt và truất ' 'quyền thi đấu, dù ban huấn luyện Việt Nam cho rằng đối thủ đã chủ ' 'động lao vào để tạo tình huống phạm luật.', 'description': 'Thái Lan- Liên đoàn Pencak Silat Thái Lan (PSAT) giải thích ' 'vụ để võ sĩ Nguyễn Minh Triết nằm bất động trên sàn trong ' 'trận thua đối thủ Malaysia ở bán kết hạng -65kg nam SEA Games ' '33.', 'html_content': '
\n' '

Ở trận bán kết sáng 16/12 tại Bangkok, khi ' 'tỷ số là 22-35 nghiêng về võ sĩ Malaysia Muhammad Izzul ' 'Irfan Marzuki, Minh Triết trúng một đòn đấm vào vùng cổ, ngã ' 'xuống sàn và nằm bất động. Trọng tài cho dừng trận đấu, ra ' 'dấu hiệu kiểm tra lại tình huống khi nhận được khiếu nại từ ' 'ban huấn luyện Việt Nam. Sau đó, ông gọi nhân viên y tế vào ' 'chăm sóc cho Minh Triết.

\n' '
\n' '\n' '\n' '\n' '\n' '
\n' '\n' '\n' '\n' 'Nguyễn Minh Triết '
                 'nằm sàn sau cú đấm của Marzuki ở pencak silat, bán kết hạng '
                 'cân dưới 65kg nam SEA Games 33 tại Bangkok, Thái Lan sáng '
                 '16/12/2025. Ảnh: Đức Đồng\n' '
\n' '
\n' '

Nguyễn Minh Triết nằm sàn sau cú đấm của ' 'Marzuki ở pencak silat, bán kết hạng cân dưới 65kg nam SEA ' 'Games 33 tại Bangkok, Thái Lan sáng 16/12/2025. Ảnh: Đức ' 'Đồng

\n' '
\n' '

Sau khoảng hai phút, trọng tài ' 'trao đổi với các giám khảo, rồi ra chỗ nhân viên y tế chỉ ' 'vào cổ tay ông, ám chỉ họ cần chữa trị nhanh hơn. Một lúc ' 'sau, trọng tài lại đi ra chỗ Minh Triết đang nằm, đỡ anh ' 'dậy. Võ sĩ 19 tuổi không ngồi dậy, lại nằm ra sàn. Vì thế, ' 'trọng tài đếm thời gian, rồi xác định Minh Triết không thể ' 'đấu tiếp nên bị loại. Ông gọi Marzuki vào, cầm tay VĐV này, ' 'trong khi đại diện Việt Nam nằm sàn ngay cạnh.

Trọng tài định công bố Marzuki chiến thắng ' 'ngay. Nhưng sau đó có tác động từ các giám khảo, khiến ông ' 'gọi các nhân viên y tế trở lại để khiêng Minh Triết ra khỏi ' 'sàn đấu mà không dùng cáng.

Hình ảnh ' 'này khiến nhiều khán giả Việt Nam bức xúc, cho rằng võ sĩ ' 'Việt Nam không được chăm sóc y tế đúng mức, còn trọng tài xử ' 'lý thiếu trách nhiệm.

Ngày 17/12, tờ ' 'Thairath dẫn phát biểu của ông Nakrob Thongdaeng - ' 'Trưởng Ban kỹ thuật Liên đoàn Pencak Silat Thái Lan (PSAT) - ' 'nhằm làm rõ sự việc. Theo ông Nakrob, Ban tổ chức SEA Games ' '33 có đầy đủ đội ngũ y tế, bác sĩ chuyên môn và trang thiết ' 'bị cần thiết để theo dõi, đánh giá tình trạng sức khỏe của ' 'các võ sĩ trong quá trình thi đấu.

\n' '
\n' '\n' '\n' '\n' '\n' '
\n' '\n' '\n' '\n' 'Nguyễn Minh Triết '
                 'nằm sàn.\n' '
\n' '
\n' '

Trọng tài định công bố võ sĩ Malaysia chiến ' 'thắng bất chấp Nguyễn Minh Triết nằm sàn. Ảnh: chụp màn ' 'hình

\n' '
\n' '

Về mặt chuyên môn, ông Nakrob cho ' 'biết tình huống dẫn đến việc Minh Triết nằm sân đã được ' 'trọng tài và ban giám sát kỹ thuật xem lại kỹ lưỡng bằng hệ ' 'thống VAR. Kết luận của tổ trọng tài là cú đòn của võ sĩ ' 'Malaysia không phạm luật, không phải tình huống đánh vào cổ ' 'và cũng không gây nguy hiểm nghiêm trọng. Theo luật pencak ' 'silat, các đòn đánh vào mặt, cổ bị cấm, nhưng pha ra đòn ' 'trong trận đấu này được xác định là hợp lệ.

"Trong thực tế thi đấu, từng có trường hợp ' 'các võ sĩ cố tình ngã xuống sau va chạm, nhằm buộc trọng tài ' 'xử đối phương phạm lỗi và bị truất quyền thi đấu", ông ' 'Nakrob nói. "Đây là điều không hiếm gặp, đặc biệt khi võ sĩ ' 'đang ở thế bất lợi".

Theo đại diện ' 'PSAT, Marzuki là đương kim vô địch SEA Games và được đánh ' 'giá cao hơn hẳn Minh Triết. Trong bối cảnh bị dẫn điểm và ' 'gặp khó khăn, phía Thái Lan cho rằng võ sĩ Việt Nam đã "cố ' 'kéo dài tình huống bằng cách nằm sân, tạo cảm giác chấn ' 'thương nghiêm trọng để gây áp lực lên trọng tài".

Ông Nakrob cho biết, sau khi Minh Triết ngã ' 'xuống, trọng tài đã yêu cầu anh đứng dậy theo đúng quy ' 'trình, đồng thời gọi đội ngũ y tế vào sân để kiểm tra. Các ' 'bác sĩ tiến hành đánh giá nhanh tại chỗ, bao gồm kiểm tra ' 'phản xạ mắt, vùng cổ và các dấu hiệu thần kinh cơ bản. Kết ' 'quả cho thấy chấn thương nằm trong giới hạn cho phép, không ' 'có dấu hiệu nguy hiểm đến tính mạng hay cần can thiệp y tế ' 'khẩn cấp.

\n' '\n' '
\n' '
\n' '\n' '
\n' '
\xa0
\n' '
\xa0
\n' '
\n' '
\n' '
\n' '
\n' '
\n' '
\n' '
\n' '
\n' '\n' '
\n' '
\n' '
\n' '\n' '
\n' '
\n' '
\n' '\n' '
\n' '

Tình huống phía Thái Lan cho rằng Minh ' 'Triết ăn vạ.

\n' '

Vì vậy, việc ' 'không sử dụng cáng, nẹp cổ hay các biện pháp sơ cứu đặc biệt ' 'khác được PSAT khẳng định là phù hợp với thông lệ của môn ' 'pencak silat, trong trường hợp võ sĩ không có chấn thương ' 'nghiêm trọng. Sau đó, khi Minh Triết không thể tiếp tục thi ' 'đấu, trọng tài xử thắng cho Marzuki theo luật.

Liên đoàn Pencak Silat Thái Lan cho biết lưu ' 'giữ đầy đủ hình ảnh, băng ghi hình và báo cáo y tế liên quan ' 'đến trận đấu. Theo họ, việc một số khán giả chỉ xem lại các ' 'đoạn video ngắn hoặc không theo dõi trực tiếp trận đấu đã ' 'dẫn đến những đánh giá sai lệch về mức độ chấn thương cũng ' 'như cách xử lý của trọng tài.

Đại diện ' 'ban giám sát kỹ thuật là một trọng tài người Indonesia, cũng ' 'xác nhận tình huống này không phải pha đánh phạm luật và ' 'không gây nguy hiểm nghiêm trọng cho võ sĩ Việt Nam. Sau ' 'trận đấu, Minh Triết được cho là vẫn có thể sinh hoạt, tập ' 'luyện và cổ vũ đồng đội bình thường.

Một trường hợp trái ngược cũng xảy ra với ' 'Việt Nam ở trận bán kết hạng 60kg nam, khi Vũ Văn Kiên bị xử ' 'thua trực tiếp dù đang dẫn đối thủ Thái Lan Janjaroen ' 'Tinnapat với cách biệt lớn.

Văn Kiên ' 'kiểm soát hoàn toàn thế trận và dẫn 52-34 khi chỉ còn 4 ' 'giây, nhưng trong pha ra đòn cuối, đối thủ bất ngờ hạ thấp ' 'người khiến cú đá trúng vùng cổ. Sau khi xem lại băng hình ' 'theo khiếu nại của chủ nhà, trọng tài xác định Văn Kiên đá ' 'vào mặt và truất quyền thi đấu, dù ban huấn luyện Việt Nam ' 'cho rằng đối thủ đã chủ động lao vào để tạo tình huống phạm ' 'luật.

Hiếu Lương - Xuân ' 'Bình

\n' '\n' '\n' '\n' '\n' '
', 'md_content': '\n' 'Ở trận bán kết sáng 16/12 tại Bangkok, khi tỷ số là 22-35 ' 'nghiêng về võ sĩ Malaysia Muhammad Izzul Irfan Marzuki, Minh ' 'Triết trúng một đòn đấm vào vùng cổ, ngã xuống sàn và nằm bất ' 'động. Trọng tài cho dừng trận đấu, ra dấu hiệu kiểm tra lại ' 'tình huống khi nhận được khiếu nại từ ban huấn luyện Việt Nam. ' 'Sau đó, ông gọi nhân viên y tế vào chăm sóc cho Minh Triết.\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '![Nguyễn Minh Triết nằm sàn sau cú đấm của Marzuki ở pencak ' 'silat, bán kết hạng cân dưới 65kg nam SEA Games 33 tại ' 'Bangkok, Thái Lan sáng 16/12/2025. Ảnh: Đức ' 'Đồng](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)\n' '\n' '\n' 'Nguyễn Minh Triết nằm sàn sau cú đấm của Marzuki ở pencak ' 'silat, bán kết hạng cân dưới 65kg nam SEA Games 33 tại ' 'Bangkok, Thái Lan sáng 16/12/2025. Ảnh: *Đức Đồng*\n' '\n' '\n' '\n' 'Sau khoảng hai phút, trọng tài trao đổi với các giám khảo, rồi ' 'ra chỗ nhân viên y tế chỉ vào cổ tay ông, ám chỉ họ cần chữa ' 'trị nhanh hơn. Một lúc sau, trọng tài lại đi ra chỗ Minh Triết ' 'đang nằm, đỡ anh dậy. Võ sĩ 19 tuổi không ngồi dậy, lại nằm ra ' 'sàn. Vì thế, trọng tài đếm thời gian, rồi xác định Minh Triết ' 'không thể đấu tiếp nên bị loại. Ông gọi Marzuki vào, cầm tay ' 'VĐV này, trong khi đại diện Việt Nam nằm sàn ngay cạnh.\n' '\n' 'Trọng tài định công bố Marzuki chiến thắng ngay. Nhưng sau đó ' 'có tác động từ các giám khảo, khiến ông gọi các nhân viên y tế ' 'trở lại để khiêng Minh Triết ra khỏi sàn đấu mà không dùng ' 'cáng.\n' '\n' 'Hình ảnh này khiến nhiều khán giả Việt Nam bức xúc, cho rằng ' 'võ sĩ Việt Nam không được chăm sóc y tế đúng mức, còn trọng ' 'tài xử lý thiếu trách nhiệm.\n' '\n' 'Ngày 17/12, tờ *Thairath* dẫn phát biểu của ông Nakrob ' 'Thongdaeng - Trưởng Ban kỹ thuật Liên đoàn Pencak Silat Thái ' 'Lan (PSAT) - nhằm làm rõ sự việc. Theo ông Nakrob, Ban tổ chức ' 'SEA Games 33 có đầy đủ đội ngũ y tế, bác sĩ chuyên môn và ' 'trang thiết bị cần thiết để theo dõi, đánh giá tình trạng sức ' 'khỏe của các võ sĩ trong quá trình thi đấu.\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '![Nguyễn Minh Triết nằm ' 'sàn.](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)\n' '\n' '\n' 'Trọng tài định công bố võ sĩ Malaysia chiến thắng bất chấp ' 'Nguyễn Minh Triết nằm sàn. Ảnh: *chụp màn hình*\n' '\n' '\n' '\n' 'Về mặt chuyên môn, ông Nakrob cho biết tình huống dẫn đến việc ' 'Minh Triết nằm sân đã được trọng tài và ban giám sát kỹ thuật ' 'xem lại kỹ lưỡng bằng hệ thống VAR. Kết luận của tổ trọng tài ' 'là cú đòn của võ sĩ Malaysia không phạm luật, không phải tình ' 'huống đánh vào cổ và cũng không gây nguy hiểm nghiêm trọng. ' 'Theo luật pencak silat, các đòn đánh vào mặt, cổ bị cấm, nhưng ' 'pha ra đòn trong trận đấu này được xác định là hợp lệ.\n' '\n' '"Trong thực tế thi đấu, từng có trường hợp các võ sĩ cố tình ' 'ngã xuống sau va chạm, nhằm buộc trọng tài xử đối phương phạm ' 'lỗi và bị truất quyền thi đấu", ông Nakrob nói. "Đây là điều ' 'không hiếm gặp, đặc biệt khi võ sĩ đang ở thế bất lợi".\n' '\n' 'Theo đại diện PSAT, Marzuki là đương kim vô địch SEA Games và ' 'được đánh giá cao hơn hẳn Minh Triết. Trong bối cảnh bị dẫn ' 'điểm và gặp khó khăn, phía Thái Lan cho rằng võ sĩ Việt Nam đã ' '"cố kéo dài tình huống bằng cách nằm sân, tạo cảm giác chấn ' 'thương nghiêm trọng để gây áp lực lên trọng tài".\n' '\n' 'Ông Nakrob cho biết, sau khi Minh Triết ngã xuống, trọng tài ' 'đã yêu cầu anh đứng dậy theo đúng quy trình, đồng thời gọi đội ' 'ngũ y tế vào sân để kiểm tra. Các bác sĩ tiến hành đánh giá ' 'nhanh tại chỗ, bao gồm kiểm tra phản xạ mắt, vùng cổ và các ' 'dấu hiệu thần kinh cơ bản. Kết quả cho thấy chấn thương nằm ' 'trong giới hạn cho phép, không có dấu hiệu nguy hiểm đến tính ' 'mạng hay cần can thiệp y tế khẩn cấp.\n' '\n' '\n' '\n' '\n' '\n' '![Võ sĩ Việt Nam Minh Triết bị tố ăn vạ khi yếu ' 'thế](https://iv1.vnecdn.net/thethao/images/web/2025/12/17/vo-si-viet-nam-minh-triet-bi-to-an-va-khi-yeu-the-1765948750.jpg?w=0&h=0&q=100&dpr=1&fit=crop&s=pYwqagW3cbKC3iLT6Y-nHw)\n' '\n' '\xa0\n' '\xa0\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' 'Võ sĩ Việt Nam Minh Triết bị tố ăn vạ khi yếu thế\n' '\n' '\n' '\n' '\n' '\n' 'Tình huống phía Thái Lan cho rằng Minh Triết ăn vạ.\n' '\n' '\n' 'Vì vậy, việc không sử dụng cáng, nẹp cổ hay các biện pháp sơ ' 'cứu đặc biệt khác được PSAT khẳng định là phù hợp với thông lệ ' 'của môn pencak silat, trong trường hợp võ sĩ không có chấn ' 'thương nghiêm trọng. Sau đó, khi Minh Triết không thể tiếp tục ' 'thi đấu, trọng tài xử thắng cho Marzuki theo luật.\n' '\n' 'Liên đoàn Pencak Silat Thái Lan cho biết lưu giữ đầy đủ hình ' 'ảnh, băng ghi hình và báo cáo y tế liên quan đến trận đấu. ' 'Theo họ, việc một số khán giả chỉ xem lại các đoạn video ngắn ' 'hoặc không theo dõi trực tiếp trận đấu đã dẫn đến những đánh ' 'giá sai lệch về mức độ chấn thương cũng như cách xử lý của ' 'trọng tài.\n' '\n' 'Đại diện ban giám sát kỹ thuật là một trọng tài người ' 'Indonesia, cũng xác nhận tình huống này không phải pha đánh ' 'phạm luật và không gây nguy hiểm nghiêm trọng cho võ sĩ Việt ' 'Nam. Sau trận đấu, Minh Triết được cho là vẫn có thể sinh ' 'hoạt, tập luyện và cổ vũ đồng đội bình thường.\n' '\n' 'Một trường hợp trái ngược cũng xảy ra với Việt Nam ở trận bán ' 'kết hạng 60kg nam, khi Vũ Văn Kiên bị xử thua trực tiếp dù ' 'đang dẫn đối thủ Thái Lan Janjaroen Tinnapat với cách biệt ' 'lớn.\n' '\n' 'Văn Kiên kiểm soát hoàn toàn thế trận và dẫn 52-34 khi chỉ còn ' '4 giây, nhưng trong pha ra đòn cuối, đối thủ bất ngờ hạ thấp ' 'người khiến cú đá trúng vùng cổ. Sau khi xem lại băng hình ' 'theo khiếu nại của chủ nhà, trọng tài xác định Văn Kiên đá vào ' 'mặt và truất quyền thi đấu, dù ban huấn luyện Việt Nam cho ' 'rằng đối thủ đã chủ động lao vào để tạo tình huống phạm luật.\n' '\n' '**Hiếu Lương - Xuân Bình**\n' '\n' '\n' '\n' '\n' '\n' '\n', 'published_date': datetime.date(2025, 12, 17), 'published_timestamp': datetime.datetime(2025, 12, 17, 12, 23, 51), 'source': 'VnExpress', 'tags': ['Minh Triết', 'Muhammad Izzul Irfan Marzuki', 'SEA Games 33', 'Pencak Silat', 'Trọng tài', 'Chấn thương', 'Kiểm tra y tế', 'VAR', 'Quy trình thi đấu', 'Khán giả Việt Nam', 'Phản ứng khán giả', 'Đánh giá tình huống', 'Võ sĩ Việt Nam', 'Thái Lan', 'Vũ Văn Kiên', 'Thua trực tiếp', 'Cú đá phạm luật', 'Ban kỹ thuật', 'Đội ngũ y tế', 'Hình ảnh trận đấu'], 'title': "Liên đoàn Pencak Silat Thái Lan: 'Võ sĩ Việt Nam ăn vạ khi yếu thế' " '- Báo VnExpress', 'url': 'https://vnexpress.net/lien-doan-pencak-silat-thai-lan-vo-si-viet-nam-an-va-khi-yeu-the-4994816.html', 'voice': 'HN-Nu-2-BL'} 2025-12-17 05:43:33 [scrapy.extensions.logstats] INFO: Crawled 33 pages (at 1 pages/min), scraped 3 items (at 1 items/min) 2025-12-17 05:43:33 [scrapy.core.engine] INFO: Closing spider (finished) 2025-12-17 05:43:33 [boto3.s3.transfer] DEBUG: Opting out of CRT Transfer Manager. Preferred client: auto, CRT available: False, Instance Optimized: False. 2025-12-17 05:43:33 [boto3.s3.transfer] DEBUG: Using default client. pid: 189310, thread: 140450411064120 2025-12-17 05:43:33 [s3transfer.utils] DEBUG: Acquiring 0 2025-12-17 05:43:33 [s3transfer.tasks] DEBUG: UploadSubmissionTask(transfer_id=0, {'transfer_future': }) about to wait for the following futures [] 2025-12-17 05:43:33 [s3transfer.tasks] DEBUG: UploadSubmissionTask(transfer_id=0, {'transfer_future': }) done waiting for dependent futures 2025-12-17 05:43:33 [s3transfer.tasks] DEBUG: Executing task UploadSubmissionTask(transfer_id=0, {'transfer_future': }) with kwargs {'client': , 'config': , 'osutil': , 'request_executor': , 'transfer_future': } 2025-12-17 05:43:33 [s3transfer.futures] DEBUG: Submitting task PutObjectTask(transfer_id=0, {'bucket': 'dagster-output-data', 'key': 'vnexpress_timestamp/vnexpress_timestamp_d276c038db0911f099e2d6783c969646_scheduled_2025-12-17.jl', 'extra_args': {}}) to executor for transfer request: 0. 2025-12-17 05:43:33 [s3transfer.utils] DEBUG: Acquiring 0 2025-12-17 05:43:33 [s3transfer.tasks] DEBUG: PutObjectTask(transfer_id=0, {'bucket': 'dagster-output-data', 'key': 'vnexpress_timestamp/vnexpress_timestamp_d276c038db0911f099e2d6783c969646_scheduled_2025-12-17.jl', 'extra_args': {}}) about to wait for the following futures [] 2025-12-17 05:43:33 [s3transfer.tasks] DEBUG: PutObjectTask(transfer_id=0, {'bucket': 'dagster-output-data', 'key': 'vnexpress_timestamp/vnexpress_timestamp_d276c038db0911f099e2d6783c969646_scheduled_2025-12-17.jl', 'extra_args': {}}) done waiting for dependent futures 2025-12-17 05:43:33 [s3transfer.tasks] DEBUG: Executing task PutObjectTask(transfer_id=0, {'bucket': 'dagster-output-data', 'key': 'vnexpress_timestamp/vnexpress_timestamp_d276c038db0911f099e2d6783c969646_scheduled_2025-12-17.jl', 'extra_args': {}}) with kwargs {'client': , 'fileobj': , 'bucket': 'dagster-output-data', 'key': 'vnexpress_timestamp/vnexpress_timestamp_d276c038db0911f099e2d6783c969646_scheduled_2025-12-17.jl', 'extra_args': {}} 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler > 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler > 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-endpoint-resolution.s3: calling handler 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-endpoint-resolution.s3: calling handler > 2025-12-17 05:43:33 [s3transfer.utils] DEBUG: Releasing acquire 0/None 2025-12-17 05:43:33 [botocore.regions] DEBUG: Calling endpoint provider with parameters: {'Bucket': 'dagster-output-data', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'Endpoint': 'https://lake-api.actable.ai/', 'ForcePathStyle': True, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': 'vnexpress_timestamp/vnexpress_timestamp_d276c038db0911f099e2d6783c969646_scheduled_2025-12-17.jl', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True} 2025-12-17 05:43:33 [botocore.regions] DEBUG: Endpoint provider result: https://lake-api.actable.ai/dagster-output-data 2025-12-17 05:43:33 [botocore.regions] DEBUG: Selecting from endpoint provider's list of auth schemes: "sigv4". User selected auth scheme is: "None" 2025-12-17 05:43:33 [botocore.regions] DEBUG: Selected auth type "v4" as "v4" with signing context params: {'region': 'us-east-1', 'signing_name': 's3', 'disableDoubleEncoding': True} 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-call.s3.PutObject: calling handler 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-call.s3.PutObject: calling handler 2025-12-17 05:43:33 [botocore.handlers] DEBUG: Adding expect 100 continue header to request. 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-call.s3.PutObject: calling handler > 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-call.s3.PutObject: calling handler 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-call.s3.PutObject: calling handler 2025-12-17 05:43:33 [botocore.endpoint] DEBUG: Making request for OperationModel(name=PutObject) with params: {'url_path': '/vnexpress_timestamp/vnexpress_timestamp_d276c038db0911f099e2d6783c969646_scheduled_2025-12-17.jl', 'query_string': {}, 'method': 'PUT', 'headers': {'User-Agent': 'Boto3/1.34.57 md/Botocore#1.34.162 ua/2.0 os/linux#5.15.0-157-generic md/arch#x86_64 lang/python#3.11.13 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.34.162', 'Content-MD5': 'mWZvSLnLMgovFdK9u5Q9zQ==', 'Expect': '100-continue'}, 'body': , 'auth_path': '/dagster-output-data/vnexpress_timestamp/vnexpress_timestamp_d276c038db0911f099e2d6783c969646_scheduled_2025-12-17.jl', 'url': 'https://lake-api.actable.ai/dagster-output-data/vnexpress_timestamp/vnexpress_timestamp_d276c038db0911f099e2d6783c969646_scheduled_2025-12-17.jl', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': True, 'auth_type': 'v4', 's3_redirect': {'redirected': False, 'bucket': 'dagster-output-data', 'params': {'Bucket': 'dagster-output-data', 'Key': 'vnexpress_timestamp/vnexpress_timestamp_d276c038db0911f099e2d6783c969646_scheduled_2025-12-17.jl', 'Body': }}, 'input_params': {'Bucket': 'dagster-output-data', 'Key': 'vnexpress_timestamp/vnexpress_timestamp_d276c038db0911f099e2d6783c969646_scheduled_2025-12-17.jl'}, 'signing': {'region': 'us-east-1', 'signing_name': 's3', 'disableDoubleEncoding': True}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}} 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event request-created.s3.PutObject: calling handler 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event request-created.s3.PutObject: calling handler > 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event choose-signer.s3.PutObject: calling handler > 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event choose-signer.s3.PutObject: calling handler 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-sign.s3.PutObject: calling handler 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event before-sign.s3.PutObject: calling handler > 2025-12-17 05:43:33 [botocore.auth] DEBUG: Calculating signature using v4 auth. 2025-12-17 05:43:33 [botocore.auth] DEBUG: CanonicalRequest: PUT /dagster-output-data/vnexpress_timestamp/vnexpress_timestamp_d276c038db0911f099e2d6783c969646_scheduled_2025-12-17.jl content-md5:mWZvSLnLMgovFdK9u5Q9zQ== host:lake-api.actable.ai x-amz-content-sha256:UNSIGNED-PAYLOAD x-amz-date:20251217T054333Z content-md5;host;x-amz-content-sha256;x-amz-date UNSIGNED-PAYLOAD 2025-12-17 05:43:33 [botocore.auth] DEBUG: StringToSign: AWS4-HMAC-SHA256 20251217T054333Z 20251217/us-east-1/s3/aws4_request 444342807975ebc5b4565be0024633dbc3c0bf46e84bb006fa6cebbfc8726162 2025-12-17 05:43:33 [botocore.auth] DEBUG: Signature: f389aba91d21843b94fb0b5480e5df8edb22bf5ed9ddf85314c7046c94402796 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event request-created.s3.PutObject: calling handler 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event request-created.s3.PutObject: calling handler 2025-12-17 05:43:33 [botocore.endpoint] DEBUG: Sending http request: 2025-12-17 05:43:33 [botocore.httpsession] DEBUG: Certificate path: /usr/local/lib/python3.11/site-packages/certifi/cacert.pem 2025-12-17 05:43:33 [urllib3.connectionpool] DEBUG: Starting new HTTPS connection (1): lake-api.actable.ai:443 2025-12-17 05:43:33 [botocore.awsrequest] DEBUG: Waiting for 100 Continue response. 2025-12-17 05:43:33 [botocore.awsrequest] DEBUG: 100 Continue response seen, now sending request body. 2025-12-17 05:43:33 [urllib3.connectionpool] DEBUG: https://lake-api.actable.ai:443 "PUT /dagster-output-data/vnexpress_timestamp/vnexpress_timestamp_d276c038db0911f099e2d6783c969646_scheduled_2025-12-17.jl HTTP/1.1" 200 0 2025-12-17 05:43:33 [botocore.parsers] DEBUG: Response headers: {'Server': 'nginx/1.24.0 (Ubuntu)', 'Date': 'Wed, 17 Dec 2025 05:43:33 GMT', 'Content-Length': '0', 'Connection': 'keep-alive', 'Accept-Ranges': 'bytes', 'ETag': '"99666f48b9cb320a2f15d2bdbb943dcd"', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains', 'Vary': 'Origin, Accept-Encoding', 'X-Amz-Bucket-Region': 'us-east-1', 'X-Amz-Id-2': 'dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8', 'X-Amz-Request-Id': '1881EA5CEE1F2227', 'X-Content-Type-Options': 'nosniff', 'X-Ratelimit-Limit': '25637', 'X-Ratelimit-Remaining': '25637', 'X-Xss-Protection': '1; mode=block'} 2025-12-17 05:43:33 [botocore.parsers] DEBUG: Response body: b'' 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event needs-retry.s3.PutObject: calling handler 2025-12-17 05:43:33 [botocore.retryhandler] DEBUG: No retry needed. 2025-12-17 05:43:33 [botocore.hooks] DEBUG: Event needs-retry.s3.PutObject: calling handler > 2025-12-17 05:43:33 [s3transfer.utils] DEBUG: Releasing acquire 0/None 2025-12-17 05:43:33 [scrapy.extensions.feedexport] INFO: Stored jsonlines feed (3 items) in: s3://dagster-output-data/vnexpress_timestamp/vnexpress_timestamp_d276c038db0911f099e2d6783c969646_scheduled_2025-12-17.jl 2025-12-17 05:43:33 [scrapy.statscollectors] INFO: Dumping Scrapy stats: {'downloader/request_bytes': 11016, 'downloader/request_count': 33, 'downloader/request_method_count/GET': 33, 'downloader/response_bytes': 1786289, 'downloader/response_count': 33, 'downloader/response_status_count/200': 33, 'elapsed_time_seconds': 632.802211, 'feedexport/success_count/S3FeedStorage': 1, 'finish_reason': 'finished', 'finish_time': datetime.datetime(2025, 12, 17, 5, 43, 33, 662997, tzinfo=datetime.timezone.utc), 'httpcompression/response_bytes': 8305740, 'httpcompression/response_count': 33, 'item_scraped_count': 3, 'log_count/DEBUG': 206, 'log_count/ERROR': 1, 'log_count/INFO': 48, 'memusage/max': 150945792, 'memusage/startup': 124674048, 'request_depth_max': 2, 'response_received_count': 33, 'robotstxt/request_count': 1, 'robotstxt/response_count': 1, 'robotstxt/response_status_count/200': 1, 'scheduler/dequeued': 32, 'scheduler/dequeued/memory': 32, 'scheduler/enqueued': 32, 'scheduler/enqueued/memory': 32, 'spider_exceptions/ParserError': 1, 'start_time': datetime.datetime(2025, 12, 17, 5, 33, 0, 860786, tzinfo=datetime.timezone.utc)} 2025-12-17 05:43:33 [scrapy.core.engine] INFO: Spider closed (finished) 2025-12-17 05:43:34 [httpcore.connection] DEBUG: close.started 2025-12-17 05:43:34 [httpcore.connection] DEBUG: close.complete 2025-12-17 05:43:34 [httpcore.connection] DEBUG: close.started 2025-12-17 05:43:34 [httpcore.connection] DEBUG: close.complete 2025-12-17 05:43:34 [httpcore.connection] DEBUG: close.started 2025-12-17 05:43:34 [httpcore.connection] DEBUG: close.complete