WebMagic爬取博客图片
最近在学习java爬虫,接触到WebMagic框架,正好拿我喜爱的博客来练习,希望龙哥(博主)不要责备我~~
博客链接: 好色龍的網路觀察日誌 ,超级有趣的翻译漫画,持续了七年之久,惊叹!访问需要科学上网
不多说,上过程。
-
创建Maven项目(我用的是IDEA),在pom.xml中添加WebMagic依赖:
`<dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-core</artifactId> <version>0.7.3</version> </dependency> <dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-extension</artifactId> <version>0.7.3</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> `
而如何使用WebMagic请访问其官网,上有中文文档。
中文文档上手就是快啊 -
揣摩要爬取博客的HTML代码。我仅想爬取他的雜七雜八短篇漫畫翻譯中的图片,那么我们找到相关列表页面,看到文章列表在
<div class = "blog-posts">
之下,那么我们只要将页面中这部分连接提取出来就行了。
接着我们看每篇单独文章的链接以编写正则表达式匹配。容易发现博文链接格式是这样的https://hornydragon.blogspot.com/2018/11/1014.html
,其中2018,11,1014是可变的,分别是发布的年份,月份,博文编号。那就可以编写正则表达式:https://hornydragon\.blogspot\.com/\d{4}/\d{2}/\d{1,5}[\w]*\.html
。(也许会想为什么最后是四位数字,还需要加[\w]*
?因为我发现有时候博主推送的博文会在最后有test
等字符跟着,这是以防出现的万一) -
现在一个列表页我们已经能获得上面全部文章的链接了,那么重复这个过程,将其他列表页都弄进来就结束了噻,正当我点击看到第二页列表页的时候,发现有些不对劲。第一列表页的链接是这样的:
https://hornydragon.blogspot.com/search/label/%E9%9B%9C%E4%B8%83%E9%9B%9C%E5%85%AB%E7%9F%AD%E7%AF%87%E6%BC%AB%E7%95%AB%E7%BF%BB%E8%AD%AF?&max-results=30
,第二页却是这样的:https://hornydragon.blogspot.com/search/label/%E9%9B%9C%E4%B8%83%E9%9B%9C%E5%85%AB%E7%9F%AD%E7%AF%87%E6%BC%AB%E7%95%AB%E7%BF%BB%E8%AD%AF?updated-max=2018-06-05T17%3A24%3A00%2B08%3A00&max-results=30#PageNo=2
。多了两部分,PageNo还好弄,updated-max跟日期就不好弄了,因为每推送一篇博文都会刷新这个日期。最大的问题其实还不是在这,WebMagic爬取是利用表达式筛选URL,这样我们可以找到页脚上的下一页标签,不断地筛选并获取下一列表页的链接就行了。当我想琢磨下一页链接的套路以编写正则表达式时,发现这博客下一页链接使用JS函数捣鼓出来跳转的