http://webmagic.io/docs/zh/posts/ch4-basic-page-processor/selectable.html

webmagic官网文档解释

所需jar包:

以及webmagic(负责爬虫的jar包)

一般的jar包都在此网站找到       https://jar-download.com/

文件目录:

对于复杂的爬虫采取如上简单的分包。

c3p0-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config><default-config><property name="driverClass">com.mysql.jdbc.Driver</property><!-- <property name="jdbcUrl">jdbc:mysql:///web15</property> --><property name="jdbcUrl">jdbc:mysql://localhost:3306/pachong?serverTimezone=UTC</property><!-- &amp;useSSL=false --><property name="user">root</property><property name="password">123456</property><property name="initialPoolSize">5</property><property name="maxPoolSize">20</property></default-config><named-config name="itheima"><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql:///web15</property><property name="user">root</property><property name="password">123456</property></named-config><named-config name="experiment"><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql:///experiment</property><property name="user">root</property><property name="password">123456</property></named-config>
</c3p0-config>

JdongMain.java:

package jingdong.main;import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;import javax.sql.DataSource;import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.junit.Test;import com.mchange.v2.c3p0.ComboPooledDataSource;import jingdong.model.JdModel;
import jingdong.util.URLFerter;public class JdongMain {public static void main(String[] args) {Connection conn = null;System.setProperty("com.mchange.v2.c3p0.cfg.xml",new JdongMain().getClass().getClassLoader().getResource("").getPath() + "c3p0-config.xml");//src下的c3p0路径DataSource dataSource = new ComboPooledDataSource();try {conn = dataSource.getConnection();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}//String url="http://search.jd.com/Search?keyword=Python&enc=utf-8&book=y&wq=Python&pvid=33xo9lni.p4a1qb"; //抓取的数据String url = "https://www.xhsd.com/activity/channel-renwensheke";List<JdModel> bookdatas = URLFerter.URLParser(url);/*for(JdModel jd:bookdatas) {System.out.println(jd.getBookName());System.out.println(jd.getBookPrice());}*///System.out.println(bookdatas);System.out.println("111111");QueryRunner runner = new QueryRunner();String sql = "insert into bookinfo(bookName,bookPrice) value(?,?)";for(JdModel jd:bookdatas) {//System.out.println(jd);try {runner.update(conn, sql,jd.getBookName(),jd.getBookPrice());} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
}

JdModel.java:

package jingdong.model;public class JdModel {private String bookID;private String bookName;private Double bookPrice;public String getBookID() {return bookID;}public void setBookID(String bookID) {this.bookID = bookID;}public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}public Double getBookPrice() {return bookPrice;}public void setBookPrice(Double double1) {this.bookPrice = double1;}}

URLFerter.java:

package jingdong.util;import java.util.ArrayList;
import java.util.List;import jingdong.model.JdModel;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;public class URLFerter implements PageProcessor{private static int count = 1;
//  private static String url;private static List<JdModel> jd = new ArrayList<JdModel>();@Overridepublic Site getSite() {// TODO Auto-generated method stubSite site = Site.me();site.setTimeOut(3000);site.setRetrySleepTime(3);site.setSleepTime(1000);return site;}@Overridepublic void process(Page page) {// TODO Auto-generated method stubif (count==1) {List<String> all = page.getHtml().regex("item-link.{1,50}target").all();//List<String> all = page.getHtml().regex("\\d+").all();//System.out.println(page.getHtml());//System.out.println(all);for(String jd:all) {String substring = jd.substring(18, jd.length()-8);String url1 = "https:/"+substring;//System.out.println(url1);page.addTargetRequest(url1);}count++;}if (count==2) {List<String> bookName = page.getHtml().regex("js-item-name.{1,50}</span>").all();List<String> bookPrice = page.getHtml().regex("js-item-price.{1,50}</span>").all();List<String> rBookName=new ArrayList<String>();List<Double> rBookPrice =new ArrayList<Double>();//System.out.println("111"+bookName);//System.out.println("222"+bookPrice);for(String string:bookName) {int indexOf = string.indexOf("<span>");String sub = string.substring(indexOf+6,string.length()-8);//System.out.println(sub);rBookName.add(sub);}for(String string:bookPrice) {int indexOf = string.indexOf("sale-price");int indexOf2 = string.indexOf("</span>");String substring = string.substring(indexOf+14,indexOf2);//System.out.println(substring);double parseDouble = Double.parseDouble(substring);//System.out.println("hhaha"+parseDouble);rBookPrice.add(parseDouble);}JdModel jdModel = null;for(int i=0;i<=bookName.size()-1;i++) {jdModel = new JdModel();jdModel.setBookName(rBookName.get(i));//System.out.println(jdModel.getBookName());jdModel.setBookPrice(rBookPrice.get(i));//System.out.println(jdModel.getBookPrice());jd.add(jdModel);}}/*for(JdModel one:jd) {System.out.println(one.getBookName());System.out.println(one.getBookPrice());}*/}public static List<JdModel> URLParser(String URL){
//      url = URL;Spider create = Spider.create(new URLFerter());create.addUrl(URL);create.thread(1);create.run();//System.out.println(jd.size());/*for(int i=0;i<=jd.size()-1;i++) {System.out.println(jd.get(i).getBookName());System.out.println(jd.get(i).getBookPrice());}*/return jd;}
}

