php - 抓取完整网站以获取特定 div 标签内的数据,其中 url 包含字符串

标签 php mysql csv screen-scraping

我拥有一家网上商店,我的一位供应商很友善地为我提供了一份包含产品型号、价格和标题的 CSV 文件,但他们无法为我提供包括产品描述在内的数据库转储。不过,我可以抓取产品描述 - 问题是如何抓取?

All URLs include the model number like "title-of-product-MN-504-1.htm"
The descriptions are inside a <div> tag like "<div id="description"> Bla bla bla <other tag>bla bla </other tag> bla bla </div>"

假设我在 csv 文件或 MySQL 表中拥有所有型号 - 如何在 URL 中保存与型号相关的描述(如果更容易的话,也可以位于另一个 div 标记中)?

总而言之 - 输入将是来自 csv 或 MySQL 表的型号,输出应是 MySQL 表(或 csv),其中包含型号以及各个页面上 div 标签的描述。 我正在考虑以下工具,但我不确定如何连接它们来执行我想要的操作:wget、cURL 和 PHP Simple HTML DOM Parser

最佳答案

你可以使用这个http://phpcrawl.cuab.de/并使用这个特定的属性:http://phpcrawl.cuab.de//classreferences/index.html ,然后找到描述:Extract string between html tags in php

对于在爬网页面上找到的 URL 中查找型号的要求,您可以使用以下属性:http://phpcrawl.cuab.de/classreferences/index.html

如果您愿意为从他们那里获得的 CSV 文件建立索引并为他们的网站建立索引;我会执行以下操作

您建立了一个列表,其中包含您需要获取描述的所有型号。

  1. 抓取他们的首页以启动该过程。 收集网址,添加到访问列表
  2. 访问列表中与型号匹配的每个网址、获取说明、从列表中删除型号。 收集网址,添加到访问列表
  3. 返回第 2 步 - 重复,直到列表中没有更多型号

如何获取带型号的网址:http://php.net/manual/en/function.strpos.php

像这样,我将实现留给你:

foreach($list_of_urls as $url) {
    foreach($list_of_modelnumbers as $model) {
        if(strpos($url, $model)) {
            $list_of_urls_to_crawl[] = $url; 
   /* you can also remove the $model, but I already wrote it in a foreach loop */
            break;
        }
    }
}

然后您可以清除 $list_of_urls 并从抓取工具结果中附加新的:)

foreach($list_of_urls_to_crawl as $url) {
     //Set $crawler, let him go, get your description etc.

     foreach($crawler->links_found as $url) {
         $list_of_urls[] = $url;
     }
}

并将其放入一个大型 while($still_need_descriptions) 循环中。

关于php - 抓取完整网站以获取特定 div 标签内的数据,其中 url 包含字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15200826/

相关文章:

json - 如何将 Azure Blob 中以 JSON 形式存储的数据加载到 Azure SQL 数据仓库?

python - 使用 Python 将文本文件转置为 csv

php - 使用命令行作为后台进程运行 PHP 文件

JavaScript 确认弹出窗口不起作用

sql - MySQL SUM 查询一周的每日值问题

php - 在重复键更新时插入选择

php - 创建存档并添加来自与特定类型匹配的特定路径的所有文件

php - 网络机器人可以增加下载量吗?

php - 在用户生成的 SQL 正则表达式中避免 SQL 注入(inject)

mysql - 将 CSV 文件导入 MySql 表,其中一列作为 CSV 文件的名称