首先,应该提一下,我已获得商店的许可,以便抓取这些数据,因此合法性不是问题!
我正在尝试从各种在线商店中提取信息,并且每小时将它们存储在一个数据库中。
示例网站:http://www.uptherestore.com/department/accessories
我尝试了PHP scrape这样的话:
<?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
即使我做设法从该网站上抓取,它也只会返回结果的第一页(当我需要所有页面时)。我目前的解决方案是:
但这并不理想 - 正如您所看到的,在页面底部有第1 ... 9页,但如果您单击“最后”,则实际上有11页内容。简而言之,从这样的网站获取数据的最佳方法是什么?如上所述,商店所有者都允许我使用他们的内容,但他们并不是特别注重技术,不能让我访问他们的服务器/将任何代码放在他们的服务器.htaccess中以允许来自我网站的请求。
答案 0 :(得分:1)
分页很简单,您只需找到“下一步”的链接,然后关注它,直到它不再存在为止。除非你对xpath感到满意,否则想要一个好的html解析器库(phpquery,simple-html-dom)。准备花大量时间找出正确的方法来做到这一点,最重要的是,不要听任何告诉你使用正则表达式的人。
答案 1 :(得分:0)
使用cURL和regex过滤所需内容。谷歌cURL php.net网站将为您提供所需的所有信息
答案 2 :(得分:0)
首先,您的错误消息似乎不适合您的PHP代码:php正在尝试使用正则表达式解析html(错误!)并且错误消息表明您正在使用html解析器(DOMDocument)来解析html(正确的方法)。
您需要做的是:
您可能需要构建一些逻辑来确保您的脚本不会进入永无止境的循环或运行太长时间,但基本上就是这样;在您真正想要在浏览器中查看操作结果之前,不需要浏览器/ javascript / ajax。