首页 > 其他分享 >探秘WebMagic:爬虫神器

探秘WebMagic:爬虫神器

时间:2023-06-14 22:31:56浏览次数:40  
标签:爬虫 us 爬取 import WebMagic 探秘 public webmagic

一、介绍

WebMagic是一款基于Java的开源网络爬虫框架,能够快速、灵活、高效地实现网络数据的爬取和抽取。WebMagic支持多线程、分布式、自动重试等特性,而且使用起来也非常方便。

二、优点

1. 快速:使用了NIO框架,能够高效地进行网络通信,提高爬虫效率。

2. 灵活:支持自定义爬取规则,能够适应不同的网站结构和数据格式。

3. 高效:采用了异步非阻塞的方式,同时支持多线程和分布式部署,提高爬虫的效率和稳定性。

4. 易用:提供了简单易懂的API,开发者能够快速上手。

三、四大组件

1. Downloader(页面下载组件):负责下载网页,可选择不同的下载器。

2. PageProcessor(页面处理组件):对下载的页面进行处理,包括解析页面,提取有用的数据等。

3. Pipeline(结果输出组件):负责对 PageProcessor 处理出的结果进行处理,可以将结果存储在文件、数据库、搜索引擎等地方。

4. Scheduler(URL管理器):用于管理待抓取的 URL 队列,保证数据的准确性和抓取效率,还支持使用Redis等分布式存储来实现分布式抓取。

四、使用场景

1. 数据采集:能够帮助企业或个人快速、高效地获取网络上的数据,用于数据挖掘、业务分析等领域。

2. 站点监测:能够监测特定网站的变化,如新闻、价格、商品等,帮助企业及时了解市场动态。

3. 网络抓取:WebMagic可以模拟人类浏览器从网站抓取页面和内容,在网站的每个层次上收集信息和数据,从而构建完整的产品目录和分类。

五、注意事项

1. 避免反爬虫机制:一些网站会设置反爬虫机制,需要通过模拟浏览器行为、使用代理等方式进行规避。

2. 控制爬取速度:过快的爬取速度会给网站带来负担,同时也容易被网站封禁IP。

六、补充内容

1. 多语言支持:WebMagic有Python和Scala等语言的版本,能够适应不同开发者的需求。

2. 爬虫任务调度:WebMagic能够与Quartz等任务调度框架结合使用,实现定时爬取数据的功能。

3. WebMagic支持多线程:能够利用多核CPU提高爬虫效率。

4. WebMagic支持多种功能:Cookie、代理等功能,能够模拟登录、避免反爬等操作。

5. WebMagic支持多种格式的数据存储:如MySQL、Redis、Elasticsearch等,方便后续数据处理。

6. 处理异常情况:WebMagic能够处理一些异常情况,如页面404、解析错误等,提高爬虫的健壮性。

七、实际场景

1. 案例一

    (1) 场景

    爬取一个简单的页面。

    (2) 代码

    pom.xml

<!--web magic-->
<dependency>
    <groupId>us.codecraft</groupId>
    <artifactId>webmagic-core</artifactId>
    <version>0.8.0</version>
</dependency>
<dependency>
    <groupId>us.codecraft</groupId>
    <artifactId>webmagic-extension</artifactId>
    <version>0.8.0</version>
</dependency>

    WebMagicCase1.java

/**
 * 简单的WebMagic爬取页面案例
 *
 * @author wxy
 * @since 2023-05-30
 */
public class WebMagicCase1 {
    public static void main(String[] args) {
        String[] urls = new String[]{
                "https://blog.csdn.net/qq_45871274/article/details/129162237"
        };

        new MyTask().execute(urls);
    }
}

    MyTask.java

import us.codecraft.webmagic.Spider;

/**
 * 爬取任务
 *
 * @author wxy
 * @since 2023-05-30
 */
public class MyTask {
    public void execute(String... url) {
        Spider spider = Spider
                // 指定页面解析器
                .create(new MyProcessor())
                // 指定爬取结果的处理器
                .addPipeline(new MyPipeline())
                .addUrl(url)
                // 创建3个线程
                .thread(3);
        //异步爬取
        spider.start();
    }
}

    PageProcessor.java

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.processor.PageProcessor;

import java.util.ArrayList;
import java.util.List;

/**
 * 页面解析
 *
 * @author wxy
 * @since 2023-05-30
 */
public class MyProcessor implements PageProcessor {
    @Override
    public void process(Page page) {
        String pageStrHtml = page.getHtml().get();
        Document pageHtmlDocument = Jsoup.parse(pageStrHtml);
        List<String> contentList = new ArrayList<>();
        // 获取文章标题
        Elements title = pageHtmlDocument
                .select("h1[id=articleContentId]");
        // 写入标题文本内容
        page.putField("title", title.text());

        // 获取文章内容
        Elements contents = pageHtmlDocument
                .select("div[id=content_views]");
        for (Element content : contents) {
            for (Element element : content.children()) {
                // 写入每一个标签中的文本内容
                contentList.add(element.text());
            }
            // 写入文章全部文本内容
            page.putField("contents", contentList);
        }
    }

    @Override
    public Site getSite() {
        //在爬取页面时对http请求的一些设置 例如编码、HTTP头、超时时间、重试策略 等、代理等
        return Site.me()
                // 重试次数
                .setRetryTimes(3)
                // 间隔时间
                .setSleepTime(100)
                // 设置超时时间
                .setTimeOut(10000);
    }
}

    MyPipeline.java

