抓取**内容就是抓取网站的文字内容。抓取图片和其他网站内容的方法是一样的。我们以**为例:
这是**网站上搜索书籍的地址searchkey=后面是关键字。我们以关键词“天下”为例。我们在发送的时候也应该对其进行urlencode。
但我发现我的发送参数和原来网站的不一样。我的是:%E5%A4%A9%E4%B8%8B。
这应该是编码问题。我的是utf-8。经过检查,发现是gdk,所以我们也应该将其转换为gdk编码。
urlencode(iconv('utf-8','gb',$BookName));//将utf转换为gd
functionsearch_book($bookName){
//$url_book=''.urlencode($bookName);
$url_book=''.urlencode(iconv('utf-8','gb',$bookName));
//转储($url_book);
$ch=curl_init();
$this_header=数组(
'内容类型:application/x-www-form-urlencoded;
字符集=gbk'
);
curl_setopt($ch,CURLOPT_HTTPHEADER,$this_header);//定义头部
curl_setopt($ch,CURLOPT_URL,$url_book);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,20);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);//必须添加,否则无法访问https
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);//同上
$err=curl_error($ch);
$res=curl_exec($ch);
转储($res);退出;
卷曲_关闭($ch);
返回$res;
}
获取内容后查找爬取的页面内容:
发现字符出现乱码,所以还是编码问题,只好将gdk转回utf-8:
$res=mb_convert_encoding($res,'UTF-8','UTF-8,GBK,GB,BIG5');//使用该函数对结果进行转码
捕获内容后,我们必须提取我们需要的内容:
比如这个目录的搜索结果中,你可以直接用正则表达式提取这个样式下的内容,也可以更详细的提取每一项的内容。
查看网站结果,找到s1、s2、s3、
s4、s5、s7
使用正则表达式提取各个内容:
$rule='/spanclass=\'s1\'.*?*?\/span/is';//**类型
$rule2='/spanclass=\'s2\'.*?*?\/span/is';//**名称
$rule3='/spanclass=\'s3\'.*?*?\/span/is';//最新章节
$rule4='/spanclass=\'s4\'.*?*?\/span/is';//作者
$rule5='/spanclass=\'s5\'.*?*?\/span/is';//更新时间
$rule6='/spanclass=\'s7\'.*?*?\/span/is';//状态
$url_rule='/(?=href=\')[^\']+(?=\')/';//图书链接
$news_html='';
/*获取内容*/
preg_match_all($rule,$html,$news_html['type']);
preg_match_all($rule2,$html,$news_html['name']);
preg_match_all($rule3,$html,$news_html['新闻']);
preg_match_all($rule4,$html,$news_html['author']);
preg_match_all($rule5,$html,$news_html['时间']);
preg_match_all($rule6,$html,$news_html['status']);
这是我们自己的前端显示的。
要获取数据的分页,只需添加page参数即可;具体方法是一样的,但是很麻烦。您可以根据结构优化正则规则。
那么在获取到上述书籍的链接后,就可以使用同样的流程来获取该书的封面、章节等信息。所以如果你想免费做但又不想看到垃圾广告,还是得花时间去做。以后有时间的话,可以将数据记录到自己的数据库中,防止网站修改后被屏蔽。