# BsfSpider **Repository Path**: chejiangyi/BsfSpider ## Basic Information - **Project Name**: BsfSpider - **Description**: 根据bsf框架搭建通用的爬虫脚手架方案,帮助java研发人员快速开发爬虫项目。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2023-02-27 - **Last Updated**: 2024-10-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BsfSpider #### 介绍 根据[bsf](https://gitee.com/chejiangyi/free-bsf-all)框架搭建通用的爬虫脚手架方案,帮助java研发人员快速开发爬虫项目。 #### 背景 1) 避免项目重复安装,重复搭建,研发人员日常交叉review和修改的阅读的难点(开发风格和标准不统一)。 2) 沉淀标准的类库,通用解决一些爬虫相关的难度(诸如反爬的解决方案),避免重复开发,提升爬虫开发的效率。 #### 常用java爬虫解决方案总结 ##### Jsoup 一般爬虫方案 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。它是支持url请求获取html,也支持cookie传递,可以对html进行dom解析,通过select方法动态定位元素,非常方便开发人员爬取相应的信息。一般无反爬策略的网站可以采用此方案进行爬取,比如国外很多网站都对seo非常友好,采用这个方案简单,高效。百度上也有很多教程,上手非常容易~ ##### selenium 浏览器爬虫方案 Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。适用于自动化测试,js动态爬虫(破解反爬虫)等领域。在java爬虫领域,一般我们采用google chrome,下载相应的driver驱动,通过api操控浏览器模拟人工行为(诸如模拟点击,模拟拖动,模拟执行脚本等等),通过driver.findElements进行内容解析抓取。采用此方案一般来解决复杂和具备一些反爬策略的网站。百度上也有很多教程,上手不算很难~ #### 标准化解决方案 不断沉淀标准的脚手架和类库,将一些通用的,共性有难度的技术点(特别是针对性的反爬技术整合)形成标准化的解决方案,避免重复造轮子,重复尝试造成的效率下降。 * 脚手架开源地址: https://gitee.com/chejiangyi/BsfSpider * 默认引用的组件包含:数据库相关,excel导出相关,selenium-java,Jsoup,[bsf-core框架](https://gitee.com/chejiangyi/free-bsf-all) #### 快速上手方案 1. 下载脚手架(基础组件都已包含和定义好了)。 2. 若是一般爬虫场景,继承BaseJsoupSpider实现, 如: ``` public class DemoCategoryJsoupSpider extends BaseJsoupSpider { @Override public void run(){ /*此处实现逻辑,脚手架中有demo*/ } } ``` 3. 若是浏览器爬虫场景,继承BaseChromeSpider实现,如: ``` public class DemoCategoryChromeSpider extends BaseChromeSpider { @Override public void run(){ /*此处实现逻辑,脚手架中有demo*/ } } ``` *注: 操作系统系统需要下载chrome。底层在第一次运行时会自动根据chrome的版本号,下载相应驱动(无需手工下载)。同时初始化selenium(默认会带有自动化的一些header特征)时,会尽量抹掉所有自动化爬虫的标记,尽量模拟出真实chrome访问,避免一定的反爬策略(诸如stealth.min.js 可以及时更新)。* 4. 简单db操作 ``` public void select(){ List> list = DbHelper.get(Config.getDataSource(), (conn) -> { val ds = conn.executeList("select * from user where id=?", new Object[]{1}); return ds; }); } public void insertOrUpdate(){ DbHelper.call(Config.getDataSource(), (c) -> { c.executeSql("update tb_fbform set nav=? where id=?", new Object[]{"", 1}); }); } ``` 5. 简单excel导出 ``` List excelDemos = new ArrayList<>(); excelDemos.add(new ExcelDemo()); exportExcel("aa.xls",excelDemos); ``` 6. 动态json解析 支持path动态解析,path格式为index(或属性).index(或属性).index(或属性)... ``` DynamicObj d = this.json("{...}");//传入json字符串 d.tryParse("@3.coreInfo.result.mainCateLv1Name",String.class) ``` 7. 若是数据清洗场景,继承BaseImport实现,如: ``` public class DemoImport extends BaseImport { @Override public void run(){ DbHelper.call(Config.getDataSource(),(c)->{ //循环遍历数据集 batchLoop(c,"aaatable",1000,(list)->{ val doc = Jsoup.parse(""); //下载并替换doc里面的图片文件 this.replaceImgSrc(doc,new Ref<>(null),new ArrayList(),new ArrayList()); //下载并替换doc里面的视频文件 this.replaceVedioSrc(doc); // OssClientUtil.downloadAndTryUpload("http://www.sssss.com/a.jpg"); }); }); } } ``` 8. 数据库实体操作生成器 easycode 可百度了解,安装easycode idea插件后,可导入[dal生成器模板](/资料/dal.java.vm) [model生成器模板](/资料/model.java.vm); 即可几秒生成新数据操作层! ![easycode](/资料/easycode.jpg) ``` //帖子回复数 val replyStat =DbHelper.get(Config.getDataSource(),(c)-> { return new tb_fbform_dal().replyStat(c);//.delete(),.add(),.edit() }); ``` #### 常见的一些反爬策略沉淀及方案 ##### 国内外网络限制 诸如temu和shein等网站,国内都无法访问,假设我们访问,需要通过vpn访问(也有企业级的vpn)。 * 如[西柚vpn工具](/资料/XiYou32_2.9.5.0.zip)(貌似只能代理浏览器,不能代理java程序) * [Cisco AnyConnect 工具](/资料/anyconnect-win-4.10.05095-core-vpn-predeploy-k9.msi)(服务器链接b2j3.com:1443,用西柚的vpn账号也可以登陆,支持代理java程序) * [免费开源的第三方工具](https://github.com/freefq/free)。 ##### 图形验证码等限制 沉淀中,敬请期待! ##### ip限制 可以采用第三方代理ip服务,获取代理ip。目前采用芝麻代理(仅国内ip,注意本地程序还要配置ip白名单)! ``` //自动获取绑定代理 new BaseChromeSpider(isAutoProxy) new BaseJsoupSpider().autoNewProxy(); //获取代理再手工绑定代理 val proxy = new ProxyIPProvider().get(); ``` ##### 手机验证码等限制 沉淀中,敬请期待! by [车江毅](https://www.cnblogs.com/chejiangyi/)
2023-2-28
文档仅做分享交流,禁止用于非法用途!