zrashwani / news-scrapper
使用结构化数据从网页抓取新闻数据
1.0.3
2017-08-17 08:35 UTC
Requires
- php: >=5.4.0
- fabpot/goutte: ^2.0
- symfony/console: ^2.6
Requires (Dev)
- phpunit/phpunit: ^4.6
- squizlabs/php_codesniffer: ~2.0
- symfony/var-dumper: ^2.7
This package is not auto-updated.
Last update: 2024-09-14 17:58:55 UTC
README
此库从网页中提取文章/新闻信息,包括:标题、主要图片、描述、作者、关键词、发布日期和正文(如果可能)...
此库支持使用标准结构化元数据抓取,如:Microdata、hAtom Microformat 等,同时支持指定自定义选择器以支持非结构化网页。
News-Scrapper 需要 PHP >= 5.4
如何安装
您可以使用 Composer 安装此库。将其添加到您的 composer.json
清单文件中
{
"require": {
"zrashwani/news-scrapper": "1.*"
}
}
然后运行 composer install
。
如何使用
以下是快速从网页抓取新闻数据的方法
require 'vendor/autoload.php';
// Initiate scrapper
$scrap_client = new \Zrashwani\NewsScrapper\Client();
print_r($scrap_client->getLinkData($url));
默认情况下,抓取器会尝试猜测最佳结构化数据适配器并应用它。
抓取结构化数据
您可以选择以下特定适配器用于提取数据
$url = "http://example.com/your-news-uri"; //use microdata standard for scrapping $scrap_client = new \Zrashwani\NewsScrapper\Client('Microdata'); print_r($scrap_client->getLinkData($url));
以下是支持的架构化数据适配器或抓取模式的列表
抓取非结构化数据
如果网页不遵循任何标准结构化数据,您仍然可以通过指定不同的文章部分(如:标题、描述、图片和正文)的 xpath 或 css 选择器来抓取新闻信息
$scrapClient = new \Zrashwani\NewsScrapper\Client('Custom'); /*@var $adapter \Zrashwani\NewsScrapper\Adapters\CustomAdapter */ $adapter = $scrapClient->getAdapter(); $adapter ->setTitleSelector('.single-post h1') //selectors can be either css or xpath ->setImageSelector(".sidebar img") ->setAuthorSelector('//a[@rel="author"]') ->setPublishDateSelector('//span[@class="published_data"]') ->setBodySelector('//div[@class="contents"]'); $newsData = ($scrapClient->getLinkData("http://example.com/your-news-uri")); print_r($newsData);
自定义抓取适配器 CustomAdapter
支持方法链来设置选择器。如果未指定任何选择器,它将使用基于 DefaultAdapter
(依赖于标准元标签的 html 适配器)的默认选择器。
抓取链接组
要从包含新闻链接的页面中抓取新闻文章组,可以使用 scrapLinkGroup
方法
$listingPageUrl = 'https://www.readability.com/topreads/'; //url containing news listing $linksSelector = '.entry-title a'; //css or xpath selector for news links inside listing page $numberOfArticles = 3; //number of links to scrap, use null to get all matching selector $scrapClient = new \Zrashwani\NewsScrapper\Client(); $newsGroupData = $scrapClient->scrapLinkGroup($listingPageUrl, $linksSelector,$numberOfArticles); foreach($newsGroupData as $singleNews){ print_r($singleNews); }
如何贡献
- 分支此存储库
- 为每个特性或改进创建一个新的分支
- 从每个特性分支发送拉取请求
将新特性或改进分开到单独的特性分支中,并为每个分支发送拉取请求非常重要。这使我能够单独审查和合并新特性或改进。
所有拉取请求都必须遵循 PSR-2 标准。
系统要求
- PHP 5.4.0+
许可证
MIT 公共许可证