{“content”:”---\nname: malaysian-news-scraper\ndescription: Scrape Malaysian Chinese news from 星洲网 (sinchew.com.my) when asked for Malaysian news. Discovers that RSS feeds are broken and requires direct HTML scraping via data-title attributes.\ntriggers:\n - “马来西亚新闻”\n - “马来西亚 news”\n - “malaysian news”\n - “星洲网 新闻”\n---\n\n# Malaysian News Scraper (星洲网 Sin Chew Daily)\n\n## When to Use\nWhen asked to get Malaysian news, generate Malaysian news slides, or any Malaysian news-related task.\n\n## How to Scrape Malaysian News from 星洲网\n\n星洲网 (sinchew.com.my) is Malaysia’s most influential Chinese newspaper. Their RSS feeds are broken (404), but news headlines can be scraped directly from the homepage HTML.\n\n### Method: Extract data-title attributes from HTML\n\npython\nimport urllib.request, re, html\n\nurl = \"https://www.sinchew.com.my\"\nreq = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'})\ncontent = urllib.request.urlopen(req, timeout=10).read().decode('utf-8', errors='replace')\n\n# Extract articles with data-title AND href\narticles = re.findall(r'<a[^>]+data-title=[\"\\']([^\"\\']+)[\"\\'][^>]+href=[\"\\']([^\"\\']+)[\"\\'][^>]*>', content)\narticles2 = re.findall(r'<a[^>]+href=[\"\\']([^\"\\']+)[\"\\'][^>]+data-title=[\"\\']([^\"\\']+)[\"\\'][^>]*>', content)\narticles.extend([(t, l) for l, t in articles2])\n\n# Filter and categorize\nseen = set()\nnews_items = []\nfor title, link in articles:\n title = html.unescape(title.strip())\n link = html.unescape(link.strip())\n if len(title) > 15 and title not in seen:\n seen.add(title)\n full_url = f\"https://www.sinchew.com.my{link}\" if link.startswith('/') else link\n cat = 'other'\n if '/nation/' in link or '/malaysia/' in link:\n cat = 'malaysia'\n elif '/finance/' in link or '/business/' in link:\n cat = 'finance'\n elif '/international/' in link:\n cat = 'international'\n elif '/sports/' in link:\n cat = 'sports'\n news_items.append((cat, title, full_url))\n\n# Sort by priority: Malaysia > Finance > International > Sports > Other\npriority = {'malaysia': 0, 'finance': 1, 'international': 2, 'sports': 3, 'other': 4}\nnews_items.sort(key=lambda x: priority[x[0]])\n\n\n### Alternative: Google News Malaysia (English)\nRSS: https://news.google.com/rss?hl=zh-CN&gl=MY&ceid=MY:zh-CN\n(Returns 38 items, all in English)\n\n### Malaysian News Sources Tested\n| Source | RSS Status | Notes |\n|--------|-----------|-------|\n| 当今大马 malaysiakini.com | 404 | RSS dead |\n| 光华网 kwongwah.com.my | 404 | RSS dead |\n| 星洲网 sinchew.com.my | 404 | RSS dead |\n| 东方日报 orientaldaily.com.my | 0 items | RSS dead |\n| 星洲网 homepage | WORKS | Direct HTML scrape via data-title |\n| Google News Malaysia | WORKS | English only, 38 items |\n\n## Key Insights\n- 星洲网 has 200+ articles on homepage, enough for Malaysian news needs\n- Filter out navigation items (首页, 菜单, 星洲人, 更多, search, 登录, 注册)\n- 星洲网 uses Traditional Chinese characters but Malaysian Chinese readers use Simplified Chinese\n- When generating slides for Malaysian user, use Simplified Chinese in content\n\n## trafilatura v2.0 安装 (Termux + Python 3.13)\n\nPython 3.13 aarch64 没有 lxml 预编译 wheel,从源码编译极慢(>300s 超时)。\n\nbash\n# 正确方法:用 Termux 原生包\npkg install python-lxml -y\npip install trafilatura\n\n\ntrafilatura v2.0 APIextract_url() 已被移除):\n\npython\nimport requests\nimport trafilatura\n\nurl = \"https://www.sinchew.com.my/article/...\"\n\n# 方法1:requests 拿 HTML → trafilatura.extract()(推荐)\nheaders = {'User-Agent': 'Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36'}\nhtml = requests.get(url, headers=headers, timeout=15).text\nresult = trafilatura.extract(html)\n\n# 方法2:trafilatura.fetch_url() 不接受 user_agent 参数\n# (它会自动设置 UA,但星洲网可能封锁)\nfetched = trafilatura.fetch_url(url)\nresult = trafilatura.extract(fetched)\n\n\n## Related Skill\n- notebooklm-news-ppt — for generating slides from scraped news\n”}