【问题标题】:PHP: Email scraping from a list of urls listed in a txt filePHP:从 txt 文件中列出的 url 列表中抓取电子邮件
【发布时间】:2021-03-14 22:40:08
【问题描述】:

我正在尝试从 txt 文件中列出的 url 中提取电子邮件。

但是只有txt文件的最后一个url显示了他的相关邮件。

输出如下所示:

url1

url2

url3

url4

电子邮件:电子邮件地址1

电子邮件:电子邮件地址2

我不明白我做错了什么。

我有什么明显的遗漏吗?感谢您的帮助。

代码:

<?php
$handle = fopen("url-list.txt", "r");
if ($handle) {
    while (($url = fgets($handle)) !== false) {
        // process the line read.
        echo "<br>";
        echo $url ;
        echo "<br>";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    $result = curl_exec($ch);
    curl_close($ch);

    $emails = extract_emails_from($result);
    
    foreach(array_unique($emails) as $email) {
        echo "email: ", trim($email);
        echo "<br>";
    }
}
fclose($handle);
} else {
    // error opening the file.
} 
function extract_emails_from($string) {
    preg_match_all("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $string, $matches);
    return $matches[0];
}
?>

【问题讨论】:

    标签: php web-scraping


    【解决方案1】:

    这是一个范围问题。

    $emails = extract_emails_from($result);
    

    $emails 变量在while 循环的每次迭代中都会被重写。

    解决方案:

    在循环外创建一个新数组并将结果合并到其中。

    $allEmails = [];
    
    while (($url = fgets($handle)) !== false) {
       // ... rest of your code
       $emails = extract_emails_from($result);
       $allEmails = array_merge($allEmails, $emails);
    }
    

    【讨论】:

    • 感谢您的回答。我尝试了您建议的方式,但问题仍然存在。在我的代码中,我不是在每次迭代之前都回显 $email et 吗?我可能错了,但我认为 foreach 循环做到了,不是吗?
    • $emails 只包含当前的迭代结果。如果要打印所有结果,则需要打印(或遍历)$allEmails(而不是当前循环中的$emails)。
    猜你喜欢
    • 2020-01-23
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2020-07-24
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    相关资源
    最近更新 更多