import us.codecraft.webmagic.ResultItems;
import us.codecraft.webmagic.Task;
import us.codecraft.webmagic.pipeline.Pipeline;

import java.util.List;

/**
 * 爬取结果的处理
 *
 * @author wxy
 * @since 2023-05-30
 */
public class MyPipeline implements Pipeline {
    @Override
    public void process(ResultItems resultItems, Task task) {
        // 打印文章标题文本内容(在这里解析并保存至数据库)
        System.out.println("文章标题: ");
        System.out.println(resultItems.get("title").toString());
        // 打印文章内容文本内容
        List<String> contents = resultItems.get("contents");
        System.out.println("文章内容: ");
        for (String content : contents) {
            System.out.println(content);
        }
    }
}

    最后将爬取的文章标题和内容输出:

探秘WebMagic:爬虫神器_java


标签:爬虫,us,爬取,import,WebMagic,探秘,public,webmagic
From: https://blog.51cto.com/u_15898747/6482251

相关文章

  • python GUI+爬虫——12306抢票软件(1)
    使用python的GUI和爬虫等功能自己构造一个12306的抢票软件。该课程来自网易云课堂的撩课学院,付费课程。地址:网易云课堂搜索以下内容就可找到我跟着学,不一定最后能成功。先试试,想要成功的同学请看我该系列有没有真正实现,如果我没有实现,你可以直接放弃,不用再浪费时间了。简单描述一......
  • python GUI+爬虫——12306抢票软件(2)
    这部分主要是项目环境的配置,下图是概览1.基于项目的虚拟环境--pipenv1.1简介1.2安装pipinstallpipenv, 检查安装状态:pipenv--version 我的系统是mac,该项目使用Windows10开发更好1.3创建项目的虚拟环境,使用pycharm1.4创建完后修改安装源,修改位置为pipfile文件修改:来源修......
  • 全自动 抖音搜索、抖音Api、抖音直播Api、抖音评论采集、抖音弹幕、抖音采集、抖音爬
    抖音搜索、抖音Api、抖音直播Api、抖音评论采集、抖音弹幕、抖音采集、抖音爬虫、抖音去水印、抖音下载、抖音解析抖音爬虫源码、抖音去水印源码、抖音解析源码、抖音桌面批量去水印工具源码价钱便宜qq:1013811393,有demo,可以试用,可以看效果。非免费,有诚意的加我。售后有保障......
  • 知名爬虫
    GooglebotgoogleWebCrawlers谷歌搜索googleWebCrawlersBingbotBingWebCrawlers微软必应BingWebCrawlersSlurpYahooWebCrawlers雅虎搜索YahooWebCrawlersDuckDuckBotDuckDuckGoWebCrawlersentirewebDuckDuckGoWebCrawlersBaiduspider......
  • 爬虫使用代理IP主要解决什么问题
    很多爬虫因为IP被限制访问而购买了代理IP,然而再次使用一会儿还是被限制访问,这又是为什么呢?爬虫使用代理IP主要能帮我们解决什么问题呢?众所周知,每个网站都有其独特的反爬策略,最基础的有请求频率,请求次数等策略,如果不使用代理IP的话,客户端IP很快就会被目标网站限制访问。但如果购买了......
  • 使用爬虫IP有什么好处?
    在进行爬虫操作时,使用代理IP可以避免自己的真实IP被目标网站识别和追踪,并且可以设置多个不同的代理IP以增加请求的随机性,提高成功率。 爬虫IP的好处包括:隐藏真实IP地址:使用爬虫IP,通过代理服务器来连接互联网,可以隐藏用户的真实IP地址,避免被攻击者追踪。访问被封......
  • 空间数据的智慧呈现:探秘GIS地图的魅力
    随着科技的飞速发展和数字化时代的来临,GIS地图正成为一个强大的工具,为我们提供了更准确、全面的地理空间数据和智能化的解决方案。GIS地图集成了地理信息、空间分析和可视化技术,为我们打开了一个全新的世界,让我们能够更好地理解和探索我们的环境。 GIS地图为我们提供了精确、实......
  • 爬虫案例分享
    案例importrequests#如果报红,电脑控制台执行:python-mpipinstallrequests,下载即可frombs4importBeautifulSouptitle=[]#所有文章标题#因为需要爬取的数据,不单单存在一个页面,所以需要分析目标网站的URL规律,构造出每一页的URL,并逐个爬取forpageinrange(4):#目......
  • 怎么利用代理IP优化网络爬虫
    网络爬虫会自动扫描互联网,搜集大量数据并将它们组织起来。但是,许多网站都采取了反爬虫策略,限制了网络爬虫的活动。这时候,代理IP就起到了关键作用。  一、代理ip在网络爬虫中的作用  代理ip爬虫中使用代理IP有很多好处。首先,它可以避免爬虫的真实IP地址被网站识别并被封禁......
  • 如何高质量完成java爬虫
    Java爬虫是通过Java语言编写的网络爬虫程序,用于自动化地浏览和抓取互联网上的数据,并将数据进行处理和保存。为了编写高效且不容易被检测出来的Java爬虫,通常需要掌握Java语言以及与之相关的库和框架,如Jsoup、HttpClient、Selenium等。那么如何快速完成爬虫项目?具体有哪些流程呢?......