Mathematica 获取豆瓣图书top250,正则表达式

mathematica的Import除了可以从文件中导入数据之外,还可以方便的从任何可访问的网页中导入数据,例如

Import["https://book.douban.com/top250"]

通过加入Elements,可以查看可用的元素

Import["https://book.douban.com/top250", "Elements"]
{"Data", "FullData", "Hyperlinks", "ImageLinks", "Images", "Plaintext", "Source", "Title", "XMLObject"}

为了获取豆瓣图书的top250,我们需要解析它的html页面元素,因此

Import["https://book.douban.com/top250", "Source"]

这将得到一个html格式的源码(当然,你也可以通过浏览器查看源代码)

找到其中关键的一行

<a href="https://book.douban.com/subject/1770782/" onclick=&#34;moreurl(this,{i:&#39;0&#39;})&#34; title="追风筝的人"

这是一个超链接,里面含有书的标题以及对应页面,因此,我们需要从整个html中取出这些元素,注意,你的正则表达式应该尽量匹配这些元素,利用mathematica的StringCases,可以方便找到这些元素

dbhtml = Import["https://book.douban.com/top250?start=0", "Source"];
list = StringCases[dbhtml, RegularExpression["<a href=\"https://book.douban.com/subject/.+\""]];

第一行,获取整个html页面,
第二行,取出href超链接
生成的是一个list,结果如下

"<a href=\"https://book.douban.com/subject/1770782/\" \
onclick=&#34;moreurl(this,{i:&#39;0&#39;})&#34; title=\"追风筝的人\"", "<a \
href=\"https://book.douban.com/subject/1084336/\" \
onclick=&#34;moreurl(this,{i:&#39;1&#39;})&#34; title=\"小王子\"", "<a \
href=\"https://book.douban.com/subject/1008145/\" \
onclick=&#34;moreurl(this,{i:&#39;2&#39;})&#34; title=\"围城\"", "<a \
href=\"https://book.douban.com/subject/25862578/\" \
onclick=&#34;moreurl(this,{i:&#39;3&#39;})&#34; title=\"解忧杂货店\"", "<a \
href=\"https://book.douban.com/subject/1082154/\" \
onclick=&#34;moreurl(this,{i:&#39;4&#39;})&#34; title=\"活着\"", "<a \
href=\"https://book.douban.com/subject/3259440/\" \
onclick=&#34;moreurl(this,{i:&#39;5&#39;})&#34; title=\"白夜行\"",
..........
}

利用StringReplace替换规则,替换想要的结果

list = StringReplace[list, 
   RegularExpression[".+\"(.+)\".+\"(.+)\""] -> "-$1-$2"];

生成结果

{"-https://book.douban.com/subject/1770782/-追风筝的人", \
"-https://book.douban.com/subject/1084336/-小王子", \
"-https://book.douban.com/subject/1008145/-围城", \
"-https://book.douban.com/subject/25862578/-解忧杂货店", \
"-https://book.douban.com/subject/1082154/-活着", \
"-https://book.douban.com/subject/3259440/-白夜行", \
"-https://book.douban.com/subject/1046265/-挪威的森林", \
"-https://book.douban.com/subject/3211779/-嫌疑人X的献身", \
"-https://book.douban.com/subject/2567698/-三体", \
"-https://book.douban.com/subject/1017143/-不能承受的生命之轻", \
"-https://book.douban.com/subject/1007305/-红楼梦", \
"-https://book.douban.com/subject/1016300/-梦里花落知多少", \
"-https://book.douban.com/subject/1040771/-达\[CenterDot]芬奇密码", \
"-https://book.douban.com/subject/20427187/-看见", \
"-https://book.douban.com/subject/6082808/-百年孤独", \
"-https://book.douban.com/subject/5275059/-1988:我想和这个世界谈谈", \
"-https://book.douban.com/subject/1461903/-何以笙箫默", \
"-https://book.douban.com/subject/1200840/-平凡的世界(全三部)", \
"-https://book.douban.com/subject/1141406/-简爱", \
"-https://book.douban.com/subject/1041007/-哈利\[CenterDot]波特与魔法石", \
"-https://book.douban.com/subject/10554308/-白夜行", \
"-https://book.douban.com/subject/3066477/-三体Ⅱ", \
"-https://book.douban.com/subject/1068920/-飘", \
"-https://book.douban.com/subject/4238362/-送你一颗子弹", \
"-https://book.douban.com/subject/5363767/-三体Ⅲ"}

注意,以上仅仅只是一个页面(第一页),那么,如何进行翻页呢?
答案是显然的,你只需要将以上步骤写成一个函数,然后对于不同的页面进行调用即可

https://book.douban.com/top250?start=0
https://book.douban.com/top250?start=25
https://book.douban.com/top250?start=50
https://book.douban.com/top250?start=75
.......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值