我拥有一家网上商店,我的一位供应商很友善地为我提供了一份包含产品型号、价格和标题的 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 文件建立索引并为他们的网站建立索引;我会执行以下操作
您建立了一个列表,其中包含您需要获取描述的所有型号。
- 抓取他们的首页以启动该过程。 收集网址,添加到访问列表
- 访问列表中与型号匹配的每个网址、获取说明、从列表中删除型号。 收集网址,添加到访问列表
- 返回第 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/