【问题标题】:How to read .vcf file from browser?如何从浏览器读取 .vcf 文件?
【发布时间】:2015-09-03 16:01:02
【问题描述】:

我正在尝试从IFA Berlin 的参展商处检索所有电子邮件地址。 不过,这很容易抓取。

但作为一个棘手的部分,它们只允许我们下载 .vcf 文件或发送电子邮件(我猜是通过他们的服务器)。我想在不下载该 vcf 文件的情况下找到该电子邮件地址。否则我可以下载它并使用 PHP 轻松阅读(因为我的爬虫也是 PHP 的)。

这也是我潜伏多年后的第一个问题!很高兴认识你们。

【问题讨论】:

    标签: php web-crawler vcf-vcard


    【解决方案1】:

    如何从浏览器读取.vcf 文件?

    此文件将始终是文件下载,并且永远不会显示在浏览器中。使其工作的一种方法是设置自定义浏览器扩展,它临时存储文件并解析微格式并显示信息。

    PHP 抓取方式

    那里有 vcard 解析器:https://github.com/nuovo/vCard-parser 但我认为您可以将其基于 RegExp 解决方案:/EMAIL;INTERNET:(.*)/。

    让我们假设,您的第一次抓取运行为您提供了与会者 ID 列表, 然后您的第二次(vcard)抓取运行可以通过 ID 获取和提取姓名和电子邮件:

    <?php
    
    function getVcard($id) {
        return file_get_contents('http://www.virtualmarket.ifa-berlin.de/?Action=attendeeVcard&id=' . $id);
    }
    
    function getEmailFromVcard($vcard)
    {
        preg_match('/EMAIL;INTERNET:(.*)/', $vcard, $matches);
        if(isset($matches[1])) {
            return $matches[1];
        }
    }
    
    function getNameFromVcard($vcard)
    {
        preg_match('/N:(.*);;/', $vcard, $matches);
        if(isset($matches[1])) {
            $array = explode(';', $matches[1]);
            $name = trim($array[1]) . ' ' . trim($array[0]);
            return $name;
        }
    }
    
    $id = 1775586;
    
    $vcard = getVcard($id);
    $email = getEmailFromVcard($vcard);
    $name = getNameFromVcard($vcard);
    
    echo $name . ' ' . $email;
    

    【讨论】:

    • 哇,谢谢!是的,文件很容易解析,这就是我要做的,非常感谢!如果我有更多问题,我会在这里发布。
    • 感谢您,几分钟内就完成了!我以前从未使用过正则表达式,它对我来说总是很复杂。你有什么好的教程吗?再次感谢
    • 正则表达式在开始时可能有点令人困惑,但是一旦您习惯了一些基本的可重用匹配表达式,乐趣因素就会发挥作用。一个很好的交互式教程是regexone.com。一个有价值的互动工具,可以一起玩弄和困惑表达式:regex101.com。您还将获得有关正在发生的事情的详细说明。示例:regex101.com/r/qG4vK7/1——我使用的表达式是(.*)——捕获任何东西。最基本的东西。
    • 甜蜜!谢谢,看起来很有趣
    猜你喜欢
    • 2016-09-28
    • 2012-08-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多