webmagic mysql_webmagic使用

webmagic mysql_webmagic使用webmagic 是 Java 语言用于爬虫的工具 官网地址 http webmagic io 中文文档地址 http webmagic io docs zh 使用 webmagic 有 3 种配置需要注意 日志配置 log4j webmagic 爬取配置 如超时时间 使用数据库的话数据库连接池配置 有一些配置最好做到可以随机器性能情况而改变配置信息 这样做的目的是为了将项目打成包以后在命令行下执行

webmagic是Java语言用于爬虫的工具。官网地址:http://webmagic.io/,中文文档地址:http://webmagic.io/docs/zh/

使用webmagic有3种配置需要注意,日志配置(log4j),webmagic爬取配置(如超时时间),使用数据库的话数据库连接池配置。有一些配置最好做到可以随机器性能情况而改变配置信息。这样做的目的是为了将项目打成包以后在命令行下执行程序可以随时更改配置。因此有些配置文件就不像c3p0配置文件一样放在源码文件夹下,而是相对与项目路径来说。

webmagic的架构图如下:

9b351d46b2f0f7495a47797e7cfa1749.png

从该架构图上可以得到一个信息,对于每一个页面来说,都会经历一个完成的过程,即从downloader—>pipeline,如列表页也会进入pipeline,所以列表页虽然没有数据需要存储,但在pipeline中去拿值就会出现空指针,因此在pipeline中要先进行判断,有值的情况下在进行数据库存储操作。

在页面解析部分(待补充),webmagic将解析语法做了一些改变,

1、如将正则表达式中.用\.表示

2、*变成了.*,直接使用表示通配符

3、xpath语法也进行了扩充。

代码示例:

webmagic版本:0.6.0

packagecom.lh.pipeline;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.SQLException;importjava.util.Iterator;importjava.util.Map;importjava.util.Map.Entry;importjava.util.Set;importjavax.sql.DataSource;importcom.mchange.v2.c3p0.ComboPooledDataSource;importus.codecraft.webmagic.ResultItems;importus.codecraft.webmagic.Task;importus.codecraft.webmagic.pipeline.Pipeline;public class MysqlPipeline implementsPipeline {//有一个容器

static DataSource ds = new ComboPooledDataSource();//直接使用即可,不用显示的配置,其会自动识别配置文件

public voidprocess(ResultItems resultItems, Task task) {//每进来一次代表一条记录//如果容器值达到1000,存一次数据库并将数据清空,否则将数据存入容器

Map m =resultItems.getAll();if(!m.isEmpty()){

Set> set =m.entrySet();

Iterator> reconds =set.iterator();

String url= null;

String name= null;

String content= null;for(int i=0;i

Entry recond =reconds.next();if(i==0){

url=recond.getValue().toString();

}else if(i==1){

name=recond.getValue().toString();

}else if(i==2){

content=recond.getValue().toString();

}

}

Connection conn= null;try{

conn=ds.getConnection();

String sql= “insert into softList(url,name,content) values(?,?,?)”;

PreparedStatement pstmt=conn.prepareStatement(sql);

pstmt.setString(1, url);

pstmt.setString(2, name);

pstmt.setString(3, content);

pstmt.execute();

pstmt.close();

conn.close();

}catch(SQLException e) {

e.printStackTrace();

}

}

}

}

