Skip to content

[已解決] (2020/04/23 更新) Python GoogleNews 中文無法返回搜尋結果的可能解決方法

Last Updated on 2021-06-22 by Clay

今天我在重新使用 Python 中可以自動返回搜尋結果的套件 "GoogleNews" 時 (可以參考我之前寫過的《GoogleNews —— 輕鬆拿到 Google News 新聞的 Python 套件》) ,可能是因為我升級過這個套件的版本,在英文搜尋上沒有問題、可是在中文搜尋上卻沒有返回搜尋結果、也沒有報錯。

在我查看了原始程式碼後,我發現開發者進行了全新的調整,可能也是因應 Google News 的更新也不一定?

在我測試了之後,終於還是成功讓中文搜尋返回結果了。不過這次的事情開始讓我想著,或許終究還是要自己寫個爬蟲比較徹底。

以下,我來簡單紀錄現在的版本該如何進行中文搜尋。 (GoogleNews 1.3.7)


Google News 中文搜尋失效

首先,我使用了英文搜尋測試。

from GoogleNews import GoogleNews

googlenews = GoogleNews()
googlenews.search('US Stock')
result = googlenews.gettext()
print(len(result))

for n in range(len(result)):
    print(n)
    print(result[n])



Output:

10
0
US stocks end higher, snap two-day losing streak on crude …
1
Bitcoin Price Breaks $7000 as US Stock Market Sees Minor …
2
US stocks close higher as oil prices face pressure
3
Why a 'return to normal' could mean disaster for the stock market
4
US stock futures bounce after two days of oil-led rout
5
Airlines and Automakers Consider How to Reopen: Live …
6
Stock snap two-day losing streak
7
Oil prices rebound from 21-year low; gasoline futures rally on …
8
Gung-Ho Fed Exposes 'Gigantic Hole' That May Rattle Stock …
9
Stock market live Wednesday: Dow up 450, oil rebounds from …

目前看起來英文搜尋還是沒有問題的 ...... 嗯,畢竟是作者主要開發的功能吧!應該不至於連這個功能都失效。

然後我測試了中文搜尋。

from GoogleNews import GoogleNews

googlenews = GoogleNews()
googlenews.search('美股')
result = googlenews.gettext()
print(len(result))

for n in range(len(result)):
    print(n)
    print(result[n])



Output:

0

這次沒有返回結果了。神奇的是,這次也跟之前不一樣,之前的報錯消失了。我們需要再次調整 GoogleNews 套件的原始碼。

原始程式碼的位置在於你安裝套件的 "site-packages/GoogleNews/" 底下的 "__init__.py" 中。

我研究了一下,這次的爬蟲套件更新了語言區分,代表我們需要另外指令要搜尋的語言;除此之外,之前無法搜尋中文的 BUG 依然存在,不過那行程式碼被放入了錯誤處理的 "try-except" 當中,所以就不會報錯了。

同樣,在 __init__.py 最上方匯入:

import string



然後找到這行程式碼:

self.url = "https://www.google.com/search?q={}&lr=lang_{}&tbs=lr:lang_1{},qdr:{}&tbm=nws&start={}".format(self.__key,self.__lang,self.__lang,self.__period,(10 * (page - 1)))



在底下加入一行程式碼,變成:

self.url = "https://www.google.com/search?q={}&lr=lang_{}&tbs=lr:lang_1{},qdr:{}&tbm=nws&start={}".format(self.__key,self.__lang,self.__lang,self.__period,(10 * (page - 1)))
self.url = urllib.request.quote(self.url, safe=string.printable)



然後回到我們的程式碼,將語言設定為 "cn",並使用中文搜尋:

from GoogleNews import GoogleNews

googlenews = GoogleNews('cn')
googlenews.search('美股')
result = googlenews.gettext()
print(len(result))

for n in range(len(result)):
    print(n)
    print(result[n])



Output:

10
0
美股道瓊大漲456點重啟經濟的樂觀預期升溫
1
〈美股盤後〉油價反彈!更多刺激方案出台德儀領費半猛漲近6%
2
坐穩了!小摩:明年上半年美股將再創歷史新高
3
這隻黑天鵝來亂!美股挫台股也殺不下去
4
【不斷更新】油價反彈美股上攻道瓊漲逾470點
5
美銀:從VIX歷史規律來看S&P新一輪下跌正在路上
6
布局美股搶賺轉機財
7
《美股掃瞄》美股消息面:美伊緊張+產油減少美國期油飆漲19.1%
8
《美股》營收、用戶增長意外強勁Snap盤後飆升逾20%
9
〈台股盤前〉美股費半強彈回穩短線不悲觀電子股有望扮演反攻要角

在我的環境上運作正常。

4 thoughts on “[已解決] (2020/04/23 更新) Python GoogleNews 中文無法返回搜尋結果的可能解決方法”

  1. 不是搜尋的問題唷~是爬蟲新聞抓取不到新聞的發布時間(日期)跟來源(聯合新聞網、蘋果新聞網等等),請問您有這個問題嗎?

    1. 您好,我使用以下的程式碼,是有成功印出 “media” 和 “date” 的欄位的。

      example
      Output:
      Results

      不確定您碰上了什麼樣的問題,如果使用上有奇怪的地方,不知道您是否有更新到最新版本呢?
      目前我使用的是 1.3.7,不過最近似乎又有了 1.3.8 的新版本。

    1. 這個…由於搜尋引擎的版本迭代非常快,所以的確很難說真的每一次都能成功爬取。
      不過大部分時候,若爬不到標題之類還是挺奇怪的。
      或許可以考慮設定下 user-agent 之類設定來防止被網頁擋掉。

Leave a Reply