数据库配置如下:

自此,爬取书店书籍信息成功。

Tip:1、文件名称如JDongMedel.java虽然是表示京东含义,但是实践JAVA爬虫过程中发现京东貌似设置了反爬机制,导致爬取实属不易,出此下策爬取新华书店书籍名。

2、URLFerter为爬取核心代码,其中的字符筛选可以使用三种方式  1)regex方法 (推荐)   2)xpath方法 (推荐)   3)Jsoup方法

3、爬虫代码的执行实际上是多次执行proceed方法,每request一次页面就会执行一次,所以使用静态变量的count可以有效的划分执行逻辑,减少不必要的执行。

4、如上为很简单类型的爬虫,网站并没有反爬机制。一般网站通过简单的数据对比分析可以爬取到自己想要的信息,想要爬取更多的网站学习更深的内容。

5、反爬机制:

  • reboot.txt
  • User-Agent           https://blog.csdn.net/Lujuntong/article/details/81952519
  • ip限制-可以代理ip
  • 验证码
  • ajax动态加载页面
  • cookie限制

Java爬虫更新mysql数据库(简单事例)相关推荐

  1. java向mysql写入数据慢_通过java代码往mysql数据库中写入日期相关数据少13个小时...

    通过show variables like '%time_zone%'; 查看时区: CST 时区 名为 CST 的时区是一个很混乱的时区,有四种含义: 美国中部时间 Central Standard ...

  2. java jdbc 连接mysql数据库 实现增删改查

    好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...

  3. 获取mysql可行方法_Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法...

    <Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法>要点: 本文介绍了Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法,希望对您有用.如果有 ...

  4. html.编辑数据回显,从HTML表格编辑/更新MySQL数据库值

    我有一个表单,目前提交值到MySQL数据库.在每次提交完成后,刚刚插入到mysql数据库的数据将在表单下回显.该表格具有动态输入字段.我知道想要添加编辑以前插入的值的可能性.我放置了一个编辑按钮,将用 ...

  5. java写的MySQL数据库备份和恢复代码:

    1.MySQL数据库备份和恢复,java代码实现:详情见下面: package com.spring.util; import java.io.BufferedReader; import java. ...

  6. Java程序向MySql数据库中插入的中文数据变成了问号

    找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...

  7. eclipes Java代码连接Mysql数据库

    Java代码连接Mysql数据库C 一.插件的下载与加载 1.下载与本地的MySQL对应版本的连接数据库的包,如mysql-connector-java-8.0.17.jar 下载Connector/ ...

  8. java JDBC连接MySQL数据库调用存储过程进行查询

    java JDBC连接MySQL数据库调用存储过程进行查询 主程序代码 工具类 文件信息 存储过程 结果截图 主程序代码 package Mysql;import util.JDBCUtils; im ...

  9. Unity3D笔记——MySQL数据库 简单使用

    ** Unity3D笔记--MySQL数据库 简单使用 前言:Unity3D笔记是我平时做一些好玩的测试和研究,记录的笔记.会比较详细也可能随口一提就过了. 所以大家见谅了,内容一般都会是原创的(非原 ...

最新文章

  1. iOS图片,视频上传视频内容旋转
  2. html5 百度地图api文档,开发指南--百度地图JavaScript API大众版.doc
  3. Spring Cloud配置–外部化应用程序配置
  4. 大家整齐的qipaifans朗读声忽然乱了
  5. 又一尴尬问题!不少用户反馈iPhone 12屏幕特别“黄”
  6. 如何使用webrtc 一
  7. WPF自定义控件与样式(4)-CheckBox/RadioButton自定义样式
  8. WordCount开发与测试
  9. echarts3.0 本期累计堆叠
  10. Windows8 Metro应用开发之C#(3)- 数据控件ListView、GridView、FlipView
  11. 一文打尽PHP代码加密方式
  12. 【JS逆向系列】某服务器平台sm系列算法分析
  13. 【计算机图形学】Bezier曲线软件及操作
  14. 【PYTHON】利用Python爬取电影网站
  15. 自定义SharePoint新网站创建过程(2)
  16. MATLAB电机仿真精华50例
  17. 【综述笔记】一些弱监督语义分割论文
  18. 连玉君链接-Stata连享会
  19. mysql numeric int_关于mysql数据库的数据类型numeric和decimal_MySQL
  20. 用计算机录音并播放教学设计,八年级信息技术《录制声音》说课稿

热门文章

  1. 计算机学院新生入学讲座,安全意识,铭记我心 --计算机学院开展新生入学安全教育讲座...
  2. 知乎上万赞回答:年薪百万的程序员背后到底有多艰辛?
  3. 基于51单片机 数控恒流源设计 可调电流源
  4. 用 JavaScript 和 C3 实现一个转盘小游戏
  5. 面积比重庆小,人口比浦东少,数据告诉你克罗地亚是什么样的国家
  6. 2019UNCTF-CRYPTO-simple_rsa
  7. go语言MQTT服务器(五)MQTT服务器集群
  8. CRM系统需具有的九大功能
  9. 技嘉X79 UD3主板再创Intel reg X79超频世界纪录
  10. JavaScript 之ES6