开拓前的筹备 安装Linux体系(Ubuntu14.04),在VMWare假造机下安装一个Ubuntu; 安装PHP5.6或以上版本; 安装MySQL5.5或以上版本; 安装curl、pcntl扩展。 行使PHP的curl扩展抓取页面数据 PHP的curl扩展是PHP支持的应承你与各类处事器行使各类范例的协议举办毗连和通讯的库。 本措施是抓取知乎的用户数据,要能会见用户小我私人页面,必要用户登录后的才气会见。当我们在赏识器的页面中点击一个用户头像链接进入用户小我私人中心页面 的时辰,之以是可以或许看到用户的信息,是由于在点击链接的时辰,赏识器帮你将当地的cookie带上一齐提交到新的页面,以是你就能进入到用户的小我私人中心页 面。因此实现会见小我私人页面之前必要先得到用户的cookie信息,然后在每次curl哀求的时辰带上cookie信息。在获取cookie信息方面,我是 用了本身的cookie,在页面中可以看到本身的cookie信息: 一个个地复制,以”__utma=?;__utmb=?;”这样的情势构成一个cookie字符串。接下来就可以行使该cookie字符串来发送哀求。 初始的示例: $url = 'http://www.zhihu.com/people/mora-hu/about'; //此处mora-hu代表用户ID $ch = curl_init($url); //初始化会话 curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_COOKIE, $this->config_arr['user_cookie']); //配置哀求COOKIE curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //将curl_exec()获取的信息以文件流的情势返回,而不是直接输出。 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); $result = curl_exec($ch); return $result; //抓取的功效运行上面的代码可以得到mora-hu用户的小我私人中心页面。操作该功效再行使正则表达式对页面举办处理赏罚,就能获取到姓名,性别等所必要抓取的信息。 图片防盗链 在对返回功效举办正则处理赏罚后输出小我私人书息的时辰,发此刻页面中输出用户头像时无法打开。颠末查阅资料得知,是由于知乎对图片做了防盗链处理赏罚。办理方案就是哀求图片的时辰在哀求头里伪造一个referer。 在行使正则表达式获取到图片的链接之后,再发一次哀求,这时辰带上图片哀求的来历,声名该哀求来自知乎网站的转发。具编制子如下: function getImg($url, $u_id) { if (file_exists('./images/' . $u_id . ".jpg")) { return "images/$u_id" . '.jpg'; } if (empty($url)) { return ''; } $context_options = array( 'http' => array( 'header' => "Referer:"//带上referer参数 ) ); $context = stream_context_create($context_options); $img = file_get_contents('http:' . $url, FALSE, $context); file_put_contents('./images/' . $u_id . ".jpg", $img); return "images/$u_id" . '.jpg'; }爬取更多用户 抓取了本身的小我私人书息后,就必要再见见用户的存眷者和存眷了的用户列表获取更多的用户信息。然后一层一层地会见。可以看到,在小我私人中心页面里,有两个链接如下: 这里有两个链接,一个是存眷了,另一个是存眷者,以“存眷了”的链接为例。用正则匹配去匹配到响应的链接,获得url之后用curl带上cookie再发一次哀求。抓取到用户存眷了的用于列表页之后,可以获得下面的页面: 说明页面的html布局,由于只要获得用户的信息,以是只必要框住的这一块的div内容,用户名都在这内里。可以看到,用户存眷了的页面的url是: 差异的用户的这个url险些是一样的,差异的处所就在于用户名哪里。用正则匹配拿到用户名列表,一个一个地拼url,然后再逐个发哀求(虽然,一个 一个是较量慢的,下面有办理方案,这个稍后会说到)。进入到新用户的页面之后,再一再上面的步调,就这样不绝轮回,直到到达你所要的数据量。 Linux统计文件数目 剧本跑了一段时刻后,必要看看毕竟获取了几多图片,当数据量较量大的时辰,打开文件夹查察图片数目就有点慢。剧本是在Linux情形下运行的,因此可以行使Linux的呼吁来统计文件数目: ls -l | grep "^-" | wc -l (责任编辑:凯发娱乐国际官网) |