小小,这次开始使用webmagic爬取相关的网站,这里爬取的网站为 https://member.vobao.com/  将会对该网站进行爬取,并进行实战。

分析网站

打开devtool查看网站相关的链接。单击下一页的时候,可以看到发起一个请求,这里对这个请求进行解析。

可以看到有以下的一些参数,这里用到的将会是Area1List1,以及 Area2List2 这两个参数。

查看源代码,搜索这两个参数。发现对应于城市列表页面。

使用postman进行测试

这里使用postman进行相关的测试。可以发现输出如下的内容

这里的json发送的文件如下

{"Area1List1":"10","Area2List2":"121","Search.KeyWord":"","Search.AreaID1":"10","Search.AreaID2":"121","Search.AreaID3":"0","Search.PyCode":"0","Search.CompanySymbol":"0","Search.Year":"0","Search.OrderTp":"1","Search.SearchTp":"1","Search.UserLevel":"0","Search.SortRule":"","Search.PageIndex":"1","Search.PageSize":"10","Search.LastHash":"0","Search.TotalPages":"8","Search.TotalCount":"80","sex":"1","X-Requested-With":"XMLHttpRequest"
}

这样就完成了一轮新的基本的测试。

获取链接URL

这里对页面的链接进行获取,获取到相关的URL。

可以发现,我们这里需要的链接是 http://www.syxdg.cn/ 这种类型的链接,所以进行一个正则匹配。书写如下的正则,进行相关的匹配,匹配相关的url。

进行正则匹配的链接如下

page.getHtml().links().regex("(http://www.(.*).cn)").all()

匹配的核心在于

http://www.(.*).cn

使用贪婪算法,匹配www和cn之间的任意字符,进行相关的匹配。

当发现为空的时候进行跳过

if(urls == null || urls.size() == 0){page.setSkip(true);}

并把相关的参数,汇入list集合中

 page.putField("url", urls);

其中需要发送post请求,携带参数

这里需要发送post请求,并且将会需要携带参数,如下

Request request = new Request("https://member.vobao.com/Member/SellerList?Length=6");request.setMethod(HttpConstant.Method.POST);request.setRequestBody(HttpRequestBody.json("{n" +"    "Area1List1":" +  "  +  count   +  "  +",n" +"    "Area2List2":"1",n" +"    "Search.KeyWord":"",n" +"    "Search.AreaID1":"-100",n" +"    "Search.AreaID2":"0",n" +"    "Search.AreaID3":"0",n" +"    "Search.PyCode":"0",n" +"    "Search.CompanySymbol":"0",n" +"    "Search.Year":"0",n" +"    "Search.OrderTp":"1",n" +"    "Search.SearchTp":"1",n" +"    "Search.UserLevel":"0",n" +"    "Search.SortRule":"",n" +"    "Search.PageIndex":"1",n" +"    "Search.PageSize":"10",n" +"    "Search.LastHash":"0",n" +"    "Search.TotalPages":"8",n" +"    "Search.TotalCount":"80",n" +"    "sex":"1",n" +"    "X-Requested-With":"XMLHttpRequest"n" +"}","utf-8"));Spider.create(new vobao()).addRequest(request).addPipeline(new vobaoMysql()).thread(50000).run();

其中,HttpRequestBody将会是json相关的配置信息,将会在Request进行相关的传入,实现request请求的发送。

双重循环

这里需要进行双重循环 由于城市和二级城市,这两个需要做到双重循环,双重循环如下,并且插入的时候也需要做到双重循环。

一级城市循环

