php 网络爬虫,爬一下花瓣的图片
今天无聊看在知乎上看到有人写网络爬虫爬图片( ̄▽  ̄)
传送门:
福利 - 不过百行代码的爬虫爬取美女图:https://zhuanlan.zhihu.com/p/24730075
福利 - 不过十行代码的爬虫爬取美女图:https://zhuanlan.zhihu.com/p/24779556
其实这个是一个nodejs用了一百多行代码和php只要10行代码写的爬虫代码比较( ̄▽  ̄)
不过这都不重要,重要的是,我看着无聊,自己又写了一个花瓣的图片爬虫( ̄▽  ̄)( ̄▽  ̄)
注释都在代码里的,不多说了,直接上代码:
<?php
/**
* 获取花瓣网图片
* @param string $mixed 查询关键字或直接一个画板id
* @param int $page_limit 要查询几页的,默认只查一页
* @return void
*/
function getHuabanImgs($mixed, $page_limit=1){
error_reporting(0);
set_time_limit(0); $board_id = 0;
$keyword = '';
$max = ''; if(is_numeric($mixed))
{
$board_id = $mixed;
}else
{
$keyword = urlencode($mixed);
} @mkdir('save'); for ($pageno = 1 ; $pageno <= $page_limit; $pageno ++)
{
/*
你喜欢用curl也行,使用这个花瓣的接口关键点是要在请求头加一个 X-Requested-With:XMLHttpRequest
如果没有这个X-Requested-With,接口返回的是一个html网页,有的话,就是返回json
*/ /*$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://huaban.com/search/?q='.$keyword.'&ixsaam0z&page='.$pageno.'&per_page=20&wfl=1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept:application','X-Request:JSON','X-Requested-With:XMLHttpRequest'));
$response = curl_exec($ch);
curl_close($ch);*/ $context = stream_context_create(array('http'=>array('method'=>'GET','header'=>"Accept:application\r\nX-Request:JSON\r\nX-Requested-With:XMLHttpRequest\r\n"))); //按画板id查找
if($board_id>0)
{
$response = @file_get_contents('http://huaban.com/boards/'.$board_id.'/?&max='.$max.'&limit=20&wfl=1', 'r', $context);
$arr = @json_decode($response, true);
$pins = $arr['board']['pins'];
}
//按关键字查找
else
{
$response = @file_get_contents('http://huaban.com/search/?q='.$keyword.'&ixsaam0z&page='.$pageno.'&per_page=20&wfl=1', 'r', $context);
$arr = @json_decode($response, true);
$pins = $arr['pins'];
} if(empty($pins)) break; foreach ((array)$pins as $key => $value)
{
$type = str_replace('image/', '', $value['file']['type']);
if(!$type || $type=='jpeg') $type = 'jpg'; $max = $value['pin_id']; /*
花瓣的缩略图链接是这个的:http://img.hb.aicdn.com/c39ac6a698b6d95b823d0840a773bdb7f2cc057216dfd-HkHx3k_fw236
而大图的链接是这样的:http://img.hb.aicdn.com/c39ac6a698b6d95b823d0840a773bdb7f2cc057216dfd-HkHx3k
可以看出,其实就是去掉后面的_fw236而已,这里使用 preg_replace 正则去掉这类后缀
*/
@copy('http://img.hb.aicdn.com/' . preg_replace('/(_[\s\S]+)?/', '', $value['file']['key']), './save/'.$value['file']['id'] . '.' . $type);
}
}
} // getHuabanImgs('向日葵', 2);
getHuabanImgs('13715723', 2);
自己建个 php 文件来测试玩一下吧
php 网络爬虫,爬一下花瓣的图片的更多相关文章
- 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)
前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...
- 利用Python网络爬虫爬取学校官网十条标题
利用Python网络爬虫爬取学校官网十条标题 案例代码: # __author : "J" # date : 2018-03-06 # 导入需要用到的库文件 import urll ...
- 浅谈网络爬虫爬js动态加载网页(二)
没错,最后我还是使用了Selenium,去实现上一篇我所说的问题,别的没有试,只试了一下firefox的引擎,总体效果对我来说还是可以接受的. 继续昨天的话题,既然要实现上篇所说的问题,那么就需要一个 ...
- scrapy爬虫爬取小姐姐图片(不羞涩)
这个爬虫主要学习scrapy的item Pipeline 是时候搬出这张图了: 当我们要使用item Pipeline的时候,要现在settings里面取消这几行的注释 我们可以自定义Item Pip ...
- Jsoup-基于Java实现网络爬虫-爬取笔趣阁小说
注意!仅供学习交流使用,请勿用在歪门邪道的地方!技术只是工具!关键在于用途! 今天接触了一款有意思的框架,作用是网络爬虫,他可以像操作JS一样对网页内容进行提取 初体验Jsoup <!-- Ma ...
- python爬虫——爬取NUS-WIDE数据库图片
实验室需要NUS-WIDE数据库中的原图,数据集的地址为http://lms.comp.nus.edu.sg/research/NUS-WIDE.htm 由于这个数据只给了每个图片的URL,所以需 ...
- Python 爬虫: 抓取花瓣网图片
接触Python也好长时间了,一直没什么机会使用,没有机会那就自己创造机会!呐,就先从爬虫开始吧,抓点美女图片下来. 废话不多说了,讲讲我是怎么做的. 1. 分析网站 想要下载图片,只要知道图片的地址 ...
- 如何用Python网络爬虫爬取网易云音乐歌曲
今天小编带大家一起来利用Python爬取网易云音乐,分分钟将网站上的音乐down到本地. 跟着小编运行过代码的筒子们将网易云歌词抓取下来已经不再话下了,在抓取歌词的时候在函数中传入了歌手ID和歌曲名两 ...
- python网络爬虫&&爬取图片
爬取学院官网数据from urllib.request import * #导入所有request urllib文件夹,request只是里面的一个模块from lxml import etree # ...
随机推荐
- python+xpath+requests爬取维基百科历史上的今天
import requests import urllib.parse import datetime from lxml import etree fhout = open("result ...
- C/C++/C#/Python日志框架
俗话说,打得一手好log才是一个优秀的程序员. **打log的目的是为了迅速排错或在有争议时拿出证据证明自己.基于这个目的,log不在多,只要抓住一切对自己有利的信息,就可以了.** 日志框架列表 C ...
- 【Unity/C#】DateTime时间字符串,月份用英文显示
制作一个钟表,要求效果如下图: 由于每一部分的字体大小不同,我分别使用了不同的Text控件.(不懂dalao们有没有更科学的办法) 把这些Text控件包含在一个Object下,给该Object定义一个 ...
- 【WPF】一组CheckBox的全选/全不选功能
需求:给一组CheckBox做一个全选/全不选的按钮. 思路:CheckBox不像RadioButton那样拥有GroupName属性来分组,于是我想的方法是将这组CheckBox放到一个布局容器中, ...
- 指针的引用(*&)与指针的指针(**)
指针的引用(*&)与指针的指针(**) 在下列函数声明中,为什么要同时使用*和&符号?以及什么场合使用这种声明方式? void func1( MYCLASS *&pBuildi ...
- 分散/聚集IO(scatter/gather)及iovec结构体
分散/聚集 I/O是一种可以在单次系统调用中对多个缓冲区输入输出的方法,可以把多个缓冲区的数据写到单个数据流,也可以把单个数据流读到多个缓冲区中.其命名的原因在于数据会被分散到指定缓冲区向量,或者从指 ...
- yii的一些方法的解析和blog的详细解析
1. 存取数据库方法存储第一种(SAVE )存表时候用到 例子: $post=new Post;$post->title='sample post';$post->content='c ...
- 利用Nginx搭建RTMP视频直播,点播服务器,ffmpeg推流,回看
一.环境和工具 ubuntu 14.04 desktop 不用server的原因是一部分的演示用到了linux视频播放和直播软件,自己还要装桌面,麻烦. 不建议使用 最新的16TLS,我一开始 ...
- PHP注释的艺术——phpDoc规范
用过IDE或看过其他源码的小伙伴们应该都见过类似下面这样的注释 /** * 递归获取所有游戏分类 * @param int $id * @return array */ 看得多了就大概知道了一些规 ...
- C#基础概念二十五问
1.静态成员和非静态成员的区别? 答: 静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问 不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过 ...