PHP中的Web抓取
我正在寻找一种方法,从中用户提供的URL对另一个页面进行小预览 我只想检索页面的标题、图像(如网站的徽标)和一些文本或描述(如果有的话)。在没有任何外部库/类的情况下,有什么简单的方法可以做到这一点吗?谢谢 到目前为止,我已经尝试使用DOCDocument类,加载HTML并将其显示在屏幕上,但我认为这不是正确的方法。然后寻找标题和IMG标签,或者你还需要做什么。 < P>我建议你考虑一下。这将使它变得非常容易 下面是一个如何提取标题和第一个图像的工作示例PHP中的Web抓取,php,html,curl,html-parsing,web-scraping,Php,Html,Curl,Html Parsing,Web Scraping,我正在寻找一种方法,从中用户提供的URL对另一个页面进行小预览 我只想检索页面的标题、图像(如网站的徽标)和一些文本或描述(如果有的话)。在没有任何外部库/类的情况下,有什么简单的方法可以做到这一点吗?谢谢 到目前为止,我已经尝试使用DOCDocument类,加载HTML并将其显示在屏幕上,但我认为这不是正确的方法。然后寻找标题和IMG标签,或者你还需要做什么。 < P>我建议你考虑一下。这将使它变得非常容易 下面是一个如何提取标题和第一个图像的工作示例 <?php require 'si
<?php
require 'simple_html_dom.php';
$html = file_get_html('http://www.google.com/');
$title = $html->find('title', 0);
$image = $html->find('img', 0);
echo $title->plaintext."<br>\n";
echo $image->src;
?>
下面是第二个示例,它将在没有外部库的情况下执行相同的操作。我应该注意,在HTML上使用正则表达式不是一个好主意
<?php
$data = file_get_contents('http://www.google.com/');
preg_match('/<title>([^<]+)<\/title>/i', $data, $matches);
$title = $matches[1];
preg_match('/<img[^>]*src=[\'"]([^\'"]+)[\'"][^>]*>/i', $data, $matches);
$img = $matches[1];
echo $title."<br>\n";
echo $img;
?>
您可以使用这些库中的任何一个。正如您所知,每种方法都有其优点和缺点,因此您可以参考每种方法的说明,或者花点时间自己尝试:
- :一个独立的HTTP客户端,因此无需依赖于cURL、SOAP或REST
- :由Symfony developer在Guzzle和一些Symfony组件上构建
- :具有缓存功能的快速刮板。在刮取大型文档时具有高性能
- :以其用户友好的使用而闻名
- :轻量级客户端,非常适合初学者
- :异步刮板,带有全面的教程和示例
$crawler = $crawler
->filter('body > p')
->reduce(function (Crawler $node, $i) {
// filters every other node
return ($i % 2) == 0;
});
这个问题已经很老了,但在PHP中的网页抓取工具的谷歌搜索结果中仍然排名很靠前。自提出这个问题以来,PHP中的Web抓取在这几年中取得了长足的进步。我积极维护,这还没有提到,但比这里列出的许多其他工具都要早,除了简单的HTMLDOM 工具箱包括,我实际上更喜欢它,因为它使用状态引擎处理HTML,并使用连续流标记器进行精确的数据提取 要回答最初的问题“没有任何外部库/类,有没有简单的方法可以做到这一点?”答案是否定的。HTML相当复杂,PHP中没有任何内置的东西特别适合此任务。您确实需要一个可重用的库来正确、一致地解析通用HTML。另外,你会发现这样一个图书馆有很多用途 此外,一个真正优秀的web scraper工具包将有三个主要的、高度完善的组件/功能:
表单
提取和提交的功能也非常方便。一个真正好的库可以让您对每个服务器的每个请求的各个方面进行微调,并查看它在网络上发送和接收的原始数据。一些web服务器对输入非常挑剔,因此能够准确地复制浏览器非常方便将客户机转变为Web服务器和WebSocketServer类也相对简单。你知道你有一个很好的库,当你可以把客户机变成服务器的时候……但是后来我去用这些类。我认为它正在变成一个怪物 看看卷发,它应该有你需要刮的所有东西information@OhCaN使用
DOCDocument
类,加载HTML并在屏幕上显示,但我认为这不是我使用过的最好的第三方库之一的正确方法。强烈推荐。谢谢你的回答。我想我会坚持使用简单的HTMLDOM解析器库,因为每个人都推荐它,感谢您指出插件,非常易于使用。这真令人兴奋![+1]