我想实现的是每次根据给出的关键词搜索百度结果页,比如百度搜索结果是这样的,百度推广内容加正文:
而我使用curl爬取结果是这样的:
也就是说每次爬取结果都是无法爬取到百度推广的内容。请问哪位大师能指导一下,鄙人刚入门,望各位不吝指导。先谢过了。
其中php抓取代码如下:
回复讨论(解决方案) 推广的内容是页面加载后再调用js二次请求获取,写入页面的。所以用curl只能获取到html有的东西。
而js加载的,你需要再用curl去获取它js获取的url得到。
推广的内容是页面加载后再调用js二次请求获取,写入页面的。所以用curl只能获取到html有的东西。
而js加载的,你需要再用curl去获取它js获取的url得到。
但是这个百度推广内容通过查看网页源代码是可以看到的?通过调用js生成的信息会出现在网页源代码吗?
你的user-agent没有模拟好,所以不行。
其实根本不需要用post,直接用get就可以了。
修改如下:
$url = http://www.baidu.com/s?wd=生命动力;$header = array ( 'user-agent: mozilla/5.0 (windows nt 5.1) applewebkit/537.36 (khtml, like gecko) chrome/33.0.1750.146 safari/537.36');$ch = curl_init ();curl_setopt ( $ch, curlopt_url, $url );curl_setopt ( $ch, curlopt_httpheader, $header );curl_setopt ( $ch, curlopt_returntransfer, 1 );// 执行$content = curl_exec ( $ch );if ($content == false) { echo error: . curl_error ( $ch );}// 关闭curl_close ( $ch ); //输出结果echo $content;
你的user-agent没有模拟好,所以不行。
其实根本不需要用post,直接用get就可以了。
修改如下:
$url = http://www.baidu.com/s?wd=生命动力;$header = array ( 'user-agent: mozilla/5.0 (windows nt 5.1) applewebkit/537.36 (khtml, like gecko) chrome/33.0.1750.146 safari/537.36');$ch = curl_init ();curl_setopt ( $ch, curlopt_url, $url );curl_setopt ( $ch, curlopt_httpheader, $header );curl_setopt ( $ch, curlopt_returntransfer, 1 );// 执行$content = curl_exec ( $ch );if ($content == false) { echo error: . curl_error ( $ch );}// 关闭curl_close ( $ch ); //输出结果echo $content;
感谢你的回复。你的结论是正确的。我这里还有一个问题,就是抓取到的网页图片第一次运行可以显示,之后就显示不了了。
查看源代码发现获取到的图片地址是真实地址啊,但就是显示不了,请问有什么思路可以绕过这个防外链。在curl伪造来路好像也行不通。
这个你需要看看页面有没什么隐藏参数,通常那些会影响的。
例如js也会的。而且这算是另一个问题,应该开新贴讨论。