概念:制作搜索代理

时间:2014-03-17 12:24:57

标签: javascript .net conceptual

我正在寻找有关如何为没有此功能的在线市场构建第三方搜索代理的一些指导。

在线市场非常古老,并且有一个HTML页面,上面有他们销售的所有产品。

如果您对详细信息感兴趣,请访问以下网站:http://www.returbilen.se/category.html?SHOW=new&anl=1

我想要构建的是一个可以每天搜索一次页面并检查我的预定义搜索标准的工具。为了简单的问题,我想说我对沃尔沃感兴趣。每天我都希望该工具扫描页面并检查是否有任何沃尔沃。

如果有任何沃尔沃,我希望该工具向我发送电子邮件通知。

是否考虑过如何制作这样的工具?或者可能已经存在这样的工具?

这是alhpa版本的步骤:

1)检查网站

2)如果网站包含“沃尔沃”一词 - >发送电子邮件通知

这个问题非常广泛,但问题是概念性的,并被标记为概念

1 个答案:

答案 0 :(得分:0)

如果您想要查找特定内容并对搜索进行微调,您可以构建一个基本的Web爬网程序,它可以读取页面的HTML并搜索您希望查找的文本。您需要了解网站页面的布局或多或少,但使用.NET,您只需使用WebClient下载HTML作为字符串,就像这样... < / p>

// arguments could be passed into a method that wraps all this
// we're just setting them for now

var html = string.Empty;
var uri = "http://www.returbilen.se/category.html";
var query = new StringBuilder();
var args = new Dictionary<string, string>
{
    { "SHOW", "new" },
    { "anl", "1" }
}

// loop through the arguments to build your query string
// using a counter because you can't get the index of a
// un-ordered Dictionary and I'm loath to order query strings

var count = 0;

foreach (var arg in args)
{
    count++;
    query.AppendFormat("{0}={1}{2}", arg.Key, arg.Value, count < arg.Count 
                                     ? "&" : string.empty );
}

// now fetch your HTML as a string

using (var wc = new WebClient())
{
    html = wc.DownloadString(string.Format("{0}?{1}", uri, query.ToString()));
}

在此之后,您可以使用HtmlAgilityPack来解析节点并找到您想要的内容。但是,您也可以使用PHP简单脚本执行类似操作,该脚本根据您指定的条件加载HTML,然后查找您的搜索词是否存在...

// same argument setup as before and this could also be passed
// into a basic function call, same looping logic, etc.

$uri = 'http://www.returbilen.se/category.html?';
$query = '';
$args = array(
    'SHOW' => 'new',
    'anl'  => '1'
);    

$count = 0;

foreach ($args as $k => $v) {
    $count++;
    $query .= $k . '=' . $v;

    if ($count == count($args) {
        $query .= '&';
    }
}

// now load the HTML to use PHP's DOM parser

$html = file_get_html($uri . $query);

// now loop through the nodes to find the product you want
// making sure your search is more or less case invariant

foreach ($html->find('div.product') as $product) {
    if (strtolower(strpos($product->find('div.name')), 'volvo') !== false) {
        // do whatever you wish with the result
    }
}

设置此脚本后,您可以将其放在WAMP文件夹中,并安排作业在给定时间调用它,然后打开完成后生成的报告文件。或者您可以创建一个调用它的页面,假设您将其作为JSON返回...

$.getJSON('searchsite.php', function (data) {
    // parse results into Knockout or add via jQuery
}

...看看你是否对沃尔沃有什么打击,或者只是使用PHP DOM Parser抓取整个产品细节。您还可以在.NET中创建类似的东西,但是您需要创建WebAPI项目或Web服务,然后以JSON格式返回结果。