packagecom.lh.spider;importcom.lh.pipeline.MysqlPipeline;importus.codecraft.webmagic.Page;importus.codecraft.webmagic.Site;importus.codecraft.webmagic.Spider;importus.codecraft.webmagic.pipeline.FilePipeline;importus.codecraft.webmagic.processor.PageProcessor;public class ProgramSpider implementsPageProcessor {private Site site = Site.me().setRetryTimes(3).setSleepTime(1000).setTimeOut(10000);public static final String URL_LIST = “http://www\\.xiazaiba\\.com/downlist/187_\\d{1,4}\\.html”;public static final String URL_POST = “http://www\\.xiazaiba\\.com/html/\\d+.html”;public voidprocess(Page page) {if(page.getUrl().regex(“http://www\\.xiazaiba\\.com/downlist/187\\.html”).match()||page.getUrl().regex(URL_LIST).match()){//第一页//加入详情页//加入列表页

page.addTargetRequests(page.getHtml().xpath(“//ul[@class=’cur-cat-list’]/li/a[1]”).links().all());

page.addTargetRequests(page.getHtml().xpath(“//div[@class=’ylmf-page’]”).links().all());

}else{//详情页

page.putField(“url”, page.getUrl());

page.putField(“ProgramName”, page.getHtml().xpath(“//div[@class=’soft-title’]/html()”));

page.putField(“ProgramContent”, page.getHtml().xpath(“//td[@class=’soft-content’]/html()”));

}

}publicSite getSite() {returnsite;

}public static voidmain(String[] args) {

Spider.create(newProgramSpider())

.addUrl(“http://www.xiazaiba.com/downlist/187.html”)

.addPipeline(new MysqlPipeline()).thread(10)

.run();

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228244.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午7:28
下一篇 2026年3月16日 下午7:29


相关推荐

  • 三字经 全文解读(三字经全文朗读儿童版解读)

    前言:《三字经》自南宋王应麟(字伯厚)先生所创作以来,已有七百多年历史,内容大都采用韵文,每三字一句,四句一组,像一首诗一样,背诵起来,如唱儿歌,三字经是学习中华传统文化不可多得的的儿童启蒙读物,共一千多字,可谓家喻户晓,脍炙人口。内容包括了中国传统的教育、历史、天文、地理、伦理和道德以及一些民间传说,广泛生动而又言简意赅。用来教育子女琅琅上口十分有趣,又能启迪心智,时人觉得本书内容很好,纷纷翻印

    2022年4月10日
    85
  • 编译Hi3516DV300的SDK

    编译Hi3516DV300的SDK前言如果您之前编译过EV200的SDK,那么您会发现,编译DV300的过程很类似,软件包直接拷贝,无需重新下载,通常在1-2个小时内能搞定SDK的编译。DV300的入门会简洁介绍,如果遇到编译错误,请你阅读EV200的编译过程和相应目录下的readme查询解决方法。欢迎访问海思开源平台:www.dopi.vip.环境ubuntu18.04amd64dopi@ubuntu:~$cat/proc/versionLinuxversion5.3.0-62-generic(buildd@

    2026年2月26日
    3
  • WebStorm快捷键配置「建议收藏」

    WebStorm快捷键配置「建议收藏」①浏览器快捷键设置

    2022年6月23日
    37
  • 卸载宝塔linux面板_怎样叠宝塔

    卸载宝塔linux面板_怎样叠宝塔Linux宝塔的安装和卸载步骤一、安装宝塔二、卸载宝塔2.1下载宝塔的卸载文件2.2运行此文件根据提示卸载一、安装宝塔二、卸载宝塔2.1下载宝塔的卸载文件wgethttp://download.bt.cn/install/bt-uninstall.sh2.2运行此文件根据提示卸载shbt-uninstall.sh…

    2025年9月17日
    7
  • Jmeter的正则表达式提取参数「建议收藏」

    Jmeter的正则表达式提取参数「建议收藏」1:Jmeter正则表达式提取器提取制定的值1.1:添加http请求(80端口不用写端口号)1.2:添加正则表达式提取器.表示匹配任意字符+表示匹配一个或者多个?表示匹配到结束为止PS:下面的正则表达式还可以写成province:'([^’]+)’,       表示:[^’]匹配到不是单引号’;+表示它内的多个字符1.3:添加Debugsampler(用Debug取样器可以方便tes…

    2025年10月21日
    5
  • 让OpenClaw中文版Molili帮你运营小红书!Skill技能配置保姆级教程

    让OpenClaw中文版Molili帮你运营小红书!Skill技能配置保姆级教程

    2026年3月13日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号