mathematica爬取豆瓣Top250

来源:互联网 发布:淘宝红叶运动是正品吗 编辑:程序博客网 时间:2024/05/07 01:36

今天准备讲一下如何使用mathematica写出爬虫


说实话,我也不是很清楚博客应该怎么写,我现在想的是写博客为了以后忘掉的时候可以查阅一下,把我在做这方面遇到的问题和查阅的资料收集一下。


下面就开始讲一下用mathematica爬去网页(静态)


抓取豆瓣相册图片——Mathematica版

上面那个网站是我学习的地方,我觉得写得很明白。


我按我的理解写一下,两个部分:***匹配,翻页***


1.匹配

     要爬取一个网页上的特定东西,就必须要找到在哪里,而要做到这些就要用到正则表达式。

     比如我要爬取豆瓣Top250电影的影评,首先我们要获得这些电影的地址

    

       可以看到选中的那一行有一部电影的地址

       再看一部电影


    可以看到电影的地址存放的形式是一样的,那么接下来就容易了

    先提取这一个页面上的地址

   

     在mma中可以使用

st = Import[url, "XMLObject"];

来获取网页的格式

可以获得类似上面的形式,看到那个链接了嘛,下面就是要把链接提取出来


在mma中,我们使用Cases来提取

这样就把这一页的链接都获取了

fileAdress = Cases[st,   XMLElement["li", {},     {___, XMLElement["div", {"class" -> "item"},       {___, XMLElement["div", {"class" -> "pic"},         {___, XMLElement["em", {"class" -> ___}, {___}], ___,           XMLElement[           "a", {"shape" -> "rect", "href" -> src_}, {___}], ___}         ], ___}              ], ___}] :> {src}, {0, Infinity}];


这个道理懂了以后,要匹配其他的原理也是一样的。


2.翻页

所谓爬虫,不是只能爬取一个网页的。

所以我这里采取的办法是先把在一个网页上爬到的地址储存起来,一个网页爬完后,在从地址池中取出一个地址继续爬,存入新的,当然其中有一些问题,就是怎么判断一个网页有没有爬到。


我这里先讲一下我是怎么爬取下一页的

我们可以看到,在一个页面上就有后面九页的网址,我们要做的就是提取出来(看前面的匹配)

NextPage = Cases[st,   XMLElement[     "a", {"shape" -> "rect",       "href" -> scr_}, {ToString[num]}] :> {scr}, {0, Infinity}];urlnew = "https://movie.douban.com/top250" <> NextPage;

然后储存起来,最后只要判断是否需要翻页即可,就是有没有到最后一页。

If[Length[NextPage] != 0, Crawler[urlnew, num + 1], Return[]];

这样就能实现翻页了


最后实现的部分效果


这里就把电影的地址全都爬下来了,其实爬取影评的道理也是一样的,应该看了上面的自己也能写。


2016/9/16


以上,所有
















0 0
原创粉丝点击