단축 또는 "작은"URL의 목적지 감지
문제
방금 많은 Google Buzz 데이터를 긁어 냈으며 어떤 버즈 게시물이 동일한 뉴스 기사를 참조하는지 알고 싶습니다. 문제는이 게시물의 많은 링크가 URL 쇼트너에 의해 수정되었으므로 많은 고유 한 단축 URL이 실제로 동일한 뉴스 기사를 가리킬 수 있다는 것입니다.
수백만 개의 게시물이 있다는 점을 감안할 때 가장 효율적인 방법은 무엇입니까 (바람직하게는 파이썬에서)
- URL이 단축 URL인지 여부를 감지합니다 (많은 URL 단축 서비스 중 하나 또는 최소한 가장 큰)
- 단축 된 URL의 "대상", 즉 단축 URL의 길고 원본 버전을 찾으십시오.
URL 단축기가 엄격한 요청 속도 제한을 부과하는지 아는 사람이 있습니까? 이것을 100/second (모두 동일한 IP 주소를 형성 함)로 유지하면 문제가 발생한다고 생각하십니까?
업데이트 및 예비 솔루션응답은 다음과 같은 간단한 솔루션으로 이어졌습니다.
import urllib2
response = urllib2.urlopen("http://bit.ly/AoifeMcL_ID3") # Some shortened url
url_destination = response.url
그게 다야!
해결책
단축 된 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/'
그리고 그게 그게!
다른 팁
(AFAIK) 대부분의 URL 쇼트너는 이미 단축 된 URL을 추적하므로 동일한 URL을 사용하여 동일한 엔진에 대한 여러 요청이 동일한 단락을 반환합니다.
제안 된 바와 같이, 실제 URL을 추출하는 가장 좋은 방법은 응답에서 단축 된 URL에 대한 요청에 대한 헤더를 읽는 것입니다. 그러나 일부 단축 서비스 (예 : Bit.ly)가 제공합니다. API 방법 긴 URL을 반환합니다
가장 많이 사용되는 URL-Shorteners 목록을 작성하고 새 제품을 발견하는 동안 확장 한 다음 목록의 한 항목에 대한 링크를 확인하십시오.
당신은 당신이 그것을 따르지 않는 한 URL이 어디로 가리키는지 알지 못하므로이를 수행하는 가장 좋은 방법은 단축 된 URL을 따르고 응답의 HTTP 헤더를 추출하여 어디로 향하는지 확인하는 것입니다.
초당 100 개의 요청으로 반드시 문제가 발생할 수 있다고 생각합니다 (최악의 상황은 IP를 스패머로 블랙리스트하는 것입니다).
게시 된 솔루션은 Python 2.x에서만 작동합니다. Python 3.x를 위해서는이 작업을 수행 할 수 있습니다.
import urllib.request as urlreq link = urlreq.urlopen("http://www.google.com") fullURL = link.url
전체 URL을 얻으려면.
내가 읽은 것에서이 답변은 두 번째 질문을 다루었습니다. 첫 번째 질문에 관심이있었습니다. 약 300 개의 단축기 목록을 본 후에는 그것들을 감지하는 가장 좋은 방법은 단순히 목록에 올리거나 Regex에 넣고 그들과 일치하는 것을 찾는 것입니다.
"|".join(z1)
'0rz.tw|1link.in|1url.com|2.gp|2big.at
r1 = re.compile("|".join(z1),flags=ic)
그런 다음 R1을 사용하여 URL 단축기를 찾으려고하는 것에 대해 Regex로 일치합니다 (메일 등 ...)
아주 좋은 목록이 여기에 있습니다. longurl.org/services