2017-11-28 12 views
4

私はいくつかの異なるWikipediaリンクを保存したいが、同じページに2つの異なるリンクを2回保存したくない。たとえば、次のリンクは異なりますが、同じウィキペディアページを指しています。Python - ページを取得する方法Wikipediaは私にリダイレクトされますか?

https://en.wikipedia.org/w/index.php?title=(1S)-1-Methyl-2,3,4,9-tetrahydro-1H-pyrido-3,4-b-indole&redirect=no 
https://en.wikipedia.org/w/index.php?title=(1S)-1-methyl-2,3,4,9-tetrahydro-1H-pyrido-3,4-b-indole&redirect=no 
__________________________________________________|___________________________________________________________ 

唯一の違いは、大文字の1文字です。または、次のリンク:

https://en.wikipedia.org/wiki/(0,1)-matrix 
https://en.wikipedia.org/wiki/(0,1)_matrix 
___________________________________|______ 

「 - 」と「_」( '')があるためにのみ異なります。だから私は唯一彼らの1つまたは複数の以下のリンク保存されて何をしたい:私はすでにこのSO questionへの回答を試してみました

https://en.wikipedia.org/wiki/Tetrahydroharman 
https://en.wikipedia.org/wiki/Logical_matrix 

。しかし、それは私にとってはうまくいかなかった。 (結果は、私の最初のURLであり、1つのwikiはブラウザにリダイレクトされません)どうすれば私が探しているものを達成することができますか?

+0

あなたは正確にあなたがしようとしたソリューションのどちらにしてSOリンクされた問題の解決を試みることによって得る結果か説明してもらえ正確に! –

+2

@aran私は受け入れられた答えを使用して、私はすでに私が得たものを説明しました。 – tgwtdt

答えて

3

ウィキペディアはあなたがリンクを開くときに何が起こるか、適切301/302リダイレクトを持っていないので、私は迅速な実行可能な解決策を考え出した適切な200成功応答が返されて、その後、URLがJS

を使用して変更されます。まず、実際のURL値が<link rel="canonical" href="タグに格納されているURL

In [42]: import requests 

In [43]: r = requests.get('https://en.wikipedia.org/w/index.php?title=(1S)-1-Met 
    ...: hyl-2,3,4,9-tetrahydro-1H-pyrido-3,4-b-indole') 

In [44]: tmp = r.content.replace('<link rel="canonical" href="', '[email protected]}-=||'). 
    ...: split('[email protected]}-=||')[-1] 

In [45]: idx = tmp.find('"/>') 

In [46]: real_link = tmp[:idx] 

In [47]: real_link 
Out[47]: 'https://en.wikipedia.org/wiki/Tetrahydroharman' 

から&redirect=noを削除します。

あなたのユースケースに十分な上記の方法を使用するか、bs4のようなライブラリを使用してページを解析し、リンクを取得するか、regexを使用してリンクを抽出することができます。

あなたは結果が(例えば)JSON形式にすることができますリダイレクト

のターゲット・ページを取得するために

MediaWiki APIを使用することができます

+0

リクエストを受け取らなければ他の方法はありませんか? get要求がかなり重いためです: - ? – tgwtdt

+0

は 'r @ ndom} - = ||'あなたが確信しているだけのものは、テキストにはまだ存在しません! – tgwtdt

+0

btw私はあなたが.contentを.text – tgwtdt

0

あなたが必要とするすべての要素の値を取得するには、それを解析することですまたは要素タイトル

は、このクエリは「ハラブ」のターゲット・ページを取得します:

結果:Pythonで

{ 
    "batchcomplete":"", 
    "query":{ 
     "redirects":[ 
     { 
      "from":"Halab", 
      "to":"Aleppo" 
     } 
     ], 
     "pages":{ 
     "159244":{ 
      "pageid":159244, 
      "ns":0, 
      "title":"Aleppo" 
     } 
     } 
    } 
} 

import json 
import requests 

query = requests.get(r'https://en.wikipedia.org/w/api.php?action=query&titles={}&&redirects&format=json'.format('Halab')) 

data = json.loads(query.text) 
関連する問題