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
〈台股盤前〉美股費半強彈回穩短線不悲觀電子股有望扮演反攻要角
在我的環境上運作正常。
不是搜尋的問題唷~是爬蟲新聞抓取不到新聞的發布時間(日期)跟來源(聯合新聞網、蘋果新聞網等等),請問您有這個問題嗎?
您好,我使用以下的程式碼,是有成功印出 “media” 和 “date” 的欄位的。
Output:
不確定您碰上了什麼樣的問題,如果使用上有奇怪的地方,不知道您是否有更新到最新版本呢?
目前我使用的是 1.3.7,不過最近似乎又有了 1.3.8 的新版本。
想請問若自行爬蟲硬幹
我爬不到該標題對應連結是正常的嗎?
原始檔案如下:
https://repl.it/join/icepkiku-wastu01
這個…由於搜尋引擎的版本迭代非常快,所以的確很難說真的每一次都能成功爬取。
不過大部分時候,若爬不到標題之類還是挺奇怪的。
或許可以考慮設定下 user-agent 之類設定來防止被網頁擋掉。