20

大量の Google バズのデータ​​をスクレイピングしたところですが、同じニュース記事を参照しているバズの投稿を知りたいと思っています。問題は、これらの投稿のリンクの多くが URL 短縮サービスによって変更されていることです。そのため、多くの異なる短縮 URL が実際にはすべて同じニュース記事を指している可能性があります。

何百万もの投稿があることを考えると、私にとって最も効率的な方法(できればPythonで)は何ですか

  1. URL が短縮 URL であるかどうかを検出します (多くの URL 短縮サービスのいずれか、または少なくとも最大のものから)
  2. 短縮 URL の「宛先」、つまり短縮 URL の長い元のバージョンを見つけます。

URL 短縮サービスが厳密なリクエスト レート制限を課しているかどうかは誰にもわかりませんか? これを 1 秒あたり 100 に抑えると (すべて同じ IP アドレスから送信されます)、問題が発生すると思いますか?

更新と暫定 的な解決策 応答は、次の簡単な解決策につながりました

import urllib2
response = urllib2.urlopen("http://bit.ly/AoifeMcL_ID3") # Some shortened url
url_destination = response.url

それでおしまい!

4

5 に答える 5

17

短縮 URL の宛先を取得する最も簡単な方法は、urllib. 短縮 URL が有効な場合 (応答コード 200)、URL が返されます。

>>> import urllib
>>> resp = urllib.urlopen('http://bit.ly/bcFOko')
>>> resp.getcode()
200
>>> resp.url
'http://mrdoob.com/lab/javascript/harmony/'

そして、それはそれです!

于 2010-03-16T12:37:17.503 に答える
3

(AFAIK) ほとんどの URL 短縮サービスは既に短縮された URL を追跡するため、同じ URL を持つ同じエンジンへの複数のリクエストは同じショート コードを返します。

提案されているように、実際の URL を抽出する最善の方法は、短縮 URL の要求に対する応答からヘッダーを読み取ることです。ただし、一部の短縮サービス (bit.ly など) は、長い URL を返すAPI メソッドを提供します。

于 2010-03-16T12:19:17.947 に答える
1

投稿されたソリューションは Python 2.x でのみ機能します。Python 3.x ではこれを行うことができます

import urllib.request as urlreq
link = urlreq.urlopen("http://www.google.com")
fullURL = link.url

完全な URL を取得します。

于 2016-07-08T04:24:55.863 に答える
1
  1. 最も使用されている URL 短縮サービスのリストを作成し、それを拡張しながら新しいものを見つけてから、リストの 1 つの項目のリンクを確認します。

  2. URL をたどらないと URL がどこを指しているのかわからないため、これを行う最善の方法は、短縮された URL をたどり、応答の http ヘッダーを抽出して、どこに向かうのかを確認することです。

1 秒あたり 100 リクエストの場合、確実に問題が発生する可能性があると思います (起こり得る最悪の事態は、スパマーとしてあなたの IP をブラックリストに載せることだと思います)。

于 2010-03-16T12:15:59.523 に答える
0

私が読んだことから、これらの回答は2番目の質問に対処しました。最初の質問に興味がありました。約 300 の短縮機能のリストを表示した後、それらを検出する最善の方法は、単純にそれらをリストまたは正規表現に入れて、それらのいずれかと一致するものを探すことです。

"|".join(z1)
'0rz.tw|1link.in|1url.com|2.gp|2big.at    
r1 = re.compile("|".join(z1),flags=ic)

次に、r1 を使用して、短縮 URL を見つけようとしているもの (メールなど) に対して正規表現として一致させます。

非常に良いリストがここにあります: longurl.org/services

于 2014-05-08T17:52:36.407 に答える