1

我想开发一个简单的网络爬虫,从几个网站抓取页面并在实际情况下维护它们。其中一些站点在每个链接上都有会话 ID,它们根本不将会话 ID 存储在 cookie 中。因此,如果我将多次解析站点 - 我的解析表将包含重复页面,仅在会话 id 上有所不同。

所以我的问题是:如何从所有链接中删除会话 ID,有什么聪明的主意吗?我正在开发php,但所有其他平台解决方案都会很有用,即使只是文字上的 alhoritm。

4

3 回答 3

2

例如,如果您想使用正则表达式,这将从您的网址中删除所有会话(只要它们有 32 个字符,我猜这是通常的):

$url = preg_replace('#([\w\d]+=[\w\d]{32})#',null,$url);

于 2010-10-21T10:22:26.953 回答
1

您始终可以使用正则表达式来匹配会话密钥,它们在大多数情况下都是典型的 (PHPSESSID)。无论如何,如果您正在抓取某些内容并希望接受和使用 cookie,您应该使用cURL(请参阅curl_setopt COOKIE、COOKIEFILE 和 COOKIEJAR)。

于 2010-10-21T10:15:25.930 回答
1

您可以使用 parse_str() 和 http_build_query() 来提取、清除和重建 URL 参数。您可以使用正则表达式,但我认为获取 URL 参数数组会更容易。

parse_str('session=123445&data=example&action=demo', $url_params);
// $url_params is now an associative array of the url params
unset($url_params['session'], $url_params['action']);
$new_url_param_string = http_build_query($url_params);
于 2010-10-21T10:27:20.823 回答