脚本宝典收集整理的这篇文章主要介绍了php – 如何在数据库中添加已删除的网站数据?,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我想存储:
在我的名为PRoducts_data的表中,其filds名称为PID,product_name,category,subcategory,product_price和product_company.
我在PHP中使用curl_init()函数首先废弃网站URL,接下来我想将产品数据存储在我的数据库表中.以下是我迄今为止所做的事情:
$sITes[0] = 'http://www.babyoye.COM/';
foreach ($sites as $site)
{
$ch = curl_init($site);
curl_setopt($ch, CURLOPT_RETURNtransfer, 1);
$htML = curl_exec($ch);
$title_start = '<div class="info">';
$parts = explode($title_start,$html);
foreach($parts as $part){
$link = explode('<a href="/d/', $part);
$link = explode('">', $link[1]);
$url = 'http://www.babyoye.com/d/'.$link[0];
// Now for the title we need to follow a similar process:
$title = explode('<h2>', $part);
$title = explode('</h2>', $title[1]);
$title = strip_tags($title[0]);
// INSERT DB CODE HERE e.g.
$db_conn = MysqL_connect('localhost', 'root', '') or die('error');
MysqL_select_db('babyoye', $db_conn) or die(MysqL_error());
$sql = "INSERT INTO products_data(PID, product_name) VALUES ('".$url."', '".$title."')"
MysqL_query($sql) or die(MysqL_error());
}
}
解决方法:
>尽可能多地概括您的解决方案.如果您必须为每个新的scraPE编写PHP代码,那么如果目标站点更改其布局可能需要进行更改,并且可能会破坏您正在构建的企业.如果您打算刮掉大量网站,这是非常重要的,因为网站重组的可能性在统计上更大.
>实现这种概括的一种方法是使用已经擅长的现成的库.因此,使用Goutte或其他一些程序化浏览器系统,而不是使用cURL.这将为您提供免费会话,在某些网站中,您需要从一个页面点击到另一个页面.您还将获得CSS选择器以指定您感兴趣的内容项.
>对于表格内容,在本地站点上存储查找数据库表,该表将标题标题转换为数据库列名.对于产品网格,您可以使用表格将CSS选择器(相对于每个网格单元格,例如)转换为列.这些中的任何一个都可以更容易地响应目标站点格式的更改.
>如果要从站点提取文本,至少需要通过适当的转义系统运行它,否则目标站点理论上可以在其站点上添加内容以将其选择的sql注入到数据库中.在任何情况下,他们一边的撇号肯定会导致你的调用失败,所以你应该使用MysqL_real_escape_string.
>如果要从具有重新显示视图的站点中提取HTML,请务必先记得正确清理它.这意味着剥离您不想要的标记,删除可能不受欢迎的属性,并确保结构良好嵌套.我发现HTMLPurifier对此有好处.
爬行时,请记住:
>做一个好的机器人并为自己定义一个独特的USER_AGENT,因此如果他们愿意,网站操作符很容易阻止你.使用internet Explorer伪装成人类是一种糟糕的礼仪.在您的用户代理中添加一个友好帮助页面的URL,就像GOOGLEBot一样.
>不要通过代理或其他旨在隐藏您身份的系统进行爬网 – 在开放状态下进行爬网.
>尊重robots.txt;如果某个网站希望阻止抓取工具,则应允许他们使用受尊重的约定.如果你的行为像搜索引擎一样,那么希望阻止你的操作符的可能性非常低(难道大多数人都不想被搜索引擎刮掉吗?)
>总是做一些速率限制,否则this happens.在我的开发笔记本电脑上通过慢速连接,我可以每秒两页的速度刮一个网站,即使不使用Multi_curl.在真正的服务器上,这可能要快得多 – 可能是20?无论哪种方式,使一个目标IP /域的请求数量是找到某人的阻止列表的好方法.因此,如果你刮,慢慢做.
>我维护了一个HTTP访问表,并且有一个规则,如果我在最后5秒内发出请求,我会“暂停”这个刮,然后刮掉其他东西.一旦足够的时间过去,我会回来停止刮擦.我可能倾向于增加此值,并在内存中保持大量暂停操作的并发状态.
>如果要抓取多个站点,一种保持性能而不会过度沉睡的方法是在循环的基础上交错您希望进行的请求.因此,在50个站点上执行一个HTTP操作,保留每个scrape的状态,然后返回到第一个.
>如果实现了许多站点的交叉,则可以使用multi_curl来并行化HTTP请求.出于上述原因,我不建议在单个站点上使用它(远程服务器可能会限制您可以单独打开它们的连接数).
>小心将整个企业基于单个站点的抓取.如果他们阻止你,你就会陷入困境.如果您的业务模型可以依赖于许多站点的抓取,那么被一个站点阻止就会降低风险.
此外,安装第三方抓取软件或获取第三方服务为您进行抓取可能会产生成本效益.我自己在这个领域的研究很少见到看似有能力的组织(并且记住,在撰写本文时,我没有尝试过任何一种组织).所以,你可能希望看看这些:
> 80legs – 商业
> Mozenda – 商业
> Common Crawl – F / OSS
> Crawl Anywhere – F / OSS
以上是脚本宝典为你收集整理的php – 如何在数据库中添加已删除的网站数据?全部内容,希望文章能够帮你解决php – 如何在数据库中添加已删除的网站数据?所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。