说起爬虫,大家第一印象就是想到了python来做爬虫。其实,服务端语言好些都可以来实现这个东东。

在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。

我们可以通过erlang 来实现这样一个简单的爬虫功能。下面就看看如何使用erlang来实现这样一个功能。

网上很多python有做爬取图片的,这里,我也拿这个开刀,用erlang做个爬取图片的简单功能。

需要爬取网页地址:https://tieba.baidu.com/p/2460150866?red_tag=1460270922

分析下爬虫功能的点:

1)通过已知的URL,做http数据请求(http/https  request);

2)根据获取数据,<html>.....</html>标签,提取数据(规则抽象,提取,获取数据),正则表达式(或匹配,递归);

3)处理结果集,落地(写文件,sql/nosql等)。

好了,大概思路有了,先不考虑分布式爬虫,只是做个简单的demo,之后可考虑多节点多进程的spider。

-module(http).

-compile(export_all).

start() ->

    % application:start(inets),
% application:start(crypto),
% application:start(asn1), %一定要的
% application:start(public_key), %一定要的
% application:start(ssl), %一定要的
inets:start(),
ssl:start(), {ok,{_,_,Body}} = httpc:request("https://tieba.baidu.com/p/2460150866?red_tag=1460270922"),
io:format("~ts",[unicode:characters_to_binary([Body])]), %匹配HTML标记的正则表达式 {match, Res1} = re:run(Body, "<img (.*?) src=\"(.+?)\".*?>",[{capture,first,list},global]), {match, Res} = re:run(Body, "<img src=\"([^\"]*?)\">",[{capture,first,list},global]).

后面,遍历列表中的值,依次请求下载图片,下载图片的方式也很多, 请参考我的另一篇博客:https://www.cnblogs.com/unqiang/p/4595491.html

通过 ibrowse (erlang的client)下载,最初的inets的请求,也可在ibrower中直接请求处理即可。

未写完 待续。。。。

最新文章

  1. JSPatch 技术要点
  2. C语言基础(10)-数组
  3. 问题解决——OpenGL超级宝典 第四章 4.5.2 关于freeglut.lib问题的解决过程
  4. C语言杂谈(二)自增运算符++与间接访问运算符*的结合关系和应用模式
  5. 微信消息回复C#
  6. xcode6中如何添加pch文件
  7. 无法为数据库 XXX 中的对象XXX 分配空间,因为 &#39;PRIMARY&#39; 文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘空间。
  8. C#限制转换后的double小数点留1位
  9. android媒体--图库与API层MediaPlayer的交互
  10. Android 中字体的处理
  11. linux root修改密码失败
  12. bzoj2281 [Sdoi2011]黑白棋
  13. SQL server 表信息查询
  14. nginx获取上游真实IP(ngx_http_realip_module)
  15. srand rand
  16. 用node在本机搭建一个极其简单的服务器
  17. java -相关技术
  18. JAVA中float与double的区别
  19. SearchView的最简单的使用方式
  20. idea 打包java程序

热门文章

  1. POJ1741 Tree(树的点分治)
  2. elasticsearch 分布式部署
  3. c#作业(2班)
  4. linux下安装php报错configure: error: Cannot find MySQL header files under /usr/include/mysql.
  5. 为什么Linux的Fdisk分区时First Sector为2048?
  6. readlink命令
  7. git push后自动部署
  8. selenium清空元素时,.clear不执行
  9. Qt中重绘制窗口方法:
  10. es创建索引的格式,并初始化数据