mathematica爬取豆瓣Top250
今天准备讲一下如何使用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
以上,所有
浙公网安备 33010602011771号