【问题标题】:Using PHP cURL to get some text from website and store in MySQL使用 PHP cURL 从网站获取一些文本并存储在 MySQL 中
【发布时间】:2020-07-07 15:55:07
【问题描述】:

我一直在四处寻找以完成这项工作,但似乎我无法自己完成。我正在使用 cURL 从网站获取一些信息并将这些信息存储在 MySQL 数据库中。我现在拥有的是以下代码:

$target_url = "[http:\[//\]iliria98\[.\]com][1]"; //delete [ and ] to get the url correctly
$userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)';

// make the cURL request to $target_url
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 100);
$html= curl_exec($ch);
if (!$html) {
    echo "<br />cURL error number:" .curl_errno($ch);
    echo "<br />cURL error:" . curl_error($ch);
    exit;
}

// parse the html into a DOMDocument
$document = new DOMDocument();
libxml_use_internal_errors(true);
$document->loadHTML($html);
libxml_clear_errors();
$selector = new DOMXPath($document);
//$anchors = $selector->query('//div[@class="single"]/div[2]');
$anchors = $selector->query('//div[@class="single"]/div');
foreach($anchors as $div) { 
    $text = $div->nodeValue;

    $valuta_arr=explode(',', $text);
    var_dump($valuta_arr);
    echo $text;
}

而且,输出不正确,因为它从网站获取所有货币代码,但货币值仅来自第一行,来自美元。 我想要的是从指定的 url 上的 html 表中获取值,并将这些值插入到每种货币的数据库中,其中数据库表如下所示:

id
currency
sell
buy
date

我直到 mysql 插入代码才得到,因为我已经挣扎了 3 天,首先从那个网站获取信息。 希望有人可以帮助我。 谢谢大家。

【问题讨论】:

    标签: php mysql curl web-scraping php-curl


    【解决方案1】:

    如果您尝试通过curl http://iliria98.com 从控制台获取此页面,您会发现,此小部件由 js-script 填充:

    $('div#usd1').append('<div style="position: absolute; background: transparent; width: 100%; height: 100%; left: 0; top: 0; z-index: 9999;"></div>')
    $(".kursiweb .single").eq(0).find("div").eq(1).html("114<sup>.20</sup>");  $(".kursiweb .single").eq(0).find("div").eq(2).html("116");
    

    等等……

    因此,您只能从 curl 获取的源 HTML 中的脚本中获取所需的数据,而不是从 DOM 文档中获取所需的数据,因为 curl 没有任何 JS 引擎。

    您可以采用的另一种方法 - 使用 PhantomJS 之类的东西

    【讨论】:

    • 感谢您的回复。我直到源代码的末尾才看到那里的脚本。对此感到抱歉。关于您的建议,我对 javascript 没有任何经验。你能帮我解决这个问题吗?谢谢!
    • 已经尝试了很多我在这里找到的方法,但似乎没有什么对我有用。当然,我不知道该怎么做。有什么帮助吗?
    • @Kleidi 好的,你也可以试试php-webdriver
    • 谢谢。这对我来说太复杂了。 cURL 查询对我来说更容易理解,但我无法让它工作,所以我会放手。谢谢!
    • @Kleidi 很高兴为您提供帮助,如果此答案有帮助,您可以将其标记为已接受。比,是的,不是所有的东西都可以通过一个简单的 curl 从互联网上刮下来......就像在这个例子中,javascript 生成的代码不能用这种方式刮掉。你只需要我在下面建议你的东西。
    猜你喜欢
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2016-05-28
    • 2014-09-28
    • 1970-01-01
    • 2013-08-31
    相关资源
    最近更新 更多