首先,应该提到我已经获得商店的许可来抓取这些数据,所以合法性在这里不是问题!
我正在尝试从各种在线商店中抓取信息,并每小时将它们存储在数据库中。
示例网站:http ://www.uptherestore.com/department/accessories
我试过这样的PHP 抓取:
<?php
$file_string = file_get_contents('http://www.uptherestore.com/department/accessories');
preg_match('/<div class="view view-uc-products view-id-uc_products view-display-id-page_3 storeview view-dom-id-1">
(.*)<\/div>/i', $file_string, $title);
$title_out = $title[1];?>
<p><strong>Accessories:</strong> <?php echo $title_out; ?></p>
但它给了我类似的错误:
[14-Feb-2013 07:39:49 UTC] PHP Warning: DOMDocument::loadHTML() [<a href='domdocument.loadhtml'>domdocument.loadhtml</a>]: htmlCheckEncoding: encoder error in Entity, line: 7 in scraping.php on line 5
日志文件中的完整错误在这里: http: //pastebin.com/W2Bhkc0s
即使我确实设法从该站点抓取,它也只会返回结果的第一页(当我需要所有页面时)。我目前对此的解决方案是:
- 使用 jQuery 检查页面底部的分页器中有多少元素
- 运行一个循环来抓取这些页面中的每一个
但这并不理想 - 正如您所看到的,在页面底部有第 1...9 页,但如果您单击“最后”,则实际上有 11 页内容。简而言之,从这样的网站上抓取数据的最佳方法是什么?如前所述,店主都允许我使用他们的内容,但他们并不是特别注重技术,不能让我访问他们的服务器/在他们的服务器的 .htaccess 中放置任何代码以允许来自我的网站的请求。