Heim  >  Artikel  >  Backend-Entwicklung  >  使用php的curl根据关键词爬取百度搜索结果页

使用php的curl根据关键词爬取百度搜索结果页

WBOY
WBOYOriginal
2016-06-23 13:44:391227Durchsuche

我想实现的是每次根据给出的关键词搜索百度结果页,比如百度搜索结果是这样的,百度推广内容加正文:

而我使用curl爬取结果是这样的:

也就是说每次爬取结果都是无法爬取到百度推广的内容。请问哪位大师能指导一下,鄙人刚入门,望各位不吝指导。先谢过了。
其中php抓取代码如下:

<?php$url = "http://www.baidu.com/s?wd=生命动力";// 构造包头,模拟浏览器请求$header = array (		"Host:www.baidu.com",		"Content-Type:application/x-www-form-urlencoded",//post请求		"Connection: keep-alive",		'Referer:http://www.baidu.com',		'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; BIDUBrowser 2.6)');$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;?>


回复讨论(解决方案)

推广的内容是页面加载后再调用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也会的。而且这算是另一个问题,应该开新贴讨论。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn