WebMagic爬虫入门教程(一)简介

来源:互联网 发布:sql语句update语句 编辑:程序博客网 时间:2024/06/04 00:33

 (一)前言

        工作学习中,需要进行爬虫。百度百科上说,网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫

        网络爬虫,我是这样理解的,简单说,就是下载web网页上的html代码中的信息。

  那么到底用什么语言爬虫呢?python不太熟,不过听说很不错,自己也在网上下载了一个python爬取贴吧的代码,很是不错,很简洁,也很快,地址为:http://www.cnblogs.com/fnng/p/3576154.html。

不过python语言毕竟不太熟,虽然python爬虫网络功能强大,比较方便模拟登陆、以及解析javascript ,写起起程序来很是便捷,只有网页解析这个劣势,不过我还是没有用它。

我使用的是java语言来爬虫,初学者才开始学习,没有什么经验,也就没有使用httpclient这些工具直接url爬虫,而是使用了国内的开源爬虫框架webmagic框架来爬虫。

(二)简介

webmagic是一个国内的java开源爬虫框架,它采用完全模块化的设计,功能覆盖整个爬虫的生命周期(链接提取、页面下载、内容抽取、持久化等),也支持多线程抓取、分布式抓取,并支持自动重试、自定义UA/cookie等功能。
对初学者而言,webmagic包含页面抽取功能,很方便使用,初学者可以使用css selector、xpath和正则表达式进行链接和内容的提取,支持多个选择器链式调用。
(三)webmagic的java爬虫
不废话了,直接上代码。
maven依赖:
<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></dependency>

     java代码:
package Webmagic.donghua.dmzj.com;/***Created by mo *On 2017/10/30  ***15:36. ******/import us.codecraft.webmagic.Page;import us.codecraft.webmagic.Site;import us.codecraft.webmagic.Spider;import us.codecraft.webmagic.processor.PageProcessor;import us.codecraft.webmagic.selector.Html;public class DmzjProcessor implements PageProcessor {    int myid = 0;    int size =10;    // 抓取网站的相关配置,可以包括编码、抓取间隔1s、重试次数等    private Site site = Site.me().setCharset("utf8").setRetryTimes(1000).setSleepTime(1000);    @Override    public Site getSite() {        return site;    }    @Override    public void process(Page page) {        Html html = page.getHtml();        size++;        String hahawebname = html.xpath("//div[@class=\"odd_anim_title_tnew\"]/div[@class=\"tvversion\"]/a/span[@class=\"anim_title_text\"]/h1/text()").get();//得分        String goal = html.xpath("//div[@class=\"anim_star\"]/ul/li[@id=\"anim_score_info\"]/span[@class=\"points_text\"]/text()").get();//得分        String mentotalold = html.xpath("//div[@class=\"anim_star\"]/ul/li[@id=\"score_statistics\"]/span[@id=\"score_count_span\"]/text()").get();//人数        String mentotal = mentotalold.replaceAll("人评分","");        String content = html.xpath("//div[@class=\"odd_anim_title_mnew\"]/p/span[@id=\"gamedescshort\"]/text()").get();//内容        String contentdetail = html.xpath("//div[@class=\"odd_anim_title_mnew\"]/p/span[@id=\"gamedescall\"]/text()").get();//内容        String url = "http://donghua.dmzj.com/donghua_info/"+size+".html";        System.out.println("hahawebname: "+ hahawebname);        System.out.println("goal: "+goal);        System.out.println("mentotal: "+ mentotal);        System.out.println("content: "+ content);        System.out.println("url:  "+ url);        System.out.println("contentdetail: "+ contentdetail);}    public static void main(String[] args) {        int username = 10;        DmzjProcessor my = new DmzjProcessor();        long startTime, endTime;        System.out.println("开始爬取...");        for(;username<=15000;username++) {            startTime = System.currentTimeMillis();            Spider.create(my).addUrl("http://donghua.dmzj.com/donghua_info/" + username + ".html").thread(5).run();            endTime = System.currentTimeMillis();            System.out.println("爬取结束,耗时约" + ((endTime - startTime) / 1000) + "秒");        }    }}
        运行的结果为:


(四)过程:
(1)首先使用谷歌浏览器查看html网页,比若说打开:http://donghua.dmzj.com/donghua_info/10.html

(2)查找我们想要获取的内容(比如说简介,动画名,制作公司什么的),一般情况下,首先找到我们想要查找的内容,选中点右键点检查,就会跳出如下图右边的一个框框,那里边有你想要的内容,找到不重复的标签就好。

(3)编写正则语句就好。

希望对你有所帮助!

原创粉丝点击