zrashwani/news-scrapper

使用结构化数据从网页抓取新闻数据

1.0.3 2017-08-17 08:35 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:58:55 UTC


README

此库从网页中提取文章/新闻信息,包括:标题、主要图片、描述、作者、关键词、发布日期和正文(如果可能)...

此库支持使用标准结构化元数据抓取,如:MicrodatahAtom Microformat 等,同时支持指定自定义选择器以支持非结构化网页。

News-Scrapper 需要 PHP >= 5.4

Build Status Code Climate codecov.io SensioLabsInsight Scrutinizer Code Quality

如何安装

您可以使用 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);
}

如何贡献

  1. 分支此存储库
  2. 为每个特性或改进创建一个新的分支
  3. 从每个特性分支发送拉取请求

将新特性或改进分开到单独的特性分支中,并为每个分支发送拉取请求非常重要。这使我能够单独审查和合并新特性或改进。

所有拉取请求都必须遵循 PSR-2 标准

系统要求

  • PHP 5.4.0+

许可证

MIT 公共许可证