Как использовать Python / PHP для удаления избыточности в URL-ссылке? - PullRequest
2 голосов
/ 15 января 2012

Многие веб-сайты добавляют теги к URL-ссылке для целей отслеживания, например

http://www.washingtonpost.com/blogs/answer-sheet/post/report-we-still-dont-know-much-about-charter-schools/2012/01/13/gIQAxMIeyP_blog.html?wprss=linkset&tid=sm_twitter_washingtonpost

Если мы удалим приложение "? Wprss = linkset & tid = sm_twitter_washingtonpost", все равно перейдем на то же самоестр.Есть ли общий подход, который мог бы удалить эти элементы избыточности?Любой комментарий будет полезен.

Спасибо!

Ответы [ 4 ]

2 голосов
/ 15 января 2012

Чтобы удалить запрос, фрагментируйте части из URL

В Python, используя urlparse:

import urlparse

url = urlparse.urlsplit(URL)               # parse url
print urlparse.urlunsplit(url[:3]+('','')) # remove query, fragment parts

Или более легкий подход, но он может быть менее универсальным:

print URL.partition('?')[0]

Согласно rfc 3986 URI может быть проанализирован с помощью регулярного выражения:

/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/

Поэтому, если нет идентификатора фрагмента (последняя часть в приведенном выше регулярном выражении) или присутствует компонент запроса (со второй по последнюю часть), тогда URL.partition('?')[0] должен работать, в противном случае ответы, которые разделяют URL на «?» потерпит неудачу, например,

http://example.com/path#here-?-ereh

но urlparse ответить еще работает .

Чтобы проверить, можете ли вы получить доступ к странице через URL

В Python:

import urllib2

try:
    resp = urllib2.urlopen(URL)
except IOError, e:
    print "error: can't open %s, reason: %s" % (URL, e)
else:
    print "success, status code: %s, info:\n%s" % (resp.code, resp.info()),

resp.read() может использоваться для чтения содержимого страницы.

1 голос
/ 15 января 2012

Чтобы удалить строку запроса в URL:

<?php
$url = 'http://www.washingtonpost.com/blogs/answer-sheet/post/report-we-still-dont-know-much-about-charter-schools/2012/01/13/gIQAxMIeyP_blog.html?wprss=linkset&tid=sm_twitter_washingtonpost';
$url = explode('?',$url);
$url = $url[0];

//check output
echo $url;
?>

Чтобы проверить действительный или нет URL:

Вы можете использовать функцию PHP get_headers($url).Пример:

<?php
//$url_o = 'http://www.washingtonpost.com/blogs/answer-sheet/post/report-we-still-dont-know-much-about-charter-schools/2012/01/13/gIQAxMIeyP_blog.html?wprss=linkset&tid=sm_twitter_washingtonpost';

$url_o = 'http://mobile.nytimes.com/article?a=893626&f=21';

$url = explode('?',$url_o);

$url = $url[0];

$header = get_headers($url);

if(strpos($header[0],'Not Found'))
{
    $url = $url_o;
}

//check output
echo $url; 
?>
0 голосов
/ 15 января 2012

Вы можете использовать регулярное выражение:

$yourUrl = preg_replace("/[?].*/","",$yourUrl);

Что означает: «заменить знак вопроса и все остальное пустой строкой».

0 голосов
/ 15 января 2012

Вы можете создать анализатор URL, который будет вырезать все из "?"и на

<?php
$pos = strpos($yourUrl, '?'); //First, find the index of "?"

//Then, cut all the chars after the "?" and a append to a new URL string://
$newUrl = substr($yourUrl, 0, -1*(strlen($yourUrl)-((int)$pos)));

echo ($newUrl);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...