参见英文答案 >
How do I prevent site scraping? [closed]26个
There是一个PHP库,让evreybody能够攻击我(类似于cURL).然后我有一个想法来阻止它,我想为我的元素使用动态类名.看这个:
There是一个PHP库,让evreybody能够攻击我(类似于cURL).然后我有一个想法来阻止它,我想为我的元素使用动态类名.看这个:
<div class="<?PHP $ClassName ?>">anything</div> // $className is taken from the database
Note:
$ClassName
will vary evry time.
在这种情况下,任何人都不知道我的类名是什么来选择我的元素然后复制我的数据.现在我有两个问题:
>如何在$ClassName和.$ClassName(在css文件中)之间进行通信?换句话说,我如何使用PHP变量的css类名? (动态css类)
>它是否优化从数据库中获取所有类名?
在可以在本地完成之前,使用数据库获取类名称并不是最佳选择.你应该定义一个包含所有类名的数组,然后通过array_rand选择一个,有些东西是这样的:
// PHP code <?PHP $classes = array('class1','class2','class3','class4'); $class_name = $classes[array_rand($classes)]; ?> // html code <div class="<? PHP echo $class_name; ?>">anything</div> // css code <style> .<? PHP echo $class_name; ?> { // your css codes } </style>
注意:你必须知道你不能在.css文件中使用PHP代码,那么你应该在.PHP文件中编写你想要动态的所有css代码并使用< style>东西< / style>.
Meanwhilem,as @sємsєм said,you can creat dynamic html tags.
有点这样:(完整代码)
// PHP code <?PHP // dynamic class $classes = array('class1','class4'); $class_name = $classes[array_rand($classes)]; // dynamic tags $tags_statr = array('','<div>','<div><div>','<div><p>','<span><div>'); $tags_end = array('','</div>','</div></div>','</div></p>','</span></div>'); $numb = array_rand($tags_statr); ?> // html code <?PHP echo $tags_statr[$numb]; ?> <div class="<? PHP echo $class_name; ?>">anything</div> <?PHP echo $tags_end[$numb]; ?> // css code <style> .<? PHP echo $class_name; ?> { // your css codes } </style>
为了更高的安全性,您可以放置您的内容(此处为’任何’)(除了外部动态标签).例如:
<span1>anything</span1> // <span1> changed to <span2,3,4....>
在这种情况下,带有数据的相邻标签也是动态的,这使得爬虫更难.
最后,我必须说你不能完全阻止爬虫,你只是让它变得困难.如果您真的想保护自己的数据,可以执行以下操作:
>增加对用户的限制. (例如,只有注册用户才能看到重要信息)>监控使用您网站的IP(如果可疑,请阻止它)>使用相关软件. (例如,限制每天搜索IP)