python - 解码编码的 Google 新闻网址

标签 python base64 google-news

我在 https://news.google.com/ 中保存了一个搜索但谷歌不使用在其结果页面上找到的实际链接。相反,您会找到这样的链接:

https://news.google.com/articles/CBMiUGh0dHBzOi8vd3d3LnBva2VybmV3cy5jb20vc3RyYXRlZ3kvd3NvcC1tYWluLWV2ZW50LXRpcHMtbmluZS1jaGFtcGlvbnMtMzEyODcuaHRt0gEA?hl=en-US&gl=US&ceid=US%3Aen

我想要使用 python 解析的“真实链接”。如果将上面的 url 插入浏览器,您将在一瞬间看到

开幕https://www.pokernews.com/strategy/wsop-main-event-tips-nine-champions-31287.htm

我尝试了一些使用 Requests 模块的东西,但“没有雪茄”。

如果做不到,这些 google 链接是永久性的吗?它们可以一直用来打开网页吗?

更新 1:

在发布这个问题后,我使用了 hack 来解决问题。我只是再次使用 urllib 打开 google url,然后解析源代码以找到“真实 url”。

很高兴看到 TDG 的回答,因为它可以帮助我的程序运行得更快。但是谷歌是神秘的,它没有永远有效的链接。

对于今天早上的新闻提要,它轰炸了第 4 条新闻:

 RESTART: C:\Users\Mike\AppData\Local\Programs\Python\Python36-32\rssFeed1.py 
cp1252
cp1252
>>> 1
Tommy Angelo Presents: The Butoff
CBMiTWh0dHBzOi8vd3d3LnBva2VybmV3cy5jb20vc3RyYXRlZ3kvdG9tbXktYW5nZWxvLXByZXNlbnRzLXRoZS1idXRvZmYtMzE4ODEuaHRt0gEA
b'\x08\x13"Mhttps://www.pokernews.com/strategy/tommy-angelo-presents-the-butoff-31881.htm\xd2\x01\x00'
Flopped Set of Nines: Get All In on Flop or Wait?
CBMiXGh0dHBzOi8vd3d3LnBva2VybmV3cy5jb20vc3RyYXRlZ3kvZmxvcHBlZC1zZXQtb2YtbmluZXMtZ2V0LWFsbC1pbi1vbi1mbG9wLW9yLXdhaXQtMzE4ODAuaHRt0gEA
b'\x08\x13"\\https://www.pokernews.com/strategy/flopped-set-of-nines-get-all-in-on-flop-or-wait-31880.htm\xd2\x01\x00'
What Not to Do Online: Don’t Just Stop Thinking and Shove
CBMiZWh0dHBzOi8vd3d3LnBva2VybmV3cy5jb20vc3RyYXRlZ3kvd2hhdC1ub3QtdG8tZG8tb25saW5lLWRvbi10LWp1c3Qtc3RvcC10aGlua2luZy1hbmQtc2hvdmUtMzE4NzAuaHRt0gEA
b'\x08\x13"ehttps://www.pokernews.com/strategy/what-not-to-do-online-don-t-just-stop-thinking-and-shove-31870.htm\xd2\x01\x00'
Hold’em with Holloway, Vol. 77: Joseph Cheong Gets Crazy with a Pair of Ladies
CBMiV2h0dHBzOi8vd3d3LnBva2VybmV3cy5jb20vc3RyYXRlZ3kvaG9sZC1lbS13aXRoLWhvbGxvd2F5LXZvbC03Ny1qb3NlcGgtY2hlb25nLTMxODU4Lmh0bdIBAA
Traceback (most recent call last):
  File "C:\Users\Mike\AppData\Local\Programs\Python\Python36-32\rssFeed1.py", line 68, in <module>
    GetGoogleNews("https://news.google.com/search?q=site%3Ahttps%3A%2F%2Fwww.pokernews.com%2Fstrategy&hl=en-US&gl=US&ceid=US%3Aen", 'news')
  File "C:\Users\Mike\AppData\Local\Programs\Python\Python36-32\rssFeed1.py", line 34, in GetGoogleNews
    real_URL = base64.b64decode(coded)
  File "C:\Users\Mike\AppData\Local\Programs\Python\Python36-32\lib\base64.py", line 87, in b64decode
    return binascii.a2b_base64(s)
binascii.Error: Incorrect padding
>>> 

更新 2:

在阅读了 base64 之后,我认为“不正确的填充”填充消息意味着输入字符串必须能被 4 整除。所以我在

中添加了“aa”
CBMiV2h0dHBzOi8vd3d3LnBva2VybmV3cy5jb20vc3RyYXRlZ3kvaG9sZC1lbS13aXRoLWhvbGxvd2F5LXZvbC03Ny1qb3NlcGgtY2hlb25nLTMxODU4Lmh0bdIBAA

并没有收到错误信息:

>>> t = s + 'aa'
>>> len(t)/4
32.0
>>> base64.b64decode(t)
b'\x08\x13"Whttps://www.pokernews.com/strategy/hold-em-with-holloway-vol-77-joseph-cheong-31858.htm\xd2\x01\x00\x06\x9a'

最佳答案

基本上是base64编码的字符串。如果您运行以下代码片段:

import base64
coded = 'CBMiUGh0dHBzOi8vd3d3LnBva2VybmV3cy5jb20vc3RyYXRlZ3kvd3NvcC1tYWluLWV2ZW50LXRpcHMtbmluZS1jaGFtcGlvbnMtMzEyODcuaHRt0gEA'
url = base64.b64decode(coded)
print(url)

您将获得以下输出:

b'\x08\x13"Phttps://www.pokernews.com/strategy/wsop-main-event-tips-nine-champions-31287.htm\xd2\x01\x00'

所以看起来您的网址带有一些额外内容。如果所有的extras都一样,就很容易过滤掉url。否则 - 您将不得不分别处理每一个。

关于python - 解码编码的 Google 新闻网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51131834/

相关文章:

python - 是否可以将 python pickle 对象作为字符串存储在类中?

servlets - 如何将 xml 编码为 Base64 并作为 servlet 响应发回?

python - 来自 Google 新闻的网络抓取文章

python - 图像去模糊

python - 将 numpy 数组图像转换为与 requests.get 相同的格式

javascript - 从服务器获取一张图片,存入localStorage,并显示出来

rss - 通过 Google 新闻 RSS 选择自定义主题

python - 用 python 抓取谷歌新闻

python - Python + Redland 用于 RDF 存储和检索的示例

PHP base64_decode 保存损坏的图像