int count = 1;for(count = 1; count <= 100; count++) {System.out.println("count: -----------------" +  count);Request request = new Request("https://member.vobao.com/Member/SellerList?Length=6");request.setMethod(HttpConstant.Method.POST);request.setRequestBody(HttpRequestBody.json("{n" +"    "Area1List1":" +  "  +  count   +  "  +",n" +"    "Area2List2":"1",n" +"    "Search.KeyWord":"",n" +"    "Search.AreaID1":"-100",n" +"    "Search.AreaID2":"0",n" +"    "Search.AreaID3":"0",n" +"    "Search.PyCode":"0",n" +"    "Search.CompanySymbol":"0",n" +"    "Search.Year":"0",n" +"    "Search.OrderTp":"1",n" +"    "Search.SearchTp":"1",n" +"    "Search.UserLevel":"0",n" +"    "Search.SortRule":"",n" +"    "Search.PageIndex":"1",n" +"    "Search.PageSize":"10",n" +"    "Search.LastHash":"0",n" +"    "Search.TotalPages":"8",n" +"    "Search.TotalCount":"80",n" +"    "sex":"1",n" +"    "X-Requested-With":"XMLHttpRequest"n" +"}","utf-8"));Spider.create(new vobao()).addRequest(request).addPipeline(new vobaoMysql()).thread(50000).run();}

每创建一次循环,就产生一个一级城市,并开始创建一个新的爬虫。

二级城市循环

这里使用webmagic相关的爬虫,实现二级城市的循环 其核心在于以下参数, 中途经过json的相关的转化,并实现其转化的完成以及失败

// 从body中获取inta和intbString jsonRes = new String(page.getRequest().getRequestBody().getBody());//System.out.println(jsonRes);Gson gson = new Gson();RequestInfo requestInfo = gson.fromJson(jsonRes, RequestInfo.class);// 页数加上//requestInfo.setArea1List1((Integer.parseInt(requestInfo.getArea1List1()) + 1) + "");requestInfo.setArea2List2((Integer.parseInt(requestInfo.getArea2List2()) + 1) + "");System.out.println("Area2List2---------------" + requestInfo.getArea2List2());String resNewJson = gson.toJson(requestInfo);//System.out.println(resNewJson);Request request = new Request("https://member.vobao.com/Member/SellerList?Length=6");request.setMethod(HttpConstant.Method.POST);request.setRequestBody(HttpRequestBody.json(resNewJson,"utf-8"));

全部代码

这里全部代码如下

