Fork me on GitHub

爬取当当网的图书信息之导读

 

什么是爬虫

  爬虫是用来抓取互联网上信息的程序。程序员可以利用爬虫来干很多事,有些挺酷炫,这里贴出知乎相关问题的网址https://www.zhihu.com/question/29372574

爬虫的工作流程

 主要的分三步走,第一步把网页下载下来,第二步抽取认为有用的信息,第三步将相关信息保存下来。看是不是很简单嗯。

前期技术储备

1.如何把网页下载下来?

这里我们使用相关的library模拟人使用浏览器对服务器发送请求,然后获得相关网页的源代码。我使用C#语言编程,采用封装强度最高的最简单的WebClient类。WebClient

提供用于将数据发送到由 URI 标识的资源及从这样的资源接收数据的常用方法。

 WebClient wb = new WebClient();
                html = wb.DownloadString(url);

使用起来非常简单,构建好对象之后我们将网址给它就能下载先关网页的,如果你想对请求有更多的控制,请使用封装强度更弱的类.这个时候你还http相关的知识

2.如何抓取有用的信息?

对于爬虫来说一个网页上有那些有用的信息嗯

1.URL,爬虫拿到这个网页上其他网页的url就可以跳转到其他页面的。

2.这个页面上的媒体资源,比如有些同学需要的图片

3。网页包含的有用信息,比如贴吧上某些网友发志愿,要的留邮箱,在这个网页上面有很多人的邮箱,可能你就需要这些邮箱。那么这就是有用的信息。

好了,该解决问题了。我们爬虫获取信息主要利用正则表达式,string的IndexOf方法来搜索和匹配。

举个例子

<li><a name='nav2'  target=_blank  href=http://bang.dangdang.com/books>图书排行榜</a></li>
                        <li><a name='nav2'  target=_blank  href=http://book.dangdang.com/children>童书</a></li>
                        <li><a name='nav2'  target=_blank  href=http://book.dangdang.com/01.43.htm>教辅</a></li>
                        <li><a name='nav2'  target=_blank  href=http://book.dangdang.com/01.03.htm>小说</a></li>
                        <li><a name='nav2'  target=_blank  href=http://book.dangdang.com/01.22.htm>管理</a></li>
                        <li><a name='nav2'  target=_blank  href=http://book.dangdang.com/01.05.htm>文学</a></li>
                        <li><a name='nav2'  target=_blank  href=http://book.dangdang.com/01.21.htm>成功励志</a></li>
                        <li><a name='nav2'  target=_blank  href=http://book.dangdang.com/01.01.htm>青春文学</a></li>
                        <li><a name='nav2'  target=_blank  href=http://book.dangdang.com/01.36.htm>历史</a></li>
                        <li><a name='nav2'  target=_blank  href=http://book.dangdang.com/01.28.htm>哲学宗教</a></li>
                        <li><a name='nav2'  target=_blank  href=http://book.dangdang.com/01.38.htm>传记</a></li>
                        <li><a name='nav2'  target=_blank  href=http://book.dangdang.com/01.18.htm>保健养生</a></li>
                        <li><a name='nav2'  target=_blank  href=http://book.dangdang.com/01.15.htm>亲子家教</a></li>
                        <li><a name='nav2'  target=_blank  href=http://book.dangdang.com/20130201_vcey>新书预售</a></li>
                        <li><a name='nav2'  target=_blank  href=http://book.dangdang.com/20161108_1tkv>名人书斋</a></li>
                        <li><a name='nav2'  target=_blank  href=http://e.dangdang.com/?ref=book-01-A>电子书</a></li>
                        <li><a name='nav2'  target=_blank  href=http://chuban.dangdang.com/>当当原创</a></li>
                    </ul>
</div></div>

这是当当网站某个页面的源代码的一个部分,相关图书品类的URL,他们是不是有很多相似之处嗯 "ref=http://book.dangdang.com/01.03.htm" href=http://book.dangdang.com/01.18.htm”除了数字不一样,其他都一样我们就可以使用正则表达式

http://book.dangdang.com/[0-9]{2}.[0-9]{2}.hml

具体的正则表达式相关知识请查阅相关书籍

3如何将信息保存下来

我们拿到数据必须对数据进行持久化处理。你可以讲数据写入TXT文件,excel文件等。我推荐的是存进数据库。利用编程语言提供的工具比如C#的ADO.NET,JAVA的JDBC,也可以使用O/RM框架,例如Etity Framework.

其他问题。

遇到反爬虫,我们的IP地址会被服务器疲敝,禁止访问了这个时候WebClient不能用,封装性太强,太傻了。

信息重复问题,有时候某个字符会在一个网页里面出现不止一次,这个时候会出现信息重复,解决办法可以是在添加这条数据之前先检查是否已经存在。或则收集完毕之后删去重复的。

 

posted @ 2016-11-27 00:10  王起帆  阅读(917)  评论(0编辑  收藏  举报