2017-11-28 3 views
4

몇 가지 다른 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 
__________________________________________________|___________________________________________________________ 

유일한 차이점은 하나 대문자입니다. 또는 다음 링크 :

하나는 '-'이고 다른 하나는 '_'('')이므로 다른 것입니다. 그래서 나는 단지 그들 중 하나 또는 다음 링크 저장하고 원하는 : 이미이 SO question에 대한 대답을 시도

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

. 그러나 그것은 나를 위해 작동하지 않았다. (결과는 나를위한 초기 URL입니다. 위키에서 브라우저로 리다이렉트하지 않습니다.) 그래서 내가 찾고있는 것을 어떻게 얻을 수 있습니까?

+0

당신은 당신이 정확하게 당신이 시도 솔루션의 어떤로하고, 그래서 당신은 연결 문제의 해결책을 시도하여 얻을 및 결과 설명해 주시겠습니까 정확하게!? –

+2

@aran 나는 받아 들인 대답을 사용했고 이미 내가 가진 것을 설명했다. – tgwtdt

답변

3

위키 백과는 열 때 링크가 적절한 (200) 성공 응답이 반환 된 후 URL을 내가 빠른 실행 가능한 솔루션을 함께했다 JS

를 사용하여 변경 발생하는 적절한 302분의 301 리디렉션을 가지고 있지 않기 때문에 . 첫째, 실제 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와 같은 라이브러리를 사용하여 페이지를 구문 분석하고 링크를 가져 오거나 정규식을 사용하여 링크를 추출 할 수 있습니다.

+0

요청을받지 않고서도 다른 방법을 사용할 수 있습니까? get 요청이 오히려 무거운 무게이기 때문에 : -? – tgwtdt

+0

은 'r @ ndom} - = ||' 당신이 확신하는 무엇인가는 이미 텍스트에 존재하지 않을 것입니다! – tgwtdt

+0

btw .content를 .text – tgwtdt

0

당신은

결과가 (예를 들어) JSON 형식 일 수 있습니다 리디렉션의 대상 페이지를 얻을 수 MediaWiki API를 사용할 수는

당신이 필요로하는 모든 요소 의 값을 얻기 위해 구문 분석하는 것입니다 또는 요소 제목

'할랍'에 대한 대상 페이지 검색합니다이 쿼리 :

결과 : 파이썬에서

{ 
    "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) 
관련 문제