package com.example.demo;import com.example.demo.db.PingAnMysql;
import com.example.demo.db.vobaoMysql;
import com.example.demo.model.JqBxInfo;
import com.example.demo.model.RequestInfo;
import com.google.gson.Gson;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Request;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.model.HttpRequestBody;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.utils.HttpConstant;import java.util.List;public class vobao implements PageProcessor {private Site site = Site.me().setRetryTimes(50000).setSleepTime(0);/*** process the page, extract urls to fetch, extract the data and store** @param page page*/@Overridepublic void process(Page page) {// 从body中获取inta和intbString jsonRes = new String(page.getRequest().getRequestBody().getBody());//System.out.println(jsonRes);Gson gson = new Gson();RequestInfo requestInfo = gson.fromJson(jsonRes, RequestInfo.class);// 页数加上//requestInfo.setArea1List1((Integer.parseInt(requestInfo.getArea1List1()) + 1) + "");requestInfo.setArea2List2((Integer.parseInt(requestInfo.getArea2List2()) + 1) + "");System.out.println("Area2List2---------------" + requestInfo.getArea2List2());String resNewJson = gson.toJson(requestInfo);//System.out.println(resNewJson);Request request = new Request("https://member.vobao.com/Member/SellerList?Length=6");request.setMethod(HttpConstant.Method.POST);request.setRequestBody(HttpRequestBody.json(resNewJson,"utf-8"));// 获取页面urlList<String> urls = page.getHtml().links().regex("(http://www.(.*).cn)").all();if(urls == null || urls.size() == 0){page.setSkip(true);}page.putField("url", urls);page.addTargetRequest(request);}/*** get the site settings** @return site* @see Site*/@Overridepublic Site getSite() {return this.site;}public static void main(String[] args){int count = 1;for(count = 1; count <= 100; count++) {System.out.println("count: -----------------" +  count);Request request = new Request("https://member.vobao.com/Member/SellerList?Length=6");request.setMethod(HttpConstant.Method.POST);request.setRequestBody(HttpRequestBody.json("{n" +"    "Area1List1":" +  "  +  count   +  "  +",n" +"    "Area2List2":"1",n" +"    "Search.KeyWord":"",n" +"    "Search.AreaID1":"-100",n" +"    "Search.AreaID2":"0",n" +"    "Search.AreaID3":"0",n" +"    "Search.PyCode":"0",n" +"    "Search.CompanySymbol":"0",n" +"    "Search.Year":"0",n" +"    "Search.OrderTp":"1",n" +"    "Search.SearchTp":"1",n" +"    "Search.UserLevel":"0",n" +"    "Search.SortRule":"",n" +"    "Search.PageIndex":"1",n" +"    "Search.PageSize":"10",n" +"    "Search.LastHash":"0",n" +"    "Search.TotalPages":"8",n" +"    "Search.TotalCount":"80",n" +"    "sex":"1",n" +"    "X-Requested-With":"XMLHttpRequest"n" +"}","utf-8"));Spider.create(new vobao()).addRequest(request).addPipeline(new vobaoMysql()).thread(50000).run();}}
}

Mysql

这里编写Mysql相关的内容,由于传入的是List,需要实现List的批量插入

package com.example.demo.db;import com.example.demo.model.RequestInfo;
import us.codecraft.webmagic.ResultItems;
import us.codecraft.webmagic.Task;
import us.codecraft.webmagic.pipeline.Pipeline;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.List;public class vobaoMysql implements Pipeline {/*** Process extracted results.** @param resultItems resultItems* @param task        task*/@Overridepublic void process(ResultItems resultItems, Task task) {List<String> list = resultItems.get("url");for(int i = 0; i < list.size(); i++){try {Class.forName("com.mysql.cj.jdbc.Driver");Connection connection = DriverManager.getConnection("jdbc:mysql://cdb-1yfd1mlm.cd.tencentcdb.com:10056/JqBxInfo", "root", "ABCcba20170607");Statement statement = connection.createStatement();String sql = "insert into url" + " values(" +  """+  list.get(i)   +  """ + ")";System.out.println(sql);int res = statement.executeUpdate(sql);System.out.println(res);}catch (Exception e){}}}
}

所以继续添加循环,实现批量的插入

执行效果

控制台打印出log如下

查看数据库

这里查看数据库相关的信息

这样就完成了列表页面信息的搜集。

明天将会写保单关于页面的信息搜集。

小明菜市场

推荐阅读

● 实战 | WebMagic 实现分布式爬虫

● 实记 | MongoDB 多表连接查询

● 新知 | MongoDB 账号管理

● 方案 | Mongodb 高可用落地方案

● 介绍 | MyPerf4J 入门指南

实战 | WebMagic 爬取某保险经纪人网站经纪人列表之网站列表爬取相关推荐

  1. 实战 | webmagic爬取实战之爬取保险经纪人信息

    介绍 小小根据上次爬取经验,发现爬取的时候,信息不太完善,这次针对手机页面进行爬取. 查看手机页面 相对于pc端口的页面,手机端的页面更容易爬取.通过网络信息,可以查看到是这个请求发起的网络信息.查看 ...

  2. 爬虫实战(一)—利用requests、mongo、redis代理池爬取英雄联盟opgg实时英雄数据

    概述 可关注微信订阅号 loak 查看实际效果. 代码已托管github,地址为:https://github.com/luozhengszj/LOLGokSpider 包括了项目的所有代码. 此篇文 ...

  3. 新网站是如何吸引蜘蛛进行爬取的?

    对于新建的网站来说,不仅是排名还是权重的提升都需要优化人员进行更细心的操作,吸引更多的蜘蛛进行爬取网站才能逐渐提升网站的收录量和排名,那么新站该如何吸引蜘蛛进行爬取呢?接下来就一起来看看. 一.主动提 ...

  4. 利用宝塔linux面板+苹果CMS搭建电影网站(二)网站的配置+电影资源的爬取上传

    在利用宝塔linux面板+苹果CMS-----从0搭建一个电影网站(一)里已经初始创建了一个电影网站的雏形 接下来需要对网站进行编辑修改上传电影资源 达到这一种效果; 网站修改编辑 进入网站后台 ip ...

  5. Python爬取网站用户手机号_利用python爬取慕课网站上面课程

    1.抓取网站情况介绍 抓取网站:http://www.imooc.com/course/list 抓取内容:要抓取的内容是全部的课程名称,课程简介,课程URL ,课程图片URL,课程人数(由于动态渲染 ...

  6. 一起学爬虫——如何爬取通过ajax加载数据的网站

    目前很多网站都使用ajax技术动态加载数据,和常规的网站不一样,数据时动态加载的,如果我们使用常规的方法爬取网页,得到的只是一堆html代码,没有任何的数据. 请看下面的代码: url = 'http ...

  7. 新手爬取51job,智联,boss网站职位信息总结和代码(小杜总结)

    爬取要求: (1) 使用合适的数据保存手段保存爬取数据 (2) 记每条数据的爬取时间 (3) 实现数据的增量爬取 (4) 实现同时基于关键字和页面 URL 的去重元数据说明: 一 统一注意事项或建议 ...

  8. 基于爬虫爬取的数据,完成数据展示网站

    文章目录 前言 一.列表 分页 二.注册 登录 三.查询支持布尔表达式 四.图表 五.入口创建 总结 前言 学期进入尾声 web编程课程迎来了期末大作业 作业要求如下: 基于第一个项目爬虫爬取的数据, ...

  9. 前程无忧网站,职位信息一步到位函数爬取!!!真一步到位

    前程无忧网站,职位信息一步到位函数爬取!!!真一步到位 又到了毕业季了,阿巴阿巴阿巴.那么对于自己何去何从有什么好的规划呢?不如爬取点职位的数据来分析分析吧,纵观各大网站,要么就是数据少,要么就是很难 ...

最新文章

  1. Atitit 桌面软件跨平台gui解决方案 javafx webview
  2. CentOS 6.7 RPM安装MySQL
  3. C#中的预处理指令详解
  4. 数学在计算机科学上的应用文献,浅谈数学在计算机科学及应用中的作用
  5. DotNetCore 3.0 助力 WPF本地化
  6. 安装php-zbarcode的步骤方法
  7. 开发方法---形式化方法
  8. 沟通CTBS,加快山东海化金蝶EAS远程接入
  9. USB鼠标线和USB线接法
  10. 计算机科学技术学报官网convex,计算机学报chin
  11. 无法删除文件,无法读源文件或磁盘
  12. 北洋园pt---一个好用的pt网站
  13. asio strand
  14. 使用 Python 生成迷宫
  15. [百家号]铁流:华为Hi1620发布 自研内核还是ARM改?
  16. JAVA视频网盘分享
  17. JME2 和JME3的比较
  18. centos7 安装 nodejs 16
  19. ESP使用MQTT登陆阿里云,arduino环境
  20. 怎样用python生成中文字符画_如何利用Python实现图片转字符画详解

热门文章

  1. 《史上最简单的 SpringCloud 教程》系列
  2. POJ 1681 高斯消元 枚举自由变元
  3. 《混合云计算》——第2章 混合云的连续统2.1 解释混合云
  4. AndroidStudio安装教程(Windows环境下)
  5. linux中的inode节点
  6. 时间管理—如何充分利用你的24小时
  7. 重载与覆盖(java)
  8. Oracle dataGuard专题:Rman通过duplicate创建standby
  9. SecureCRT 7.3.4 安装以及破解
  10. 量子计算机全世界最新进展,谷歌或于明年公布全球最强大量子计算机